Writeup Cyber Jawara 2015 Hari Ke 2 - CJ2015 [library] |
Gambar 1 : Soal cj2015.exe |
Kembali dengan soal reversing, tetapi kali ini program dibuat dengan bahasa python yang dikemas menjadi .exe. analisa file tersebut di buat dari bahasa python yaitu anaslisa string yang ada pada file executable tersebut menggunakan command strings, seperti gambar dibawah :
Gambar 2 : Static Analisys [String] |
Step pertama, decompile .exe menjadi executable python .pyc, untuk yang satu ini saya menggunakan unpy2exe (https://github.com/matiasb/unpy2exe).
Gambar 3 : Decompile file cj2015.exe with unpy2exe |
Gambar 4 : cat a.py.pyc |
Gambar 5 : decompile a.py.pyc |
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()
Dalam 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 6 : Flag |
Solusi lainnya :
hilangkan baris-baris yang melakukan pengecekan password
(if len password, if ord password dan sebagainya). Jadi, fungsi “go” hanya berisi:
Gambar 7 : Solusi lainnya |
Gambar 8 : Flag solusi lainnya |
Flag : CJ2015{g00dByeJacK!}
Source :
[1] crackatoa Blog
Writeup Cyber Jawara 2015 Day 2 : CJ2015 [library]
Reviewed by Sitakom Blog
on
9:17 AM
Rating:
No comments: