Не важно, как медленно ты продвигаешься, главное, что ты не останавливаешься.


Saturday 10 October 2015

Cyber Jawara 2015 Day 2 : CJ2015

Gambar 1 : CJ2015.exe
Kembali dengan soal reversing, tetapi kali ini program dibuat dengan bahasa python yang dikemas menjadi .exe. Berbeda dengan soal sebelumnya, solusi untuk soal kali ini adalah decompiling exe yang kita dapat menjadi .py sehingga mudah untuk dibaca.

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 Time

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 2 : The Flag
Password yang didapat saya coba masukkan kedalam program, dan muncul flag :
CJ2015{g00dByeJacK!}

Sekian write up - write up-an kali ini, semoga bermanfaat..
5 λ .: October 2015 Gambar 1 : CJ2015.exe Kembali dengan soal reversing, tetapi kali ini program dibuat dengan bahasa python yang dikemas menjadi .exe. Berb...

Cyber Jawara 2015 Day 2 : txt-img Kang Slamet

Gambar 1 : Petunjuk dari Kang Slamet
Langsung saja, pada soal hari kedua kang slamet memberikan clue : PNG dan beberapa angka yang berpasangan, jika dilihat dari kombinasi angka tersebut bisa jadi ini merupakan titik koordinat dari clue yang diberikan. Peserta diminta untuk merepresentasikan koordinat yang diberikan kedalam sebuah gambar. Saya menggunakan bahasa python untuk menerjemahkan titik-titik tersebut. Kurang lebih code yang saya buat seperti ini.


from PIL import Image

code = "1,3 1,4 1,5 1,6 2,2 2,7 3,2 3,7 4,3 4,6 6,6 7,7 8,2 8,7 9,2 9,3 9,4 9,5 9,6 11,3 11,7 12,2 12,6 12,7 13,2 13,5 13,7 14,3 14,4 14,7 17,3 17,4 17,5 17,6 18,2 18,7 19,3 19,4 19,5 19,6 22,3 22,7 23,2 23,3 23,4 23,5 23,6 23,7 24,7 26,2 26,3 26,4 26,6 27,2 27,4 27,7 28,2 28,4 28,7 29,2 29,5 29,6 31,4 32,2 32,4 32,6 33,1 33,3 33,5 33,7 34,1 34,7 36,5 37,4 37,6 37,8 38,4 38,6 38,8 39,4 39,5 39,6 39,7 42,3 42,4 42,5 42,6 43,2 43,7 44,3 44,4 44,5 44,6 47,3 47,4 47,5 47,6 48,2 48,7 49,3 49,4 49,5 49,6 51,5 51,6 52,4 52,7 53,4 53,6 54,2 54,3 54,4 54,5 54,6 54,7 56,8 57,8 58,8 59,8 60,8 61,2 61,3 61,4 61,5 61,6 61,7 62,4 62,7 63,4 63,7 64,5 64,6 66,4 66,5 67,6 67,8 68,6 68,8 69,4 69,5 69,6 69,7 71,3 71,6 72,2 72,7 73,2 73,4 73,7 74,3 74,5 74,6 76,8 77,8 78,8 79,8 80,8 82,7 83,8 84,2 84,4 84,5 84,6 84,7 86,5 86,6 87,4 87,7 88,4 88,7 89,5 89,6 91,5 91,7 92,4 92,5 92,7 93,4 93,6 93,7 94,4 94,6 98,3 98,4 98,5 98,7 102,1 102,7 103,1 103,3 103,5 103,7 104,2 104,4 104,6 105,4"

kode = code.split()
im = Image.new('RGBA',(200,100))
im.getpixel((0,0))
for i in kode:
  coor = i.split(',',1)
  im.putpixel((int(coor[0]),int(coor[1])),(0,0,0))
im.save('CJ2015.png')


Kode python diatas menggambar titik dari koordinat yang diberikan dan hasilnya akan disimpan ke dalam file CJ2015.png. Hasilnya seperti gambar dibawah ini.

Flag : CJ2015{g00d_by3_jos!}



5 λ .: October 2015 Gambar 1 : Petunjuk dari Kang Slamet Langsung saja, pada soal hari kedua kang slamet memberikan clue : PNG dan beberapa angka yang berpa...

Cyber Jawara 2015 Day 1 : LoginCJ (Medium I)

Soal selanjutnya merupakan soal reversing, peserta diberikan file executable bernama LoginCJ, secara singkat peserta diminta untuk menebak username dan password untuk login ke LoginCJ.exe, berikut tampilan aplikasinya.

Gambar 1 : LoginCJ.exe
Gambar 2 : Gagal Login
Gambar 2 merupakan tampilan aplikasi jika username dan password tidak sesuai. Singkat cerita, dibuka aplikasi itu kedalam immunity debugger, dan saya cari reference string yang ada seperti gambar dibawah ini.

Gambar 3 : String
Terdapat 2 String yang sepertinya kombinasi dari username dan password. Saya mulai kembali debugger dengan mengisi username="username" dan password="password", bertjuan untuk mengetahui string mana yang merupakan username/password.

Gambar 4 : Password
Gambar 5 : Username
Setelah beberapa step, string "password" yang dimasukkan ternyata mengarah ke string 2015j4w4racYb3RR, dan username didapatkan berupa J4w4r4cyb3rrrr.

Gambar 6 : Sukses login
username dan password yang didapat dari proses sebelumnya ternyata berhasil, aplikasi menampilkan beberapa gambar dan tulisan hijau JC2015{LANTING, namun setelah saya coba masukkan, ternyata bukan itu flagnya. Sayangnya, waktu perlombaan hari pertama sudah habis, dan web scoring sudah ditutup. So, kita tunggu write up dari peserta lainnya.

5 λ .: October 2015 Soal selanjutnya merupakan soal reversing, peserta diberikan file executable bernama LoginCJ, secara singkat peserta diminta untuk menebak...

Cyber Jawara 2015 Day 1 : Breakmyfall (Medium I)




Soal kali ini diberikan paket bernama breakmyfail.tar.gz yang setelah diextract berisi 2 file, yang pertama file jawara, dan file mail.txt. Setelah dicek, ternyata file jawara merupakan file SVG, sementara mail.txt hanya text biasa. Berikut isi fail mail.txt :

Gambar 1 : Isi file breakmyfall.tar.gz
Isi email dibungkus dengan Base64 encoding, setelah didecode kira-kira isinya seperti ini :

Selamat siang,

Mohon bantuan untuk aksi peretasan pada datacenter kami yang dilakukan oleh orang tidak bertanggung jawab.
Mungkin hacker/craker telah menanamkan sesuatu pada salah satu server kami yang ada didata center, 
karna tim kami menemukan satu file yang tertinggal disana.

Hasil penemuan tersebut kami lampirkan pada attachment.

Atas bantuan dan perhatiannya diucapkan terima kasih
-- 

*Best Regard*
Hayabusa

Joger Corp

Sementara, isi file jawara adalah sebagai berikut :

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg width="3.92cm" height="3.92cm" viewBox="0 0 37 37" preserveAspectRatio="none" version="1.1" xmlns="http://indonesiancoder.com">
<g id="Base">
<rect x="0" y="0" width="37" height="37" fill="#ffffff" />
<g id="Pattern">
<rect x="0" y="0" width="1" height="1" fill="#000000" />
<rect x="1" y="0" width="1" height="1" fill="#000000" />
<rect x="2" y="0" width="1" height="1" fill="#000000" />
<rect x="3" y="0" width="1" height="1" fill="#000000" />
-------------------- Snip --------------------------------

 Jika dilihat dari image viewer, maka akan tampil seperti pada gambar dibawah ini.

Gambar 2: Render original SVG
Ada bagian yang janggal menurut Saya, jika dillihat baik-baik, ada bagian yang hilang disisi kanan QC code. QR code yang benar memiliki 3 kotak besar di sisi QR tersebut. Setelah ditelusuri, Saya mencoba menghilangkan background dari QR tersebut dengan cara menghapus code berwarna hijau dibawah ini.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<svg width="3.92cm" height="3.92cm" viewBox="0 0 37 37" preserveAspectRatio="none" version="1.1" xmlns="http://indonesiancoder.com">
<g id="Base">
<rect x="0" y="0" width="37" height="37" fill="#ffffff" />
<g id="Pattern">
<rect x="0" y="0" width="1" height="1" fill="#000000" />
<rect x="1" y="0" width="1" height="1" fill="#000000" />
<rect x="2" y="0" width="1" height="1" fill="#000000" />
<rect x="3" y="0" width="1" height="1" fill="#000000" />
-------------------- Snip --------------------------------

Setelah dirender, maka akan tampil gambar dibawah ini.

Gambar 3 : QR belum komplit
Ternyata bagian yang hilang disembunyikan dengan cara diwarnai dengan warna putih. Untuk melengkapinya cukup mengganti semua warna putih fill=#ffffff menjadi #000000, maka akan tampil QR yang utuh setelah memulihkan kembali background yang berwarna putih.

Untuk SVG renderer online dapat dijumpai pada website http://jsfiddle.net/

Gambar 4 : Complete QR

Scan untuk mendapatkan petunjuk berikutnya, dapat menggunakan scanner yang ada di hp atau online seperti https://webqr.com/.

Gambar 5 : The Flag
Flag telah ditemukan dari QR code tersebut : Y0u_Kn0w_mY_n4me_n0t_My_S70ry

Flag : CJ2015{Y0u_Kn0w_mY_n4me_n0t_My_S70ry}
5 λ .: October 2015 Soal kali ini diberikan paket bernama breakmyfail.tar.gz yang setelah diextract berisi 2 file, yang pertama file jawara, dan file mail.tx...

Cyber Jawara 2015 Day 1 : SUUNTO (Medium I)


Soal Medium I dengan poin 50, diberikan sebuah gambar cyber jawara yang kemungkinan sebuah soal stegano, kurang lebih gambarnya seperti gambar 1.

Gambar 1 : Ilustrasi gambar yang diberikan (bukan gambar sebenarnya)
Setelah dikupas, terdapat info berupa short URL kplg.co/09UE yang kemungkinan sebuah url ke petunjuk berikutnya.

Gambar 2 : Info URL yang terdapat di gambar
Setelah ditelusuri, ternyata link tersebut mengarah ke dropbox yang berisi file bernama SUUNTO_DJ.rar

Gambar 3 : Dropbox link SUUNTO
Singkat cerita, file tersebut terbagi kedalam part kecil yang cukup diextract, maka akan mendapatkan kumpulan gambar seperti QR code.

Gambar 4 : QR puzzle
Seperti menyusun puzzle, susun gambar tersebut seperti QR code yang utuh, ada beberapa gambar yang tidak terpakai yang mungkin digunakan untuk mengecoh para peserta.

Gambar 5 : QR complete
Setelah disusun menjadi QR yang utuh, scan menggunakan QR reader yang ada di smartphone, maka akan muncul informasi berupa url seperti gambar dibawah ini.

Gambar 6 : Flag
Dari URL yang didapat, ternyata berisi flag dari soal ini yaitu d4mn1l0v31nd0n3514, secara lengkap flagnya CJ2015{d4mn1l0v31nd0n3514}



5 λ .: October 2015 Soal Medium I dengan poin 50, diberikan sebuah gambar cyber jawara yang kemungkinan sebuah soal stegano, kurang lebih gambarnya seperti g...
< >