Saturday, June 17, 2017

Write Up SlashRoot - Rev4Fun

June 17, 2017

Rev4Fun (75pts) 

Reverse for fun and profit ...
Hint! Ada kesalahan sedikit, sudah diperbaiki ~
e96493405c7a194936f8cdd62f7585bc
v Deksripsi
Peserta diberikan sebuah file binnary rev4fun yang harus di reverse engineering untuk mendapatkan sebuah flag.
v Penyelesaian
Langsung saja kita analisa dengan debuging menggunakan tools gdb. Lakukan breakpoint pada address yang memiliki cmp (Comparison Instructions). Address yang di breakpoint adalah:
0x00000000004006bd <+80>: cmp    DWORD PTR [rbp-0x28],0x9
0x00000000004006cb <+94>: cmp    al,0x30
0x00000000004006d7 <+106>: cmp    al,0x64
0x00000000004006e3 <+118>: cmp    al,0x65
0x00000000004006ff <+146>: cmp    eax,edx
0x0000000000400714 <+167>: cmp    eax,edx
0x0000000000400725 <+184>: cmp    edx,eax
0x000000000040073c <+207>: cmp    eax,DWORD PTR [rbp-0x24]
0x0000000000400745 <+216>: cmp    al,0x6b
0x0000000000400756 <+233>: cmp    eax,edx
0x000000000040075e <+241>: cmp    al,0x73
0x000000000040076a <+253>: cmp    dl,al
0x0000000000400772 <+261>: cmp    al,0x72

Breakpoint pertama merupakan pengecekan panjang dari inputan kita tidak lebih dari 0x9 dilihat dari address setelah breakpoint tersebut 0x00000000004006c1 <+84>: jg     0x40078c <main+287> 
Jg merupakan jump is greater yang dimana jika nilai lebih besar dari 0x9 maka langsung lompat ke 0x40078c dimana address tersebut merupakan dari akhir program
0x000000000040078c <+287>: mov    eax,0x0
Ok mari kita lanjut dengan melakukan input ‘abcdefghi’ untuk memudahkan pengecekan .
Pada breakpoint yang ke dua terjadi pengecekan al, 0x30 yang dimana al bernilai 0x68 (‘h’) harus sama dengan 0x30 karena address selanjutanya melakukan jump ke 0x40078c, jne merupakan jump if not equal.

0x4006cd <main+96>: jne    0x40078c <main+287>

Breakpoint 2, 0x00000000004006cb in main ()
gdb-peda$ x/wx $al
0x68: Cannot access memory at address 0x68
Berarti kita ganti h dengan 0x30 (‘0’). Jadinya inputan kita abcdefg0i mari kita ulangi prosesnya dengan inputan tersebut.
Breakpoint selanjutnya merupakan cmp al, 0x64 dimana address selanjutnya berisi instruksi jle    0x40078c <main+287>, jle merupakan jump if less or equal, berarti inputan kita harus lebih besar dengan 0x64 untuk menghidari jump, dimana inputan kita berisi 0x62 (‘b’).

Breakpoint 3, 0x00000000004006d7 in main ()
gdb-peda$ x/wx $al
0x62: Cannot access memory at address 0x62

Kita ganti b dengan 0x65 (‘e’) jadi inputan kita aecdefg0i. Proses selanjutnya di breakpoint cmp al, 0x65, di address berikutnya terjadi jg     0x40078c <main+287>, sama dengan pengecekan panjang inputan. Nilai inputan kita merupakan 
Breakpoint 4, 0x00000000004006e3 in main ()
gdb-peda$ x/wx $al
0x65: Cannot access memory at address 0x65
0x65 merupakan ‘e’ tentunya bukan e yang kita rubah tadi bisa di cek dengan berubah e yang semula dengan karakter lain. Ok kita coba rubah menjadi ‘d’ sehingga inputan kita menjadi aecddfg0i.

Breakpoint 5, 0x00000000004006ff in main ()
gdb-peda$ x/wx $eax
0x63: <error: Cannot access memory at address 0x63>
gdb-peda$ x/wx $edx
0x75: <error: Cannot access memory at address 0x75>

Ok selanjutanya pengecekan untuk karakter c harus sama dengan lebih dari 0x75. Kita rubah inputan kita menjadi aevddfg0i.
Breakpoint 7, 0x0000000000400725 in main ()
gdb-peda$ x/wx $edx
0x64: Cannot access memory at address 0x64
gdb-peda$ x/wx $eax
0x5f: Cannot access memory at address 0x5f
Inputan kita harus sama dengan 0x5f jadinya aev_dfg0i.

Breakpoint 8, 0x000000000040073c in main ()
gdb-peda$ x/wx $eax
0x64: Cannot access memory at address 0x64
gdb-peda$ x/wx $rbp-0x24
0x7fffffffe69c: 0x00000069
‘d’ nampaknya di ganti lagi dengan 0x69, sehingga menjadi aev_ifg0i.
Breakpoint 10, 0x0000000000400745 in main ()
gdb-peda$ x/wx $al
0x69: Cannot access memory at address 0x69

‘i’ diganti dengan k menjadi aev_ifg0k.

Breakpoint 11, 0x0000000000400756 in main ()
gdb-peda$ x/wx $eax
0x66: Cannot access memory at address 0x66
gdb-peda$ x/wx $edx
0x72: Cannot access memory at address 0x72

‘f’ diganti dengan ‘s’ sehingga menjadi aev_isg0k.
0x40075e <main+241>: cmp    al,0x73
0x400760 <main+243>: jg     0x40078c <main+287>
Nampaknya s dipastikan lagi tidak lebih dari 0x73 jadi lanjut masih dengan inputan sama.
Breakpoint 13, 0x000000000040076a in main ()
gdb-peda$ x/wx $dl
0x67: Cannot access memory at address 0x67
gdb-peda$ x/wx $al
0x5f: Cannot access memory at address 0x5f
‘g’ diganti dengan _ sehingga menjadi aev_is_0k.

Breakpoint 14, 0x0000000000400772 in main ()
gdb-peda$ x/wx $al
0x61: Cannot access memory at address 0x61

Terakhir a di ganti dengan r sehingga menjadi rev_is_0k untuk memastikan ini benar jadi kita harus mencobanya.
./rev4fun_fixed 
Enter the flag: rev_is_0k
Nice manteb, SlashRootCTF{rev_is_0k}


Flagnya dari tantangan ini SlashRootCTF{rev_is_0k}

Written by

aringan komputer (jaringan) adalah sebuah sistem yang terdiri atas dua komputer atau lebih yang didesain untuk dapat berbagi sumber daya ...

0 comments:

 

© 2015 Learning Basic Network. All rights resevered. Designed by Templateism

Back To Top