Saturday, June 17, 2017

Write Up SlashRoot - Rev4Fun

Rev4Fun (75pts)  Reverse for fun and profit ... Hint! Ada kesalahan sedikit, sudah diperbaiki ~  rev4fun_fixed  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...

Write Up SlashRoot - RSA

RSA (100pts)  N = 1799159815596838211639026598242739e = 200917020563208190152062461460131c = 318686567182196523307366910641013*format flag : SlashRootCTF{flag} Hint! Hasil perlu diconvert ke ascii v Deskripsi Peserta diberi sebuah soal kriptograpi RSA dimana N merupakan modulus, e merupakan exponen, serta c merupakan chipernya. v Penyelesaian Pertama kita harus mendapatkan faktor dari modulus N yaitu p q. Untuk mencarinya dengan cepat kita gunakan tools online factordb.com. p = 19900922910223213 q = 90405848196748703 Setelah itu di lakukan proses pembangkita private d, dan melakukan proses dekripsi pesan. Script kurang lebih seperti berikut. from Crypto.Util.number import inverse class Stack:     def __init__(self):         self.items = []     def item(self):         return self.items     def isEmpty(self):         return self.items == []     def push(self, item):         self.items.insert(0,item)     def pop(self):         return self.items.pop(0)     def peek(self):         return self.items[0]     def size(self):         return len(self.items) def calculate_privkey(p, q, e):     phi = (p-1) * (q-1)     d = inverse(e, phi)     return d def long_ascii_to_binary(M):     tmp_flag = Stack()     for i in str(M)[::-1]:         tmp_flag.push(i)     flag_assci = []     while not tmp_flag.isEmpty():         if int(tmp_flag.peek()) == 1:             flag_assci.append(int(tmp_flag.pop()+tmp_flag.pop()+tmp_flag.pop()))         elif int(tmp_flag.peek()) != 1:             flag_assci.append(int(tmp_flag.pop()+tmp_flag.pop()))     return ''.join(chr(x) for x in flag_assci) def main():     #modulus     N = 1799159815596838211639026598242739     #public exponent     e = 200917020563208190152062461460131     #chiper     C = 318686567182196523307366910641013...
Pages (16)Previous 123456789 Next

Search This Blog

Powered by Blogger.

Langganan

Enter your email address:

Delivered by FeedBurner

 

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

Back To Top