===== 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!