½ÅÀÔºÐµé µé¾î¿À½Å ±â³äÀ¸·Î(?) ¤»¤» °£´ÜÇÑ ptrace °­Á¸¦ ½ÃÀÛÇÏ°Ú½À´Ï´Ù. ptrace´Â ¸®´ª½º, À¯´Ð½º ȯ°æ¿¡¼­ ÇÁ·Î¼¼½º µð¹ö±ë¿¡ »ç¿ëµÇ´Â ÇÔ¼öÀÔ´Ï´Ù. lib.so¿¡¼­ ptrace¸¦ exportÇÏ°í ÀÖ°í¿ä ½ÇÁ¦·Î´Â ptrace¶ó´Â À̸§ÀÇ Ä¿³Î ½Ã½ºÅÛÄÝÀÌ ³»ºÎÀûÀ¸·Î »ç¿ëµË´Ï´Ù. Áö±Ý º¸´Ï 26¹ø ½Ã½ºÅÛÄÝÀ» »ç¿ëÇÏ°í Àֳ׿ä # cat /usr/include/asm/unistd.h | grep ptrace #define __NR_ptrace 26 # ¸®´ª½º¿¡¼­ ptraceÀÇ ±â´ÉÀº ½Ç·Î ¸·°­ÇÕ´Ï´Ù. ¹«Àû µð¹ö±ë µµ±¸ÀÎ gdb°¡ ³»ºÎÀûÀ¸·Î´Â ptrace¸¦ »ç¿ëÇÏ°í ÀÖÁÒ. ptraceÀÇ Æ¯Â¡Àº, ´Ù¾çÇÑ ±â´ÉµéÀ» ÇÔ¼ö ÀÎÀڷΠó¸®ÇÑ´Ù´Â Á¡ÀÔ´Ï´Ù. ptrace(PTRACE_ATTACH, ... ); // ÀÌ·¸°Ô Çϸé process¸¦ attachÇÏ°Ú´Ù´Â °ÍÀÌ°í¿ä ptrace(PTRACE_GETREGS, ... ); // ÀÌ°Ç ´ë»ó processÀÇ ·¹Áö½ºÅÍ ¸ñ·ÏÀ» ¹Þ¾Æ¿À¶ó´Â °ÅÁÒ ptrace(PTRACE_PEEKDATA, ... ); // ÀÌó·³ µ¥ÀÌÅ͸¦ ¾²°Å³ª ptrace(PTRACE_POPEDATA, ... ); // °¡Á®¿Ã ¼ö ÀÖ½À´Ï´Ù. ±× ¿Ü man ptrace¸¦ Çغ¸¸é, PTRACE_TRACEME PTRACE_PEEKTEXT, PTRACE_PEEKDATA PTRACE_PEEKUSR PTRACE_POKETEXT, PTRACE_POKEDATA PTRACE_POKEUSR PTRACE_SYSCALL, PTRACE_SINGLESTEP PTRACE_GETREGS, PTRACE_GETFPREGS PTRACE_GETSIGINFO (since Linux 2.3.99-pre6) PTRACE_SETREGS, PTRACE_SETFPREGS PTRACE_SETSIGINFO (since Linux 2.3.99-pre6) PTRACE_SETOPTIONS (since Linux 2.4.6; see BUGS for caveats) PTRACE_GETEVENTMSG (since Linux 2.5.46) PTRACE_CONT PTRACE_SYSEMU, PTRACE_SYSEMU_SINGLESTEP (since Linux 2.6.14) PTRACE_KILL PTRACE_ATTACH PTRACE_DETACH À§ ¸ñ·ÏÀ» º¼ ¼ö ÀÖ½À´Ï´Ù. ¿ì¼± PTRACE_ATTACH ÀÎÀÚ¸¦ ÀÌ¿ëÇÏ¿© ´ë»ó ÇÁ·Î¼¼½º¸¦ attach Çغ¸°Ú½À´Ï´Ù. µð¹ö±ë ´ë»ó ÇÁ·Î±×·¥ÀÇ ¼Ò½ºÄÚµå´Â ´ÙÀ½°ú °°½À´Ï´Ù. int main() { while(1){ printf("mung mung!\n"); sleep(1); } } 1ÃÊ´ÜÀ§·Î ¸Û¸Û~ ÇÏ°í Áþ´Â°Ô ÀüºÎÁÒ.. Å͹̳ΠÇϳª¸¦ ¿­¾î À̸¦ ½ÇÇàÇØ ³õ½À´Ï´Ù. [root@hackerschool ptrace]# gcc -o a a.c a.c: In function 'main': a.c:4: warning: incompatible implicit declaration of built-in function 'printf' [root@hackerschool ptrace]# ./a mung mung! mung mung! mung mung! mung mung! mung mung! mung mung! ±×¸®°í ´Ù¸¥ Å͹̳ο¡¼± ´ÙÀ½°ú °°ÀÌ ÄÚµùÀ» ÇÕ´Ï´Ù. #include #include int main(int argc, char *argv[]) { struct user_regs_struct regs; int ret, pid, i; pid = atoi(argv[1]); ret = ptrace(PTRACE_ATTACH, pid, 0, 0); printf("return : %d\n", ret); ptrace(PTRACE_DETACH, pid, 0, 0); } [root@hackerschool matphone]# gcc -o ptrace ptrace.c [root@hackerschool matphone]# !ps -aux | grep ./a Warning: bad syntax, perhaps a bogus '-'? See /usr/share/doc/procps-3.2.7/FAQ root 12388 0.0 0.0 1608 304 pts/0 S+ 12:58 0:00 ./a root 14274 0.0 0.0 5136 788 pts/2 S+ 13:00 0:00 grep ./a [root@hackerschool matphone]# ./ptrace 12388 return : 0 [root@hackerschool matphone]# ¸®ÅÏ °ªÀÌ 0À̸é Á¦´ë·Î µÇ¾î°¡°í ÀÖ´Â °Ì´Ï´Ù. ¤¾¤¾ Äڵ忡 º¸ÀÌ´Ù½ÃÇÇ ÇÁ·Î¼¼½º¸¦ attachÇϱâ À§Çؼ± ù ¹øÀç ÀÎÀÚ·Î PTRACE_ATTACH, ±×¸®°í µÎ ¹ø° ÀÎÀÚ·Î PID°¡ µé¾î°©´Ï´Ù. ±×¸®°í ¿©±â¼­ ±âº»ÀûÀ¸·Î ¾Ë°íÀÖ¾î¾ßÇÏ´Â Á¡Àº ATTACH ´çÇÑ ÇÁ·Î¼¼½º°¡ STOP »óÅ·Πµé¾î°£´Ù´Â Á¡ÀÔ´Ï´Ù. À§ ¿¹Á¦¿¡¼± ATTACHÇÏÀÚ¸¶ÀÚ DETACHÇϱ⠶§¹®¿¡ STOPµµ ¹Ù·Î Ç®·Á¹ö¸®°ÔµÇÁÒ ÇÏÁö¸¸ ´ÙÀ½Ã³·³ sleepÀ» ³Ö°í Çѹø È®ÀÎÇØ º¸½Ã¸é mung mung ¹®ÀÚ¿­ Ãâ·ÂÀÌ ¸ØÃß´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ½À´Ï´Ù ... ret = ptrace(PTRACE_ATTACH, pid, 0, 0); sleep(10); ... mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung ... ¸ØÃã»óÅ ... ÀÌ ¸ØÃã »óŸ¦ Ç®¾îÁÖ·Á¸é PTRACE_DETACH ÀÎÀÚ¸¦ ³Ö¾îÁÖ¸é µË´Ï´Ù. ÀÌÁ¦ ´ÙÀ½À¸·Î ÇØ´ç ÇÁ·Î¼¼½ºÀÇ ·¹Áö½ºÅÍ °ªµéÀ» Çѹø °¡Á®¿Í º¼±î¿ä? #include struct user_regs_struct { long ebx, ecx, edx, esi, edi, ebp, eax; unsigned short ds, __ds, es, __es; unsigned short fs, __fs, gs, __gs; long orig_eax, eip; unsigned short cs, __cs; long eflags, esp; unsigned short ss, __ss; }; int main(int argc, char *argv[]) { struct user_regs_struct regs; int ret, pid; pid = atoi(argv[1]); ret = ptrace(PTRACE_ATTACH, pid, 0, 0); printf("return : %d\n", ret); ptrace(PTRACE_GETREGS, pid, 0, ¢çs); // ½ºÅà ÁÖ¼Ò Ãâ·Â printf("stack = %p\n", regs.esp); ptrace(PTRACE_DETACH, pid, 0, 0); } [root@hackerschool matphone]# ./ptrace 12388 return : 0 stack = 0xbfdf276c [root@hackerschool matphone]# ·¹Áö½ºÅ͸¦ ½Î¾Ç °¡Á®¿Â ÈÄ ±×Áß¿¡ ½ºÅà ÁÖ¼Ò¸¸ Ãâ·ÂÇØ º¸¾Ò½À´Ï´Ù. °°Àº ¹æ½ÄÀ¸·Î ¹ü¿ë ·¹Áö½ºÅ͵é°ú ¼¼±×¸ÕÆ® ·¹Áö½ºÅ͵éÀ» °¡Á®¿Ã ¼ö ÀÖ°ÚÁÒ. À§ÀÇ struct user_regs_struct { ... } ÀÌ ºÎºÐÀº /usr/include/linux/user.h¿¡¼­ °¡Á®¿Â °ÍÀÔ´Ï´Ù. ±×·³ user.h¸¦ include ½ÃÅ°¸é Àú ºÎºÐÀº ºÒÇÊ¿äÇØÁö°ÚÁÒ. #include #include int main(int argc, char *argv[]) { struct user_regs_struct regs; int ret, pid; pid = atoi(argv[1]); ret = ptrace(PTRACE_ATTACH, pid, 0, 0); printf("return : %d\n", ret); ptrace(PTRACE_GETREGS, pid, 0, ¢çs); printf("stack = %p\n", regs.esp); ptrace(PTRACE_DETACH, pid, 0, 0); } ±×·³ ÀÌÁ¦ Àú ½ºÅÿ¡ ÀúÀåµÈ °ªµéÀ» Çѹø °¡Á®¿Í º¾½Ã´Ù ¤¾¤¾ ÀÌ ¶§ »ç¿ëµÇ´Â ¿É¼ÇÀº PTRACE_PEEKDATAÀÔ´Ï´Ù. (PEEKTEXTµµ °°Àº ¿É¼ÇÀÔ´Ï´Ù) µ¥ÀÌÅ͸¦ ½ï~ »Ì¾Æ¿À°Ú´Ü ÀÇÁö°¡ º¸ÀÌ´Â ¿É¼ÇÀÌÁÒ. ±ò²ûÇÏ°Ô 200¹ÙÀÌÆ®¸¸ Àоµµ·Ï ÇÏÁÒ.. include #include int main(int argc, char *argv[]) { struct user_regs_struct regs; int ret, pid, i; pid = atoi(argv[1]); ret = ptrace(PTRACE_ATTACH, pid, 0, 0); printf("return : %d\n", ret); ptrace(PTRACE_GETREGS, pid, 0, ¢çs); printf("stack = %p\n", regs.esp); unsigned int data; for(i=0; i<50; i++) { data = ptrace(PTRACE_PEEKDATA, pid, regs.esp+i*4, 0); printf("%08x\n", data); } ptrace(PTRACE_DETACH, pid, 0, 0); } [root@hackerschool matphone]# ./ptrace 31526 return : 0 stack = 0xbfbe3d4c bfbe3f18 009c7ff4 bfbe3f04 00904be0 00904a2f bfbe3f04 bfbe3f04 00000000 bfbe3e04 bfbe3e84 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 0086b658 00000000 00000100 b7fe26c0 0086b94c 0086b644 00000000 00010000 00000000 0086b940 0000000f 00000000 00000000 00000000 00000000 00000000 00000000 00000000 bfbe3d58 bfbe3e04 bfbe3e84 0089c1a9 00000000 00000000 00000000 00000000 00000000 00000000 [root@hackerschool matphone]# ¿ä ±Â~~ PTRACE_PEEKDATAÀÇ Æ¯Â¡Àº Çѹø¿¡ 4¹ÙÀÌÆ® ´ÜÀ§·Î °ªÀ» °¡Á®¿Â´Ù´Â Á¡ÀÔ´Ï´Ù. ±×·¡¼­ 200¹ÙÀÌÆ®¸¦ °¡Á®¿À±â À§ÇØ for¹®¿¡ 50À» ³Ö¾ú½À´Ï´Ù. (64ºñÆ®¿¡¼± ¾î¶»°Ô ¹Ù²î´ÂÁö ¸ð¸£°Ú³×¿ä.) ÀÌÁ¦ ¹º°¡ writeÇغ¸°í ½ÍÀº Ã浿ÀÌ »ý±é´Ï´Ù.. ¤¾¤¾ ÀÌ ¶§ »ç¿ëµÇ´Â ¿É¼ÇÀº PTRACE_POKEDATAÀÌ°í¿ä, À̹ø¿£ ¹Ý´ë·Î ¹º°¡ Äî~~ Âñ·¯ ³Ö¾îÁÖ´Â ´À³¦ÀÌ ³ªÁÒ À½.. ±Ùµ¥ Áö±Ý ¸¶¶¥È÷ write ÇÒ¸¸ÇÑ°Ô ¾È º¸ÀÌÁÒ?? ±×·¡¼­ ´ë»ó ÇÁ·Î±×·¥ÀÇ ¼Ò½º¸¦ ´ÙÀ½°ú °°ÀÌ ¹Ù²Ù±â·Î Çß½À´Ï´Ù. int main() { char str[20] = "mung mung"; while(1){ printf("%s\n", str); sleep(1); } } ´«Ä¡ ä¼ÌÁÒ? ¤¾¤¾ ¹Ù·Î ½ºÅðªÀ» ¹Ù²ãº¸µµ·Ï ÇÏ°Ú½À´Ï´Ù. "mung mung" ¹®ÀÚ¿­À» ã±â À§ÇØ %02x¸¦ %c·Î ¹Ù²ãÁÖ°í¿ä isprint() ÇÔ¼ö·Î Ãâ·Â °¡´ÉÇÑ °Í¸¸ Ãß·Áº¸°Ú½À´Ï´Ù. #include #include int main(int argc, char *argv[]) { struct user_regs_struct regs; int ret, pid, i, j; pid = atoi(argv[1]); ret = ptrace(PTRACE_ATTACH, pid, 0, 0); printf("return : %d\n", ret); ptrace(PTRACE_GETREGS, pid, 0, ¢çs); printf("stack = %p\n", regs.esp); unsigned int data; unsigned char data2[4]; for(i=0; i<300; i++) { data = ptrace(PTRACE_PEEKDATA, pid, regs.esp+i*4, 0); memcpy(&data2, &data, 4); for(j=0; j<4; j++){ if(isprint(data2[j])) printf("%c ", data2[j]); else printf(". "); } } ptrace(PTRACE_DETACH, pid, 0, 0); } Âü, °¡Á®¿À´Â ¹ÙÀÌÆ®ÀÇ ¼öµµ 300*4=1200À¸·Î ´Ã·È½À´Ï´Ù. [root@hackerschool matphone]# ./ptrace 31526 return : 0 stack = 0xbfbe3d4c . ? . . . . . . . ? . . . K . . / J . . . ? . . . ? . . . . . . . > . . . > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X . . . . . . . . . . . . & . . L . . . D . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . X = . . . > . . . > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > . . . ! . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . > . . X . . . . . . . . . . . . . . P . { . ' . . \ . . > . . . . . . . . . . . [ . . . . . . . ] . . . . . . . . . . . . . . . . . . . . . . . > . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . H ? . . . . . . . . . . . b . . X ? . . I . . . m u n g m u n g . . . . . . . @ . . . ` ? . . . ? . . . . . . . . . . 0 . . . . ? . . . . . . . . . . . ? . . . ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ? . . . # . < . . , . . . . . . . . . . . . . P $ . . . . . . . . . . . . . . . . . . . . . . ! . . . . . . . . . . . . ? . . 0 . . . . . . @ . . . . ? . . . _ . . . . . . > L . . . . . . B L . . \ L . . g L . . w L . . . L . . . L . . . L . . . L . . . L . . . N . . . N . . $ O . . 9 O . . J O . . [ O . . c O . . n O . . { O . . . O . . . O . . . O . . . O . . . . . . . . . . . . . ! . . . . . . . . . . . . . . . . . . . . . . . . . . . d . . . . . . . 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . @ . . . . . . . . . . . . . i 6 8 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [root@hackerschool matphone]# ¾îÇãÇê ÀÏ´Ü ÁÒ~~~ Áұ⿡ mung mungÀÌ º¸ÀÌ´Â °É È®ÀÎÇß°í¿ä ÀÌÁ¦ ÁÖ¼Ò¸¦ Ãâ·ÂÇؾ߰ڳ׿ä ... for(i=0; i<300; i++) { data = ptrace(PTRACE_PEEKDATA, pid, regs.esp+i*4, 0); memcpy(&data2, &data, 4); printf("%08x : ", regs.esp+i*4); for(j=0; j<4; j++){ if(isprint(data2[j])) printf("%c ", data2[j]); else printf(". "); } printf("\n"); } ... [root@hackerschool matphone]# ./ptrace 31526 return : 0 stack = 0xbfbe3d4c bfbe3d4c : . ? . . bfbe3d50 : . . . . bfbe3d54 : . ? . . bfbe3d58 : . K . . bfbe3d5c : / J . . bfbe3d60 : . ? . . bfbe3d64 : . ? . . bfbe3d68 : . . . . bfbe3d6c : . > . . bfbe3d70 : . > . . bfbe3d74 : . . . . bfbe3d78 : . . . . bfbe3d7c : . . . . bfbe3d80 : . . . . bfbe3d84 : . . . . bfbe3d88 : . . . . bfbe3d8c : . . . . bfbe3d90 : . . . . bfbe3d94 : . . . . bfbe3d98 : . . . . bfbe3d9c : . . . . bfbe3da0 : . . . . bfbe3da4 : X . . . bfbe3da8 : . . . . bfbe3dac : . . . . bfbe3db0 : . & . . bfbe3db4 : L . . . bfbe3db8 : D . . . bfbe3dbc : . . . . bfbe3dc0 : . . . . bfbe3dc4 : . . . . bfbe3dc8 : @ . . . bfbe3dcc : . . . . bfbe3dd0 : . . . . bfbe3dd4 : . . . . bfbe3dd8 : . . . . bfbe3ddc : . . . . bfbe3de0 : . . . . bfbe3de4 : . . . . bfbe3de8 : . . . . bfbe3dec : X = . . bfbe3df0 : . > . . bfbe3df4 : . > . . bfbe3df8 : . . . . bfbe3dfc : . . . . bfbe3e00 : . . . . bfbe3e04 : . . . . bfbe3e08 : . . . . bfbe3e0c : . . . . bfbe3e10 : . . . . bfbe3e14 : . > . . bfbe3e18 : . ! . . bfbe3e1c : . . . . bfbe3e20 : . . . . bfbe3e24 : . . . . bfbe3e28 : . . . . bfbe3e2c : . . . . bfbe3e30 : . . . . bfbe3e34 : . . . . bfbe3e38 : . > . . bfbe3e3c : X . . . bfbe3e40 : . . . . bfbe3e44 : . . . . bfbe3e48 : . . . P bfbe3e4c : . { . ' bfbe3e50 : . . \ . bfbe3e54 : . > . . bfbe3e58 : . . . . bfbe3e5c : . . . . bfbe3e60 : . [ . . bfbe3e64 : . . . . bfbe3e68 : . ] . . bfbe3e6c : . . . . bfbe3e70 : . . . . bfbe3e74 : . . . . bfbe3e78 : . . . . bfbe3e7c : . . . . bfbe3e80 : . > . . bfbe3e84 : . . . . bfbe3e88 : . . . . bfbe3e8c : . . . . bfbe3e90 : . . . . bfbe3e94 : . . . . bfbe3e98 : . . . . bfbe3e9c : . . . . bfbe3ea0 : . . . . bfbe3ea4 : . . . . bfbe3ea8 : . . . . bfbe3eac : . . . . bfbe3eb0 : . . . . bfbe3eb4 : . . . . bfbe3eb8 : . . . . bfbe3ebc : . . . . bfbe3ec0 : . . . . bfbe3ec4 : . . . . bfbe3ec8 : . . . . bfbe3ecc : . . . . bfbe3ed0 : . . . . bfbe3ed4 : . . . . bfbe3ed8 : . . . . bfbe3edc : . . . . bfbe3ee0 : . . . . bfbe3ee4 : . . . . bfbe3ee8 : . . . . bfbe3eec : . . . . bfbe3ef0 : . . . . bfbe3ef4 : . . . . bfbe3ef8 : . . . . bfbe3efc : . . . . bfbe3f00 : . . . . bfbe3f04 : . . . . bfbe3f08 : _ } . . bfbe3f0c : . . . . bfbe3f10 : . . . . bfbe3f14 : . . . . bfbe3f18 : H ? . . bfbe3f1c : . . . . bfbe3f20 : . . . . bfbe3f24 : . b . . bfbe3f28 : X ? . . bfbe3f2c : I . . . bfbe3f30 : m u n g bfbe3f34 : m u n bfbe3f38 : g . . . bfbe3f3c : . . . . bfbe3f40 : @ . . . bfbe3f44 : ` ? . . bfbe3f48 : . ? . . bfbe3f4c : . . . . bfbe3f50 : . . . . bfbe3f54 : 0 . . . bfbe3f58 : . ? . . bfbe3f5c : . . . . bfbe3f60 : . . . . bfbe3f64 : . ? . . bfbe3f68 : . ? . . bfbe3f6c : . . . . bfbe3f70 : . . . . bfbe3f74 : . . . . bfbe3f78 : . . . . bfbe3f7c : . . . . bfbe3f80 : . . . . bfbe3f84 : . . . . bfbe3f88 : . . . . bfbe3f8c : . ? . . bfbe3f90 : . # . < bfbe3f94 : . . , . bfbe3f98 : . . . . bfbe3f9c : . . . . bfbe3fa0 : . . . . bfbe3fa4 : P $ . . bfbe3fa8 : . . . . bfbe3fac : . . . . bfbe3fb0 : . . . . bfbe3fb4 : . . . . bfbe3fb8 : . . . . bfbe3fbc : ! . . . bfbe3fc0 : . . . . bfbe3fc4 : . . . . bfbe3fc8 : . ? . . bfbe3fcc : 0 . . . bfbe3fd0 : . . . bfbe3fd4 : @ . . . bfbe3fd8 : . ? . . bfbe3fdc : . _ . . bfbe3fe0 : . . . . bfbe3fe4 : > L . . bfbe3fe8 : . . . . bfbe3fec : B L . . bfbe3ff0 : \ L . . bfbe3ff4 : g L . . bfbe3ff8 : w L . . bfbe3ffc : . L . . bfbe4000 : . L . . bfbe4004 : . L . . bfbe4008 : . L . . bfbe400c : . L . . bfbe4010 : . N . . bfbe4014 : . N . . bfbe4018 : $ O . . bfbe401c : 9 O . . bfbe4020 : J O . . bfbe4024 : [ O . . bfbe4028 : c O . . bfbe402c : n O . . bfbe4030 : { O . . bfbe4034 : . O . . bfbe4038 : . O . . bfbe403c : . O . . bfbe4040 : . O . . bfbe4044 : . . . . bfbe4048 : . . . bfbe404c : . . . . bfbe4050 : ! . . . bfbe4054 : . . . . bfbe4058 : . . . . bfbe405c : . . . . bfbe4060 : . . . . bfbe4064 : . . . . bfbe4068 : . . . . bfbe406c : d . . . bfbe4070 : . . . . bfbe4074 : 4 . . . bfbe4078 : . . . . bfbe407c : . . . bfbe4080 : . . . . bfbe4084 : . . . . bfbe4088 : . . . . bfbe408c : . . . . bfbe4090 : . . . . bfbe4094 : . . . . bfbe4098 : . . . . bfbe409c : . . . . bfbe40a0 : . . . . bfbe40a4 : . . . . bfbe40a8 : . . . . bfbe40ac : . . . . bfbe40b0 : . . . . bfbe40b4 : . . . . bfbe40b8 : . . . . bfbe40bc : . . . . bfbe40c0 : . . . . bfbe40c4 : . . . . bfbe40c8 : . . . . bfbe40cc : . @ . . bfbe40d0 : . . . . bfbe40d4 : . . . . bfbe40d8 : . . . i bfbe40dc : 6 8 6 . bfbe40e0 : . . . . bfbe40e4 : . . . . bfbe40e8 : . . . . bfbe40ec : . . . . bfbe40f0 : . . . . bfbe40f4 : . . . . bfbe40f8 : . . . . bfbe40fc : . . . . bfbe4100 : . . . . bfbe4104 : . . . . bfbe4108 : . . . . bfbe410c : . . . . bfbe4110 : . . . . bfbe4114 : . . . . bfbe4118 : . . . . bfbe411c : . . . . bfbe4120 : . . . . bfbe4124 : . . . . bfbe4128 : . . . . bfbe412c : . . . . bfbe4130 : . . . . bfbe4134 : . . . . bfbe4138 : . . . . bfbe413c : . . . . bfbe4140 : . . . . bfbe4144 : . . . . bfbe4148 : . . . . bfbe414c : . . . . bfbe4150 : . . . . bfbe4154 : . . . . bfbe4158 : . . . . bfbe415c : . . . . bfbe4160 : . . . . bfbe4164 : . . . . bfbe4168 : . . . . bfbe416c : . . . . bfbe4170 : . . . . bfbe4174 : . . . . bfbe4178 : . . . . bfbe417c : . . . . bfbe4180 : . . . . bfbe4184 : . . . . bfbe4188 : . . . . bfbe418c : . . . . bfbe4190 : . . . . bfbe4194 : . . . . bfbe4198 : . . . . bfbe419c : . . . . bfbe41a0 : . . . . bfbe41a4 : . . . . bfbe41a8 : . . . . bfbe41ac : . . . . bfbe41b0 : . . . . bfbe41b4 : . . . . bfbe41b8 : . . . . bfbe41bc : . . . . bfbe41c0 : . . . . bfbe41c4 : . . . . bfbe41c8 : . . . . bfbe41cc : . . . . bfbe41d0 : . . . . bfbe41d4 : . . . . bfbe41d8 : . . . . bfbe41dc : . . . . bfbe41e0 : . . . . bfbe41e4 : . . . . bfbe41e8 : . . . . bfbe41ec : . . . . bfbe41f0 : . . . . bfbe41f4 : . . . . bfbe41f8 : . . . . [root@hackerschool matphone]# bfbe3f30¿¡ À§Ä¡ÇÏ°í Àֳ׿ä! ÀÌÁ¦ ÀÌ °ªÀ» ¹Ù²ß½Ã´Ù~ ptrace(PTRACE_POKEDATA, pid, 0xbfe60ad0, 0x41414141); Âü °£´ÜÇÏÁÒ Àüü ¼Ò½º´Â.. #include #include int main(int argc, char *argv[]) { struct user_regs_struct regs; int ret, pid, i, j; pid = atoi(argv[1]); ret = ptrace(PTRACE_ATTACH, pid, 0, 0); printf("return : %d\n", ret); ptrace(PTRACE_GETREGS, pid, 0, ¢çs); printf("stack = %p\n", regs.esp); unsigned int data; unsigned char data2[4]; for(i=0; i<300; i++) { data = ptrace(PTRACE_PEEKDATA, pid, regs.esp+i*4, 0); memcpy(&data2, &data, 4); printf("%08x : ", regs.esp+i*4); for(j=0; j<4; j++){ if(isprint(data2[j])) printf("%c ", data2[j]); else printf(". "); } printf("\n"); } ptrace(PTRACE_POKEDATA, pid, 0xbfe60ad0, 0x41414141); ptrace(PTRACE_DETACH, pid, 0, 0); } ÀÌÁ¦ ÀÌ Äڵ带 ½ÇÇàÇÑ ÈÄ Å͹̳Î1À» º¸¸é.. ... mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung mung AAAA mung AAAA mung AAAA mung mungÀÌ AAAA·Î ¹Ù²î¾ú³×¿ä!! ÀÌ·¸°ÔÇؼ­ ptraceÀÇ ±âº» ±â´ÉÀ» ¾Ë¾Æº¸¾Ò½À´Ï´Ù. ptrace¸¦ Àß È°¿ëÇϸé gdb¿Í °°Àº µð¹ö°Å¸¦ Á÷Á¢ ¸¸µé°Å³ª, ȤÀº shellcode¸¦ ´Ù¸¥ ÇÁ·Î¼¼½º¸¦ injection ÇÒ ¼öµµ ÀÖ°ÚÁÒ~ °ú°Å¿¡ ÀÌ ptrace¸¦ ÀÌ¿ëÇÑ ·ÎÄñÇÇÑȹµæ Ãë¾àÁ¡µµ À¯ÇàÇß¾ú°í¿ä ÀÌ°Ç ´ÙÀ½¿¡ ±âȸ°¡ µÇ¸é..~~ ´Ù·ïº¸µµ·Ï ÇÏÁÒ ÀÌ»óÀ¸·Î ¸¶Ä¡°Ú½À´Ï´Ù.. ¤¾¤¾