Advance 8
Korean :
Key 값이 5D88-53B4-52A87D27-1D0D-5B09 일때 Name은 무엇인가
힌트 : Name은 두자리인데.. 알파벳일수도 있고 숫자일수도 있고..
정답인증은 Name의 MD5 해쉬값(대문자)
먼저 "Please Enter More Chars..." 문자열을 찾아서 해당 주소 근처의 Key를 비교하는 루틴을 찾았습니다.
먼저 아래 루틴에서 Name의 길이를 검사하고 (3글자 이상 , 30글자 이하)
Address Hex dump Command Comments
0045BB07 |. 8B83 68030000 MOV EAX,DWORD PTR DS:[EBX+368] ; <= CHECK LENGTH >3
0045BB0D |. E8 62E5FDFF CALL 0043A074
0045BB12 |. 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0045BB15 |. 8945 F8 MOV DWORD PTR SS:[EBP-8],EAX
0045BB18 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8]
0045BB1B |. 85C0 TEST EAX,EAX
0045BB1D |. 74 05 JZ SHORT 0045BB24
0045BB1F |. 83E8 04 SUB EAX,4
0045BB22 |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0045BB24 |> 83F8 03 CMP EAX,3
0045BB27 |. 7D 15 JGE SHORT 0045BB3E
0045BB29 |. BA 18BC4500 MOV EDX,0045BC18 ; ASCII "Please Enter More Chars..."
0045BB2E |. 8B83 74030000 MOV EAX,DWORD PTR DS:[EBX+374]
0045BB34 |. E8 6BE5FDFF CALL 0043A0A4
0045BB39 |. E9 91000000 JMP 0045BBCF
그리고 좀 더 내려가다 보면 아래 Name 값을 이용해서 Key를 생성하는 함수(빨간색)를 찾을 수 있습니다.
해당 키를 0045bba9 주소(파란색)에서 비교해 올바른 경우 실패 루틴으로 점프하지 않고 그대로 성공 루틴으로 이어집니다.
CPU Disasm
Address Hex dump Command Comments
0045BB9B |. E8 B0FCFFFF CALL 0045B850 ; <= CREATE KEY
0045BBA0 |. 8B55 EC MOV EDX,DWORD PTR SS:[EBP-14]
0045BBA3 |. 58 POP EAX
0045BBA4 |. E8 9390FAFF CALL 00404C3C ; [08.00404C3C
0045BBA9 |. 75 1A JNE SHORT 0045BBC5
0045BBAB |. 6A 40 PUSH 40 ; /Arg1 = 40
0045BBAD |. B9 64BC4500 MOV ECX,0045BC64 ; |ASCII "Good Boy!!!"
0045BBB2 |. BA 70BC4500 MOV EDX,0045BC70 ; |ASCII "Well done!"
0045BBB7 |. A1 C0E94500 MOV EAX,DWORD PTR DS:[45E9C0] ; |
0045BBBC |. 8B00 MOV EAX,DWORD PTR DS:[EAX] ; |
0045BBBE |. E8 B5D0FFFF CALL 00458C78 ; \08.00458C78