æ ªå¼ä¼ç¤¾Ninastars
åç· å½¹:é½è¤åè¼
ååã«å¼ãç¶ãReversingç·¨ã§ã¯CTFãèå¼±æ§è¨ºæã«ããã¦ã®ãªãã¼ã·ã³ã°æè¡ã®åºæ¬ããæããã¾ãã
ä»åã®è¨äºã§ã¯ã©ããã£ãæèã§ã¢ã»ã³ããªãèªãã§ããã®ãã¨ãããã¨ãè©³ç´°ã«æ¸ãã¦ããã¾ãã
ã¾ãGhidraã®ãã¥ã¼ããªã¢ã«ã¨ãã¦ãå©ç¨ã§ããããã«ãã¦ãã¾ãã
ååè¨äº
åèåé¡é
ä»åã¯eagle0wlæ°ã®crackmeã·ãªã¼ãºã®crkme04ã¨ããåé¡ã使ç¨ãã¾ãã
ãªã³ã¯å
ããeagle0wl's crackme VOL.01 ver1.02ãã¯ãªãã¯ãã¦ãã¦ã³ãã¼ããã¦ãã ããã
åèãµã¤ã
ã¢ã»ã³ããªè¨èªã®åºæ¬ç¥èãæ²è¼ããã¦ããã
programmer.main.jp
使ç¨ãã¼ã«
Ghidra
NSA(ç±³å½å½å®¶å®å
¨ä¿éå±)ãå
¬éãã髿©è½ãªãã¤ããªè§£æãã¼ã«ã
ninjastars.hatenablog.com
crkme04
èµ·åããã¨ä»¥ä¸ã®ç»åã®ãããªã¦ã¤ã³ãã¦ãç«ã¡ä¸ããã¾ãã
ããããªãããå
é¨ã§ã¯æ£è§£ã¨ä¸æ£è§£ãå¤å®ããããã®ããã°ã©ã ãåãã¦ããã ããã¨äºæ¸¬ã§ãã¾ãã
ããã§éçè§£æãè¡ããçãã¨ãªãæååãåå¾ãããã¨æãã¾ãã
ã¾ãã¯å¤§ã¾ãã§ããã®ã§éçãç«ã¦ã¦ããã¾ãããã
ã¹ããã1ï¼éçè§£æãã¼ã«ãGhidraãã使ç¨ããcrkme04ã®éã¢ã»ã³ãã«ãè¡ãã
ã¹ããã2ï¼æ£è§£ã¨ä¸æ£è§£ãå¤å®ããéã«å¿
ãå¿
è¦ãªé¢æ°ãæã
ã®ç®ã«è¦ããæ
å ±ã®ä¸ãããã¼ã¯ã¼ãã¨ãªãæååãäºæ³ããªããæ¤ç´¢ããã
ã¹ããã3ï¼ã¹ããã2ã§æ¤ç´¢ããçµæã®åå¾ããæ¯è¼ç¨ãªãã³ã¼ããæ¢ãã
ã¹ããã4ï¼ã©ã®ããã«æ¡ä»¶åå²ãã¦ããã®ããææ¡ããã
ã¹ããã5ï¼ãã以éã¯ããã°ã©ã ã«ãã£ã¦æ§ã
ãªéçãå¤ããã®ã§èããªããã¨ã«ãã.....
ã§ã¯å®éã«è§£æããã¦ããããã¨æãã¾ãï¼
ã¹ããã1
Ghidraãç¨ãã¦crkme04.exeãè§£æãã¦ã¿ã¾ãããã
ååã¨åæ§ã«crkme04.exeã®ãã¡ã¤ã«ãCodeBrowserç»é¢ã«ãã©ãã°ï¼ãããããã¦éã¢ã»ã³ãã«ãã¦ãããã¾ãã
以ä¸ã®ãããªç»é¢ã«ãªãã¨æãã¾ãã
ã¹ããã2
ä»åã¯æ£è§£ã¨ä¸æ£è§£ãå¤å®ããéã«å¿
ãå¿
è¦ãªé¢æ°ãäºæ³ãã¦æ¤ç´¢ãã¦ããããã¨æãã¾ãã
ã¾ãã¯CodeBrowserä¸é¨ã®Window->Defined Stringsãã¯ãªãã¯ãã¦æååã¨ãã¦å¯èªãªãã®ãå
¨ã¦åæãã¦ãããã¾ãã
(å½ç¶ãªããããã«ã¯çãã¨ãªãæååã¯åå¨ããªãã§ããã...)
ããã§æ°ã«ãªãã®ã¯"GetWindowTextA"ã§ãã
ããã¯Cç³»è¨èªã«ãããããã¹ãããã¯ã¹ã«å
¥åãããæååãåå¾ãã颿°ã§ãã
ã©ããã®ã¿ã¤ãã³ã°ã§å¿
ãããã¹ãããã¯ã¹ã«å
¥åãããæååã¨æ¯è¼ããã¦ããã®ã§ãããæãããã«ãã¦ããããã¨æãã¾ãã
次ã«CodeBrowserä¸é¨ã®Search->ProgramTextã§æå®ããæååãããã°ã©ã ä¸ã®ããã¹ãããæ¤ç´¢ãã¦ããã¾ãã
ãã®æ¤ç´¢æ©è½ã§ã¯Search TypeãFieldsãMemory Block Typesçãæå®ã§ãã¾ãã
ä»åã¯ä»¥ä¸ã®ç»åã®ããã«æ¤ç´¢ãã¦ããã¾ãã
ä»åã¯ä¸åãããªãã®ã§ãããããã«ã¯ãªãã¯ããã¨å®éã®ã¢ãã¬ã¹ã¾ã§é£ãã§ããã¾ãã
Listingã¦ã¤ã³ãã¦ã«æ»ãã¨GetWindowTextAã®æåãããã¾ãã
æåãå³ã¯ãªãã¯ãã¦ä¸çªä¸ã®References->Show References to GetWindowTextAã鏿ããã¨Referencesã¦ã¤ã³ãã¦ãç¾ãã¾ãã
Referencesã¦ã¤ã³ãã¦ã«ã¦GetWindowTextAãããã«ã¯ãªãã¯ãããã¨Listingã¦ã¤ã³ãã¦ãGetWindowTextAãcallãã¦ããã¢ãã¬ã¹ã«é£ã³ã¾ãã
ã¹ããã3
ãã®ã¾ã¾ã ã¨å½ä»¤ç¾¤ã®å
¨ä½å³ãè¦ã¥ããã®ã§Ghidraã®æ©è½ã§ãã"Display Function Graph"ã使ãããã¨æãã¾ãã
CodeBrowserã®ä¸é¨ãã¼ã«ã¢ã¤ã³ã³ã®ä¸ãã"Display Function Graph"ãããã«ã¯ãªãã¯ããã¨ä»¥ä¸ã®ç»åã®ããã«ããã¼ãã£ã¼ãã¨ãã¦å³å¼åãã¦ããã¾ãã
æ¡å¤§ããç»åãè¼ãã¦ããã¾ãã
CMPã¯æ¯è¼ç¨ã®ãªãã³ã¼ãã§JNZã¯æ¡ä»¶åå²ç¨ã®ãªãã³ã¼ãã§ãã
ãã®ã¹ãããã§ã®ç®çã¯éæããã®ã§æ¬¡ã®ã¹ãããã«ããã¾ãã
ã¹ããã4
ã©ã®ããã«æ¡ä»¶åå²ãã¦ããã®ãã¯ããã¼ãã£ã¼ãããææ¡ã§ãã¾ãã
ããã§ã¯ãã詳細ãªé¨åã解説ãã¦ãããã¨æãã¾ãã
æ¯è¼ã®å¯¾è±¡ã¨æ¡ä»¶ãè¦ã¦ããã¾ãããã
"CMP EAX,0x2c2e60f9"ã¯ã0x2c2e60f9ã¨EAXãæ¯è¼ãããã¨ããæå³ã§ãã
"JNZ LAB_0040121f"ã¯ã(æ¯è¼çµæã)0ã§ã¯ãªãã¨ãã¢ãã¬ã¹004121fã¸ç§»è¡ãããã¨ããæå³ã§ãã
ã¤ã¾ããã®ï¼ã¤ã®å½ä»¤ã«ãã£ã¦æ¡ä»¶åå²ãã¦ããã®ã§ã¯ãªããã¨äºæ³ã§ãã¾ãã
ããã¼ãã£ã¼ãå
ã®ã¢ãã¬ã¹004121fãè¦ã¦ããã¾ãããã
ããã§ã¯"JMP LAB_0040109e"ãããªãã®ã§ãã åã«ä»ã®ã¢ãã¬ã¹ã¸ç§»è¡ãã¦ããã ãã§ãããã¾ãæå³ãããã¾ããã
ã§ã¯"JNZ LAB_0040121f"ã¸æ»ã£ã¦ã¿ã¾ãããã
æ¡ä»¶åå²ã«ã¯é常2ã¤ã®è¡ãå
ãããã¾ãããã1ã¤ã®è¡ãå
ãè¦ã¦ããã¾ãããã
PUSH 0x0
PUSH DAT_004030ed
PUSH DAT_004030f6
PUSH dword ptr[EBP+param_1]
CALL MessageBoxA
ã¨ããå½ä»¤ç¾¤ãããã¾ããããããMessageBoxAãå¼ã³åºããã¦ããã®ã§ãããæ£è§£ã®æåã表示ãã¦ããé¨åãªã®ã§ãããã
(å®éããã§æ£è§£ã®æåã表示ãã¦ãã¾ãã)
æ£è§£ã®å¦çã¸ã¨ç§»è¡ãã¦ããé¨åã夿ãã¾ããã
ããã§åãã£ããã¨ã¯ã"CMP EAX,0x2c2e60f9"ã®æ¯è¼çµæã0ã¨ãªãã°æ£è§£ã®å¦çã«ç§»è¡ããã¨ãããã¨ã§ãã
次ã®ã¹ãããã§ã¯EAXã®å®æ
ã調ã¹ã¦ããããã¨æãã¾ãã
ã¹ããã5
"CALL GetWindowTextA"ãã"JNZ LAB_0040121f"ã®éã«EAXã¯ä¸ç®æããããã¾ããã
ããã§æ³¨ç®ããã®ã¯"CALL FUN_00401224"ã§ãã
ä¸è¬ã«é¢æ°ã®å¼æ°ã¨æ»ãå¤ã¯Stackã¨EAXã§ããåãããã¦ãã¾ãã
CALLã¯é¢æ°ãå¼ã³åºãã¦ãããªãã³ã¼ãã§ããããã®ãªãã©ã³ããå¼ã³åºãã¦ãã颿°ã§ãã
Function Graphã¦ã¤ã³ãã¦ã®"FUN_00401224"ãããã«ã¯ãªãã¯ããã¨é¢æ°ã®ããã¼ãã£ã¼ãã«ç§»è¡ãã¾ãã
ããã¼ãã£ã¼ãå
ã§RETãæ¢ãã¾ããããRETã¯é¢æ°ããæ¬æµã®ããã°ã©ã ã«æ»ãããã®ãªãã³ã¼ãã§ãã
MOV EAX,EBX
LEA...
RET 0x4
ã¨ããå½ä»¤ç¾¤ãè¦ã¦ã¿ãã¨"MOV EAX,EBX"ãããã¾ãã
"MOV EAX,EBX"ã¯ãEBXã®å¤ãEAXã«æ ¼ç´ãããã¨ããæå³ã§ãã
ããããã¯EBXã®å¤ã«æ³¨ç®ãã¦èªãã§ããã¾ãããã
ããã¼ãã£ã¼ãå
ã«EBXã¯7ç®æããã¾ããã"XOR EBX,EBX"ã¯ãEBXã®å¤ã0ã«ãããã ãã®å½ä»¤ã§ãã
ä»åEBXã®å¤ã"0x2c2e60f9"ã«ãããã®ã§"XOR EBX,EBX"ãEBXã®å¤ãå¼ã£ã¦ããæå¾ã®å½ä»¤ã¨ããªãããã«èãã¾ãã
00401249 XOR EBX,EBXãã赤ãç¢å°ãéã£ã¦RETãå«ãå½ä»¤ç¾¤ã«ç§»è¡ãã¦ããã®ã§ããããéããªãããã«ãã¾ãã
2ã¤ã®ç¢å°ã§ãã®ã«ã¼ããéãã®ã§2ã¤ã®å½ä»¤ç¾¤ãè¦ã¾ãã
ã©ã¡ããEAXã®å¤ãæ¯è¼ãã¦æ¡ä»¶åå²ãã¦ãã¾ãã
çµæã¨ãã¦EAXã®å¤ã0x30以ä¸0x39以ä¸ã§ããã°"XOR EBX,EBX"ã®å½ä»¤ãéããªããã¨ãåããã¾ãã
ASCIIã³ã¼ã表ã¨ç
§ããåããã¦ã¿ãã¨0x30以ä¸0x39以ä¸ã¯0ãã9ã¾ã§ã®æ°åã®æååã«ãªã£ã¦ãã¾ãã
ããã§ããã£ãæ
å ±ã¯çãã®æååã¯å
¨ã¦æ°åã§æ§æããã¦ããã¨ãããã¨ã§ãã
ããªãçãã«è¿ã¥ãã¦æ¥ã¾ããã
æ¬¡ã«æ®ã£ãEBXã®åè£ãããããªãæ
å ±ãæ´ãã§ããã¾ãããã
æ®ã£ãEBXã¯"MOV EAX,EBX"ãå«ã3ç®æã§ãã
0040123cããå§ã¾ãå½ä»¤ç¾¤ã«çç®ãã¦èªãã§ã¿ã¾ãã
SUB EAX,0x30
XCHG EAX,EBX
IMUL EAX,EAX,0xa
ADD EBX,EAX
XOR EAX,EAX
JMP LAB_0040122c
ãã®å½ä»¤ç¾¤ã®å¦çãç´è§£ãã¨
EBX=EBX+(EAX-0x30)Ã(å¦çã®ã«ã¼ãæ°)Ã0xa
ã¨ããæ°å¼ã§è¡¨ãã¾ãã
æ¥æ¬èªã§è¡¨ç¾ããã¨ãå
¥åããæ°åã®åãå³å¤ã«ç´ãã¦EBXã«æ ¼ç´ãããã¨ããæå³ã«ãªãã¾ãã
ããã§çããçºè¦ããããã®æ
å ±ãåºæãã¾ããã
ã»çãã®æååã¯å
¨ã¦æ°åã§æ§æããã¦ããã
ã»å³å¤ã¨ãã¦"0x2c2e60f9"ã¨çãããªãã°ããã
Pythonã使ã£ã¦"0x2c2e60f9"ã®å¤ãåºãã¦ã¿ã¾ãããã
Ghidraã«ã¯Pythonã®ã¤ã³ã¿ã©ã¯ãã£ãã¢ã¼ãã使ç¨ã§ããæ©è½ãããã¾ãã
CodeBrowserä¸é¨ã®ãã¼ã«ãã¼ããWindow->Pythonã§èµ·åãã¾ãã
å®éã«crkme04.exeãèµ·åãã¦æã¡è¾¼ãã§ã¿ãã¨...
注æäºé
æ¬ã¬ãã¼ãã«è¨è¼ããã¦ããå 容ã許å¯ããã¦ããªãã½ããã¦ã§ã¢ã§è¡ãã¨ãå ´åã«ãã£ã¦ã¯ç¯ç½ªè¡çºã¨ãªãå¯è½æ§ãããã¾ãããã®ãããè¨äºã®å 容ã試ãéã«ã¯è¨±å¯ãããã½ããã¦ã§ã¢ã«å¯¾ãã¦ã®ã¿å®æ½ããããã«ãã¦ãã ããã
æ¬ã¬ãã¼ãã«ã¤ãã¦
ãåãåã
E-mail:[email protected]
æ ªå¼ä¼ç¤¾Ninjastars
åç· å½¹:é½è¤åè¼