Cette page vous donne les différences entre la révision choisie et la version actuelle de la page.
— |
csaw2012_quals:reversing:csaw2012reversing.exe [2017/04/09 15:33] (Version actuelle) |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | ===== 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). | ||
+ | |||
+ | <file asm 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</file> | ||
+ | |||
+ | 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". | ||
+ | |||
+ | <file asm 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</file> | ||
+ | |||
+ | Et voilà, c'est terminé ! | ||
+ | |||
+ | <file>Decrypted Key: welcome_to_csaw!</file> |