문제가 그다지 어렵지 않은게 함정
.. Hamjeong..
..
....
.....
일단 실행해 봅니당
뽑(수많은한문)솃
나도 쒯.
일단 N3rdist4n의 어셈블리어 스페셜튀김인 나는 습관적으로 ollydbg로 열어보았다.
CPU Disasm
Address Hex dump Command Comments
00401000 /$ 53 PUSH EBX
00401001 |. 56 PUSH ESI
00401002 |. 57 PUSH EDI
00401003 |. 33DB XOR EBX,EBX
00401005 |. 53 PUSH EBX ; /MaximumSize => 0
00401006 |. 53 PUSH EBX ; |InitialSize => 0
00401007 |. 68 00000400 PUSH 40000 ; |Flags = 0, Tag = 1
0040100C |. FF15 10604000 CALL DWORD PTR DS:[<&KERNEL32.HeapCreate ; \KERNEL32.HeapCreate
00401012 |. 6A 25 PUSH 25 ; /Size = 37.
00401014 |. 8BF8 MOV EDI,EAX ; |
00401016 |. 6A 08 PUSH 8 ; |Flags = HEAP_ZERO_MEMORY
00401018 |. 57 PUSH EDI ; |Heap
00401019 |. FF15 04604000 CALL DWORD PTR DS:[<&KERNEL32.HeapAlloc> ; \NTDLL.RtlAllocateHeap
0040101F |. 6A 24 PUSH 24 ; /Arg4 = 24
00401021 |. 68 109B4000 PUSH OFFSET 00409B10 ; |Arg3 = csaw2013reversing2.409B10
00401026 |. 8BF0 MOV ESI,EAX ; |
00401028 |. 6A 24 PUSH 24 ; |Arg2 = 24
0040102A |. 56 PUSH ESI ; |Arg1
0040102B |. E8 76000000 CALL 004010A6 ; \csaw2013reversing2.004010A6
00401030 |. 83C4 10 ADD ESP,10
00401033 |. 64:A1 1800000 MOV EAX,DWORD PTR FS:[18]
00401039 |. 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30]
0040103C |. 0FB640 02 MOVZX EAX,BYTE PTR DS:[EAX+2]
00401040 |. 3BC3 CMP EAX,EBX
00401042 75 2A JNE SHORT 0040106E
00401044 |. 41 INC ECX
00401045 |. 41 INC ECX
00401046 |. 41 INC ECX
00401047 |. 41 INC ECX
00401048 |. CC INT3
00401049 |. 8D46 01 LEA EAX,[ESI+1]
0040104C |. 8D48 01 LEA ECX,[EAX+1]
0040104F |> 8A10 /MOV DL,BYTE PTR DS:[EAX]
00401051 |. 40 |INC EAX
00401052 |. 3AD3 |CMP DL,BL
00401054 |.^ 75 F9 \JNE SHORT 0040104F
00401056 |. 2BC1 SUB EAX,ECX
00401058 |. C1E8 02 SHR EAX,2
0040105B |. 33C9 XOR ECX,ECX
0040105D |. 40 INC EAX
0040105E |. 3BC3 CMP EAX,EBX
00401060 |. 76 0C JBE SHORT 0040106E
00401062 |> 81348E BBAA99 /XOR DWORD PTR DS:[ECX*4+ESI],8899AABB
00401069 |. 41 |INC ECX
0040106A |. 3BC8 |CMP ECX,EAX
0040106C |.^ 72 F4 \JB SHORT 00401062
0040106E |> 6A 02 PUSH 2 ; /Type = MB_ABORTRETRYIGNORE|MB_DEFBUTTON1|MB_APPLMODAL
00401070 |. 68 20784000 PUSH OFFSET 00407820 ; |Caption = "Flag"
00401075 |. 56 PUSH ESI ; |Text
00401076 |. 53 PUSH EBX ; |hOwner
00401077 |. FF15 E4604000 CALL DWORD PTR DS:[<&USER32.MessageBoxA> ; \USER32.MessageBoxA
0040107D |. 56 PUSH ESI ; /pMem
0040107E |. 53 PUSH EBX ; |Flags
0040107F |. 57 PUSH EDI ; |Heap
00401080 |. FF15 08604000 CALL DWORD PTR DS:[<&KERNEL32.HeapFree>] ; \NTDLL.RtlFreeHeap
00401086 |. 57 PUSH EDI ; /hHeap
00401087 |. FF15 0C604000 CALL DWORD PTR DS:[<&KERNEL32.HeapDestro ; \KERNEL32.HeapDestroy
0040108D |. 53 PUSH EBX ; /ExitCode
0040108E |. FF15 00604000 CALL DWORD PTR DS:[<&KERNEL32.ExitProces ; \KERNEL32.ExitProcess
...
뭐지
ㅁㄴㅇㄹ 일단 그냥 가보자 했는데..
00401042에서 바로 0040106E로 연산따윈 안하고 그냥 감
그래서 전 NOP을 선택
ㅂㅂ를 선언해준 후
\\계속 이어보장\\
계속 계산하는데 얘도 이상해서 걍 뒤에 BP걸고 F9로 쭉 이어감
이 부분이 솔직히 제일 중요하다 (중요도 5)
해석 해 보면 ESI에 있는거와 8899AABB를 XOR연산함
ECX 하나 ++
ECX와 EAX 비교함
JB는 Jump if Below인가 해서 뒤에가 더 크면 이동함
이때의 레지스터 현황을 보면
EAX가 ECX보다 크니깐 00401062로 이동한다
총 10번의 연산을 한다.
근데 이게 중요한게 아니라 여기서 ESI는 Hex Dump의 address를 의미하므로
거기로 가보면
올ㅋ
계속 연산해보면
ㅎㅇ
flag{number2isalittlebitharder:p}
'Reverse Engineering' 카테고리의 다른 글
크으립토락커 한글판 간단분석 (0) | 2015.05.04 |
---|---|
SysFader는 무엇일까? (0) | 2014.07.17 |
bypassing IsDebuggerPresent (0) | 2013.10.06 |
ollydbg 2.0.1 (0) | 2013.09.30 |