Outils d'utilisateurs

Outils du Site


hackingweek_2014:reverse:reverse4

Reverse 4

Executable : https://repo.zenk-security.com/hackingweek2014_ctf/crackme-04

WARNING: crackme-04 a été changé entre le moment ou je l'ai fait et la fin du challenge. En effet, l'unpacking fonctionnait avec upx -d, ce qui n'est plus le cas maintenant

$ md5sum old-crackme-04
4454fa70971bbbac4578ca248a066f17  old-crackme-04

$ md5sum new-crackme-04
c50937eb74096c0923eda38a081b6fbe  new-crackme-04

La différence entre les deux est mince: les chaines UPX on été remplacées par XXX. On peut retrouver une version compatible avec l'outil upx via une simple commande.

$ perl -pe 's/XXX/UPX/g' crackme-04 > crackme-04-upx

Le binaire est packé UPX. On peut l'unpacker facilement avec “upx -d crackme-04-upx”.

$ upx -d crackme-04-upx
                       Ultimate Packer for eXecutables
                          Copyright (C) 1996 - 2013
UPX 3.09        Markus Oberhumer, Laszlo Molnar & John Reiser   Feb 18th 2013

        File size         Ratio      Format      Name
   --------------------   ------   -----------   -----------
    859513 <-    336244   39.12%  linux/ElfAMD   crackme-04

Unpacked 1 file.
$ file crackme-04-upx
crackme-04-upx: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), statically linked, for GNU/Linux 2.6.32, BuildID[sha1]=b3e7c4ad973543e323fad16c09fca15914211fa0, not stripped

Il s'agit d'un ELF 64 bits, compilé en static, mais non strippé, ce qui signifie que les symboles sont toujours présents.

.text:000000000040103E main            proc near
.text:000000000040103E
.text:000000000040103E var_8           = qword ptr -8
.text:000000000040103E
.text:000000000040103E                 push    rbp
.text:000000000040103F                 mov     rbp, rsp
.text:0000000000401042                 sub     rsp, 10h
.text:0000000000401046                 mov     rax, cs:stdout
.text:000000000040104D                 mov     rcx, rax
.text:0000000000401050                 mov     edx, 26h
.text:0000000000401055                 mov     esi, 1
.text:000000000040105A                 mov     edi, offset aWelcomeToTheCr ; "Welcome to the crackme !!!\n\nPassword: "
.text:000000000040105F                 call    fwrite
.text:0000000000401064                 lea     rax, [rbp+var_8]
.text:0000000000401068                 mov     rsi, rax
.text:000000000040106B                 mov     edi, offset aAs ; "%as"
.text:0000000000401070                 mov     eax, 0
.text:0000000000401075                 call    scanf
.text:000000000040107A                 mov     rcx, [rbp+var_8]
.text:000000000040107E                 mov     rax, cs:first_half ; "K008JJ"
.text:0000000000401085                 mov     edx, 6
.text:000000000040108A                 mov     rsi, rcx
.text:000000000040108D                 mov     rdi, rax
.text:0000000000401090                 call    strncmp
.text:0000000000401095                 test    eax, eax
.text:0000000000401097                 jnz     short loc_4010B2
.text:0000000000401099                 mov     rax, [rbp+var_8]
.text:000000000040109D                 add     rax, 6
.text:00000000004010A1                 mov     esi, offset aDbvm4a ; "dBVm4A"
.text:00000000004010A6                 mov     rdi, rax
.text:00000000004010A9                 call    strcmp
.text:00000000004010AE                 test    eax, eax
.text:00000000004010B0                 jz      short loc_4010D2

Le code est trivial, les 6 premiers caractères du password sont comparés à “K008JJ” et les suivants à “dBVm4A”.

$ ./crackme-04
Welcome to the crackme !!!

Password: K008JJdBVm4A
Excellent, you succeed !
hackingweek_2014/reverse/reverse4.txt · Dernière modification: 2017/04/09 15:33 (modification externe)