Gambar 1 : CJ2015.exe |
Step pertama, decompile .exe menjadi executable python .pyc, untuk yang satu ini saya menggunakan unpy2exe (https://github.com/matiasb/unpy2exe).
C:\Users\..\jawara\cj2015\unpy2exe-master>python unpy2exe.py ..\cj2015.exe Magic value: 78563412 Code bytes length: 3839 Archive name: library.zip Extracting boot_common.py.pyc Extracting a.py.pyc
unpy2exe menghasilkan file a.py.pyc yang belum bisa dibaca source dengan kasat mata, sehingga step selanjutnya adalah decompile a.py.pyc menjadi source python. proses ini dapat menggunakan uncomplye (https://github.com/gstarnberger/uncompyle)
C:\Users\..\Desktop\jawara\cj2015\uncompyle-master\scripts>python uncompyler.py ..\..\a.py.pyc >> a.py
Hasil dari uncompyle disimpan kedalam file a.py yang berisi code python dibawah ini:
# 2015.10.10 19:56:14 SE Asia Standard Time print 'Cyber Jawara Online' print '===================' def scramble(x): return [ chr(i) for i in x ] def flippity(x): return ''.join([ ''.join(i) for i in zip(x[1::2], x[0::2]) ]) def go(): password = raw_input('Password: ') if len(password) != 22: return False if ord(password[11]) != 89 or ord(password[5]) != 69 or ord(password[16]) != 112 or ord(password[12]) != 111 or ord(password[18]) != 64 or ord(password[21]) != 33 or ord(password[13]) != 117 or ord(password[9]) != 121 or ord(password[14]) != 114 or ord(password[17]) != 64 or ord(password[7]) != 106 or ord(password[1]) != 36 or ord(password[15]) != 95 or ord(password[19]) != 115 or ord(password[20]) != 115 or ord(password[3]) != 121 or ord(password[10]) != 95 or ord(password[8]) != 48 or ord(password[6]) != 110 or ord(password[2]) != 97 or ord(password[4]) != 95 or ord(password[0]) != 101: return False return flippity(scramble([74, 67, 48, 50, 53, 49, 103, 123, 48, 48, 66, 100, 101, 121, 97, 74, 75, 99, 125, 33])) print go() +++ okay decompyling ..\..\a.py.pyc # decompiled 1 files: 1 okay, 0 failed, 0 verify failed # 2015.10.10 19:56:14 SE Asia Standard TimeDalam bentuk seperti ini, semakin mudah dibaca tentunya. Ternyata ada 2 kondisi password yang akan diterima, kondisi pertama panjang password adalah 22, kondisi yang kedua ada beberapa deretan huruf yang masih berupa bilangan dec, jika disusun kemungkinan membentuk password yang benar. Maka saya melakukan mapping array dengan kondisi yang benar, seperti dibawah ini.
array : kondisi yang benar (dec)
0 | : | 101 |
1 | : | 36 |
2 | : | 97 |
3 | : | 121 |
4 | : | 95 |
5 | : | 69 |
6 | : | 110 |
7 | : | 106 |
8 | : | 48 |
9 | : | 121 |
10 | : | 95 |
11 | : | 89 |
12 | : | 111 |
13 | : | 117 |
14 | : | 114 |
15 | : | 95 |
16 | : | 112 |
17 | : | 64 |
18 | : | 64 |
19 | : | 115 |
20 | : | 115 |
21 | : | 33 |
Dari deretan angka decimal tersebut jika diterjemahkan (http://www.asciitohex.com/) kedalam ascii akan menjadi seperti: e$ay_Enj0y_Your_p@@ss!
Gambar 2 : The Flag |
CJ2015{g00dByeJacK!}
Sekian write up - write up-an kali ini, semoga bermanfaat..
No comments:
Post a Comment