===== 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).
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".
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!