Table des matières

csaw2012reversing.exe

Overview

Dans cette épreuve, on nous fournit un exécutable Windows (qui se révèle être un fichier natif).

First step

Le challenge est fourni avec un fichier de symbole ce qui nous permet de connaitre des informations clefs (comme le noms des fonctions).

main.asm
00391070 >/$ 55             PUSH EBP
00391071  |. 8BEC           MOV EBP,ESP
00391073  |. 83EC 58        SUB ESP,58
00391076  |. A1 38303900    MOV EAX,DWORD PTR DS:[__security_cookie]
0039107B  |. 33C5           XOR EAX,EBP
0039107D  |. 8945 FC        MOV DWORD PTR SS:[EBP-4],EAX
00391080  |. C645 E8 88     MOV BYTE PTR SS:[EBP-18],88
00391084  |. C645 E9 9A     MOV BYTE PTR SS:[EBP-17],9A
00391088  |. C645 EA 93     MOV BYTE PTR SS:[EBP-16],93
0039108C  |. C645 EB 9C     MOV BYTE PTR SS:[EBP-15],9C
00391090  |. C645 EC 90     MOV BYTE PTR SS:[EBP-14],90
00391094  |. C645 ED 92     MOV BYTE PTR SS:[EBP-13],92
00391098  |. C645 EE 9A     MOV BYTE PTR SS:[EBP-12],9A
0039109C  |. C645 EF A0     MOV BYTE PTR SS:[EBP-11],0A0
003910A0  |. C645 F0 8B     MOV BYTE PTR SS:[EBP-10],8B
003910A4  |. C645 F1 90     MOV BYTE PTR SS:[EBP-F],90
003910A8  |. C645 F2 A0     MOV BYTE PTR SS:[EBP-E],0A0
003910AC  |. C645 F3 9C     MOV BYTE PTR SS:[EBP-D],9C
003910B0  |. C645 F4 8C     MOV BYTE PTR SS:[EBP-C],8C
003910B4  |. C645 F5 9E     MOV BYTE PTR SS:[EBP-B],9E
003910B8  |. C645 F6 88     MOV BYTE PTR SS:[EBP-A],88
003910BC  |. C645 F7 DE     MOV BYTE PTR SS:[EBP-9],0DE
003910C0  |. C645 F8 00     MOV BYTE PTR SS:[EBP-8],0
003910C4  |. 8D45 E8        LEA EAX,DWORD PTR SS:[EBP-18]
003910C7  |. 50             PUSH EAX                                 ; /Arg1
003910C8  |. E8 33FFFFFF    CALL csaw2012.encrypt                    ; \encrypt
003910CD  |. 83C4 04        ADD ESP,4
003910D0  |. 68 00303900    PUSH csaw2012.00393000                   ; /src = "Encrypted Key:  "
003910D5  |. 8D4D A8        LEA ECX,DWORD PTR SS:[EBP-58]            ; |
003910D8  |. 51             PUSH ECX                                 ; |dest
003910D9  |. E8 8A000000    CALL csaw2012._strcpy                    ; \_strcpy
003910DE  |. 83C4 08        ADD ESP,8
003910E1  |. 8D55 E8        LEA EDX,DWORD PTR SS:[EBP-18]
003910E4  |. 52             PUSH EDX                                 ; /src
003910E5  |. 8D45 A8        LEA EAX,DWORD PTR SS:[EBP-58]            ; |
003910E8  |. 50             PUSH EAX                                 ; |dest
003910E9  |. E8 74000000    CALL csaw2012._strcat                    ; \_strcat
003910EE  |. 83C4 08        ADD ESP,8
003910F1  |. 6A 00          PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
003910F3  |. 68 14303900    PUSH csaw2012.00393014                   ; |Title = "Key!"
003910F8  |. 8D4D A8        LEA ECX,DWORD PTR SS:[EBP-58]            ; |
003910FB  |. 51             PUSH ECX                                 ; |Text
003910FC  |. 6A 00          PUSH 0                                   ; |hOwner = NULL
003910FE  |. FF15 AC203900  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
00391104  |. 6A FF          PUSH -1                                  ; /status = FFFFFFFF (-1.)
00391106  |. FF15 A0203900  CALL DWORD PTR DS:[<&MSVCR100.exit>]     ; \exit
0039110C  |. 8D55 E8        LEA EDX,DWORD PTR SS:[EBP-18]
0039110F  |. 52             PUSH EDX                                 ; /Arg1
00391110  |. E8 1BFFFFFF    CALL csaw2012.decrypt                    ; \decrypt
00391115  |. 83C4 04        ADD ESP,4
00391118  |. 68 1C303900    PUSH csaw2012.0039301C                   ; /src = "Decrypted Key:  "
0039111D  |. 8D45 A8        LEA EAX,DWORD PTR SS:[EBP-58]            ; |
00391120  |. 50             PUSH EAX                                 ; |dest
00391121  |. E8 42000000    CALL csaw2012._strcpy                    ; \_strcpy
00391126  |. 83C4 08        ADD ESP,8
00391129  |. 8D4D E8        LEA ECX,DWORD PTR SS:[EBP-18]
0039112C  |. 51             PUSH ECX                                 ; /src
0039112D  |. 8D55 A8        LEA EDX,DWORD PTR SS:[EBP-58]            ; |
00391130  |. 52             PUSH EDX                                 ; |dest
00391131  |. E8 2C000000    CALL csaw2012._strcat                    ; \_strcat
00391136  |. 83C4 08        ADD ESP,8
00391139  |. 6A 00          PUSH 0                                   ; /Style = MB_OK|MB_APPLMODAL
0039113B  |. 68 30303900    PUSH csaw2012.00393030                   ; |Title = "Key!"
00391140  |. 8D45 A8        LEA EAX,DWORD PTR SS:[EBP-58]            ; |
00391143  |. 50             PUSH EAX                                 ; |Text
00391144  |. 6A 00          PUSH 0                                   ; |hOwner = NULL
00391146  |. FF15 AC203900  CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA
0039114C  |. 6A 00          PUSH 0                                   ; /status = 0
0039114E  |. FF15 A0203900  CALL DWORD PTR DS:[<&MSVCR100.exit>]     ; \exit
00391154  |. 8B4D FC        MOV ECX,DWORD PTR SS:[EBP-4]
00391157  |. 33CD           XOR ECX,EBP
00391159  |. E8 10000000    CALL csaw2012.__security_check_cookie
0039115E  |. 8BE5           MOV ESP,EBP
00391160  |. 5D             POP EBP
00391161  \. C3             RETN

Ici, il existe deux fonctions intéressant, encrypt et decrypt. Seul problème, la fonction decrypt est incessible à cause d'un appel à exit() (00391106). Pour sauter cette instruction, il suffit simplement de la “nopper”.

exit.asm
00DB1104     90             NOP
00DB1105     90             NOP
00DB1106     90             NOP
00DB1107     90             NOP
00DB1108     90             NOP
00DB1109     90             NOP
00DB110A     90             NOP
00DB110B     90             NOP

Et voilà, c'est terminé !

Decrypted Key:  welcome_to_csaw!