Skip to content

Instantly share code, notes, and snippets.

@mjb940806
Last active March 16, 2017 21:02
Show Gist options
  • Save mjb940806/7dde15b8dd0fd3ead525817056cefef5 to your computer and use it in GitHub Desktop.
Save mjb940806/7dde15b8dd0fd3ead525817056cefef5 to your computer and use it in GitHub Desktop.
Pwnable.kr [Toddler's Bottle] Writeup

1. fd

ssh [email protected] -p2222 (pw:guest)

๐Ÿ‘ SSH

์ถœ์ฒ˜

์‹œํ์–ด ์…ธ(Secure Shell, SSH)๋Š” ๋„คํŠธ์›Œํฌ ์ƒ์˜ ๋‹ค๋ฅธ ์ปดํ“จํ„ฐ์— ๋กœ๊ทธ์ธํ•˜๊ฑฐ๋‚˜ ์›๊ฒฉ ์‹œ์Šคํ…œ์—์„œ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์œผ๋กœ ํŒŒ์ผ์„ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด ์ฃผ๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ๋˜๋Š” ๊ทธ ํ”„๋กœํ† ์ฝœ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ๊ธฐ์กด์˜ rsh, rlogin, ํ…”๋„ท ๋“ฑ์„ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์œผ๋ฉฐ, ๊ฐ•๋ ฅํ•œ ์ธ์ฆ ๋ฐฉ๋ฒ• ๋ฐ ์•ˆ์ „ํ•˜์ง€ ๋ชปํ•œ ๋„คํŠธ์›Œํฌ์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ํ†ต์‹ ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

SSH๋Š” ์•”ํ˜ธํ™” ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํ†ต์‹ ์ด ๋…ธ์ถœ๋œ๋‹ค ํ•˜๋”๋ผ๋„ ์ดํ•ดํ•  ์ˆ˜ ์—†๋Š” ์•”ํ˜ธํ™”๋œ ๋ฌธ์ž๋กœ ๋ณด์ธ๋‹ค.

SSH์˜ ์ฃผ์š” ๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋ณด์•ˆ ์ ‘์†์„ ํ†ตํ•œ rsh, rcp, rlogin, rexec, telnet, ftp ๋“ฑ์„ ์ œ๊ณต
  • IP spoofing (IP์Šคํ‘ธํ•‘, ์•„์ดํ”ผ ์œ„/๋ณ€์กฐ ๊ธฐ๋ฒ•์ค‘ ํ•˜๋‚˜)์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
  • X11 ํŒจํ‚ท ํฌ์›Œ๋”ฉ ๋ฐ ์ผ๋ฐ˜์ ์ธ TCP/IP ํŒจํ‚ท ํฌ์›Œ๋”ฉ์„ ์ œ๊ณต

pwnable.kr์˜ ๋ฌธ์ œ์—์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์„œ SSH์— ์ ‘์†ํ•˜๋„๋ก ํ•œ๋‹ค.

ssh [email protected] -p2222

์—ฌ๊ธฐ์„œ fd๋Š” ์›๊ฒฉ ์„œ๋ฒ„์˜ ์œ ์ €๋ช…์„(pwnable์—์„œ๋Š” ๋ฌธ์ œ์˜ ์ด๋ฆ„์„ ์œ ์ €๋ช…์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.), pwnable.kr์€ ์›๊ฒฉ ์„œ๋ฒ„์˜ ๋„๋ฉ”์ธ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. -p2222๋Š” ํฌํŠธ ๋ฒˆํ˜ธ์ด๋‹ค.

๐Ÿ‘ ์›๊ฒฉ ์„œ๋ฒ„์— ์ ‘์†ํ•˜๊ธฐ

ํ„ฐ๋ฏธ๋„์—์„œ ssh [email protected] -p2222๋ฅผ ์น˜๊ณ  Are you sure you want to continue connecting (yes/no)? ๋ผ๋Š” ์งˆ๋ฌธ์ด ๋‚˜์˜ค๋ฉด yes๋ฅผ ์นœ๋‹ค. password๋Š” ๋ฌธ์ œ์—์„œ ์•Œ๋ ค์ค€ guest๋ฅผ ์น˜๋ฉด ์›๊ฒฉ ์„œ๋ฒ„์— ์ ‘์†์ด ๋œ๋‹ค.

๐Ÿ‘ ์„œ๋ฒ„์— ์žˆ๋Š” ํŒŒ์ผ ์‚ดํŽด๋ณด๊ธฐ

ํ„ฐ๋ฏธ๋„์—์„œ ls -l์„ ์น˜๋ฉด ํŒŒ์ผ์„ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ๊ถŒํ•œ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. root ๊ถŒํ•œ์œผ๋กœ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํŒŒ์ผ์˜ ๊ฒฝ์šฐ permission denied๋ผ๋Š” ๋ฌธ๊ตฌ๊ฐ€ ๋œจ๋ฉด์„œ ๋‚ด์šฉ์„ ๋ณผ ์ˆ˜ ์—†๋‹ค.

fd.c

์ด ๋ฌธ์ œ๋Š” toddler's bottle์ด๊ธฐ ๋•Œ๋ฌธ์— c ํŒŒ์ผ์„ ์ œ๊ณตํ•œ๋‹ค.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char buf[32];
int main(int argc, char* argv[], char* envp[]){
        if(argc<2){
                printf("pass argv[1] a number\n");
                return 0;
        }
        int fd = atoi( argv[1] ) - 0x1234;
        int len = 0;
        len = read(fd, buf, 32);
        if(!strcmp("LETMEWIN\n", buf)){
                printf("good job :)\n");
                system("/bin/cat flag");
                exit(0);
        }
        printf("learn about Linux file IO\n");
        return 0;

}

์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด fd๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. fd๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์ž…๋ ฅ๋ฐ›์€ ๋’ค ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ 2๋ณด๋‹ค ์ž‘๋‹ค๋ฉด "pass argv[1] a number" ๊ตฌ๋ฌธ์„ ์ถœ๋ ฅํ•œ๋‹ค. 2 ์ด์ƒ์ผ ๊ฒฝ์šฐ์—๋Š” atoi()๋ฅผ ์ด์šฉํ•ด ์ •์ˆ˜๋กœ ๋ณ€ํ™˜ํ•œ ํ›„์— 16์ง„์ˆ˜ 0x1234(10์ง„์ˆ˜ 4660)์„ ๋นผ์„œ ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜ fd์— ์ €์žฅํ•œ๋‹ค. ์ด ๊ฐ’์€ read(fd, buf, 32)์—์„œ file descriptor ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ ๋œ๋‹ค.

์ด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด buf์— ์ €์žฅ๋œ ๋ฌธ์ž์—ด์ด "LETMEWIN"๊ณผ ๊ฐ™์•„์•ผ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— (strcmp๋Š” ๋ฌธ์ž์—ด ๋น„๊ต ํ›„ ๋‘ ๋ฌธ์ž์—ด์ด ๊ฐ™์„ ๋•Œ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.) buf์— "LETMEWIN"์ด๋ผ๋Š” ๋ฌธ์ž์—ด์„ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. buf์— ๋ฌธ์ž์—ด์„ ๋„ฃ๊ธฐ ์œ„ํ•ด์„œ๋Š” file descriptor ๊ฐ’์ด standard input์ธ 0์ด์–ด์•ผ ํ•œ๋‹ค.

file descriptor์˜ ๊ฐ’์ด 0์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ •์ˆ˜ํ˜• ๋ณ€์ˆ˜ fd์˜ ๊ฐ’์ด 0์ด ๋˜์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— fd ์‹คํ–‰ํŒŒ์ผ์„ ์‹คํ–‰ํ•  ๋•Œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ 4660์œผ๋กœ ๋„ฃ์–ด์ฃผ๋ฉด ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด if(!strcmp("LETMEWIN\n", buf))๋ฌธ์ด ์‹คํ–‰๋˜์–ด /bin/cat flag๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด flag ๊ฐ’ ์ •๋‹ต์ด ๋œ๋‹ค.

๐Ÿ‘ file descriptor

์ถœ์ฒ˜

file descriptor๋Š” ์‹œ์Šคํ…œ์œผ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์€ ํŒŒ์ผ์ด๋‚˜ ์†Œ์ผ“์„ ๋Œ€ํ‘œํ•˜๋Š” ์ •์ˆ˜์ด๋‹ค. ํ‘œ์ค€ ์ž…๋ ฅ ๋ฐ ํ‘œ์ค€ ์ถœ๋ ฅ๋„ file descriptor๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ ์ด๋“ค์€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋˜๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์—ด๋ฆฌ๊ณ , ์ข…๋ฃŒ์‹œ ์ž๋™์œผ๋กœ ๋‹ซํžˆ๊ฒŒ ๋œ๋‹ค.

  • 0: Standard Input(ํ‘œ์ค€ ์ž…๋ ฅ)
  • 1: Standard Output(ํ‘œ์ค€ ์ถœ๋ ฅ)
  • 2: Standard Error(ํ‘œ์ค€ ์—๋Ÿฌ)

๋”ฐ๋ผ์„œ ํŒŒ์ผ์„ ์—ด๊ฑฐ๋‚˜ ์†Œ์ผ“์„ ์ƒ์„ฑํ•  ๋•Œ ๋ถ€์—ฌ๋˜๋Š” file descriptor๋Š” 3๋ถ€ํ„ฐ ์‹œ์ž‘๋œ๋‹ค.

๐Ÿ‘ read

์ถœ์ฒ˜

ssize_t read (int fd, void *buf, size_t nbytes)

  • int fd : ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ
  • void *buf : ํŒŒ์ผ์„ ์ฝ์–ด ๋“ค์ผ ๋ฒ„ํผ
  • size_t nbytes : ๋ฒ„ํผ์˜ ํฌ๊ธฐ

open() ํ•จ์ˆ˜๋กœ ์—ด๊ธฐ๋ฅผ ํ•œ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ๋Š”๋‹ค. ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋˜์—ˆ๋‹ค๋ฉด ์ฝ์–ด๋“ค์ธ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ, ์‹คํŒจํ–ˆ๋‹ค๋ฉด -1์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

2. collision

ssh [email protected] -p2222 (pw:guest)

๐Ÿ‘ MD5

์ถœ์ฒ˜1 ์ถœ์ฒ˜2

MD5(Message-Digest algorithm 5)๋Š” 128๋น„ํŠธ ์•”ํ˜ธํ™” ํ•ด์‹œ ํ•จ์ˆ˜๋กœ ์ฃผ๋กœ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ํŒŒ์ผ์ด ์›๋ณธ ๊ทธ๋Œ€๋กœ์ธ์ง€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ ๋“ฑ์— ์‚ฌ์šฉ๋œ๋‹ค.

MD5๋Š” ์„ค๊ณ„์ƒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜์–ด ํ˜„์žฌ๋Š” MD5 ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ณด์•ˆ ๊ด€๋ จ ์šฉ๋„๋กœ ์“ฐ๋Š” ๊ฒƒ์€ ๊ถŒ์žฅํ•˜์ง€ ์•Š์œผ๋ฉฐ, ์‹ฌ๊ฐํ•œ ๋ณด์•ˆ ๋ฌธ์ œ๋ฅผ ์•ผ๊ธฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๋‹ค๋งŒ ๊ณ ์† ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๊ณ  (์ •์ˆ˜ ์—ฐ์‚ฐ ๋ฐ ๋น„ํŠธ ์‹œํ”„ํŠธ ์—ฐ์‚ฐ๋งŒ ์‚ฌ์šฉํ•œ๋‹ค.) ์ž„์˜๋กœ ๋ณ€๊ฒฝ๋œ ํŒจํ„ด์— ๋Œ€ํ•ด์„œ๋Š” ์ถฉ๋Œ ๊ฐ€๋Šฅ์„ฑ์ด ์ถฉ๋ถ„ํžˆ ๋‚ฎ๊ธฐ ๋•Œ๋ฌธ์—, ํ˜„์žฌ๋Š” ์ฃผ๋กœ ๋„คํŠธ์›Œํฌ๋กœ ์ „์†ก๋œ ํฐ ํŒŒ์ผ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ํ™•์ธํ•˜๋Š”๋ฐ ์‚ฌ์šฉํ•œ๋‹ค.

๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”์ด๊ธฐ ๋•Œ๋ฌธ์— MD5 hash ๊ฐ’์—์„œ ์›๋ž˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๊ฐ™์€ MD5๋ฅผ ๊ฐ–๋Š” ๋ฌธ์ž์—ด, ์ฆ‰ ์ถฉ๋Œ(collision)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. MD5 ๊ฐ’์ด ๊ฐ™์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋‹ค๋ฅด๋”๋ผ๋„ ๊ฐ™์€ ๋ฌธ์ž์—ด์ด๋ผ๊ณ  ํŒ๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ๋ชจ๋“  ๋‹จ๋ฐฉํ–ฅ ์•”ํ˜ธํ™”์— ํ†ต์šฉ๋˜๋Š” ๊ธฐ๋ฒ•์ด๋‹ค.

๐Ÿ‘ ์„œ๋ฒ„์— ์žˆ๋Š” ํŒŒ์ผ ์‚ดํŽด๋ณด๊ธฐ

col.c

#include <stdio.h>
#include <string.h>
unsigned long hashcode = 0x21DD09EC;
unsigned long check_password(const char* p){
        int* ip = (int*)p;
        int i;
        int res=0;
        for(i=0; i<5; i++){
                res += ip[i];
        }
        return res;
}

int main(int argc, char* argv[]){
        if(argc<2){
                printf("usage : %s [passcode]\n", argv[0]);
                return 0;
        }
        if(strlen(argv[1]) != 20){
                printf("passcode length should be 20 bytes\n");
                return 0;
        }

        if(hashcode == check_password( argv[1] )){
                system("/bin/cat flag");
                return 0;
        }
        else
                printf("wrong passcode.\n");
        return 0;
}

๋งค๊ฐœ๋ณ€์ˆ˜์—†์ด ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•  ๊ฒฝ์šฐ "usage : [passcode]"๋ผ๋Š” ๋ฌธ์žฅ์ด ์ถœ๋ ฅ๋˜๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๊ฐ€ 20์ด ์•„๋‹ ๊ฒฝ์šฐ "passcode length should be 20 bytes"๋ผ๋Š” ๋ฌธ์žฅ์ด ์ถœ๋ ฅ๋œ๋‹ค. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ ์ž…๋ ฅํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ฌธ์ž์—ด์„ check_passwordํ•จ์ˆ˜์— ๋„ฃ์€ ๊ฒฐ๊ณผ๊ฐ’์ด hashcode๊ฐ’์ธ 0x21DD09EC์™€ ๊ฐ™์œผ๋ฉด /bin/cat flag๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

check_password ํ•จ์ˆ˜๋ฅผ ์‚ดํŽด๋ณด๋ฉด charํ˜•์„ ํฌ์ธํ„ฐ์ธ p๋ฅผ ์ •์ˆ˜ํ˜• ํฌ์ธํ„ฐ๋กœ ํ˜•๋ณ€ํ™˜ํ•œ๋‹ค. passcode์˜ ๊ธธ์ด๋Š” 20byte์ด๊ณ  ์ •์ˆ˜ํ˜• ํฌ์ธํ„ฐip๋Š” 4byte์ด๊ธฐ ๋•Œ๋ฌธ์— ip์— ์ €์žฅ๋˜์–ด์žˆ๋Š” ๊ฐ’ 5๊ฐœ๋ฅผ ๋”ํ•ด์„œ hascode ๊ฐ’์ธ 0x21DD09EC๋กœ ๋งŒ๋“ค์–ด์ฃผ๋ฉด ๋œ๋‹ค.

res๊ฐ’ ๋„ฃ์–ด์ฃผ๊ธฐ

res ๊ฐ’์€ ์ •์ˆ˜ํ˜• ๋‹ค์„ฏ๊ฐœ๋ฅผ ๋”ํ•ด์„œ ๊ตฌํ•ด์ง„๋‹ค. res ์— ๋“ค์–ด๊ฐ€์•ผํ•  0x21DD09EC๋ฅผ 5๋กœ ๋‚˜๋ˆ„๋ฉด 0x6C5CEC8๊ฐ€ ๋‚˜์˜จ๋‹ค. ๋‚˜๋จธ์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— 0x6C5CEC8๋ฅผ ๋„ค ๋ฒˆ ๋”ํ•œ ํ›„ 0x6C5CECC๋ฅผ ํ•œ ๋ฒˆ ๋”ํ•ด์ฃผ๋ฉด 0x21DD09EC๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋œ๋‹ค.

โ–ถ๏ธ 0x21DD09EC = 0x6C5CEC8 * 4 + 0x6C5CECC

๊ทธ๋Ÿฐ๋ฐ ip ์— ๋„ฃ์–ด์•ผ ํ•  ๊ฐ’์€ ์•„์Šคํ‚ค ์ฝ”๋“œ ๋ฒ”์œ„๋ฅผ ๋„˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ’ ๋Œ€์ž…์œผ๋กœ ๋„ฃ์–ด์ค„ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๋กœ ์ง์ ‘ ๋„ฃ์–ด์ฃผ๋˜ ์‹œ์Šคํ…œ์€ little-endian์„ ๋”ฐ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— little-endian๋ฐฉ์‹์œผ๋กœ ๋„ฃ์–ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๊ฒฐ๊ณผ์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋„ฃ์–ด์ฃผ๋ฉด /bin/cat flag๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

./col $(perl -e 'print "\xc8\xce\xc5\x06"x4 . "\xcc\xce\xc5\x06"')
./col `python -c 'print "\xc8\xce\xc5\x06"*4+"\xcc\xce\xc5\x06"'`

๐Ÿ‘ ์•„์Šคํ‚ค ์ฝ”๋“œ

์ถœ์ฒ˜1 ์ถœ์ฒ˜2

๋ฏธ๊ตญ์ •๋ณด๊ตํ™˜ํ‘œ์ค€๋ถ€ํ˜ธ(American Standard Code for Information Interchange; ASCII)๋Š” ์˜๋ฌธ ์•ŒํŒŒ๋ฒณ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์ด๋‹ค. ์•„์Šคํ‚ค๋Š” ์ปดํ“จํ„ฐ์™€ ํ†ต์‹  ์žฅ๋น„๋ฅผ ๋น„๋กฏํ•œ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋งŽ์€ ์žฅ์น˜์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ, ๋Œ€๋ถ€๋ถ„์˜ ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์ด ์•„์Šคํ‚ค์— ๊ธฐ์ดˆ๋ฅผ ๋‘๊ณ  ์žˆ๋‹ค.

์•„์Šคํ‚ค ์ฝ”๋“œ๋Š” ๋ฏธ๊ตญ์—์„œ ํ‘œ์ค€ํ™”ํ•œ ์ •๋ณด๊ตํ™˜์šฉ 7๋น„ํŠธ ๋ถ€ํ˜ธ์ฒด๊ณ„์ด๋‹ค. 000(0x00)๋ถ€ํ„ฐ 127(0x7F)๊นŒ์ง€ ์ด 128๊ฐœ์˜ ๋ถ€ํ˜ธ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. ์ด๋Š” ์˜๋ฌธ ํ‚ค๋ณด๋“œ๋กœ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ๊ธฐํ˜ธ๋“ค์ด ํ• ๋‹น๋˜์–ด ์žˆ๋Š” ๋ถ€ํ˜ธ ์ฒด๊ณ„์ด๋ฉฐ, ๋งค์šฐ ๋‹จ์ˆœํ•˜๊ณ  ๊ฐ„๋‹จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–ด๋А ์‹œ์Šคํ…œ์—์„œ๋„ ์ ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์œผ๋‚˜, 2๋ฐ”์ดํŠธ ์ด์ƒ์˜ ์ฝ”๋“œ๋ฅผ ํ‘œํ˜„ํ•  ์ˆ˜ ์—†๋‹ค.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment