본문 바로가기

Reverse Engineering

CSAW CTF 2013 Reversing 200 Write-up

반응형

문제가 그다지 어렵지 않은게 함정

.. 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