Site Meter MENGENAL RCE (REVERSE CODE ENGINEERING) | Blog Belajar [ RCE ] http://belajar-cracking.blogspot.com/ MENGENAL RCE (REVERSE CODE ENGINEERING) MENGENAL RCE (REVERSE CODE ENGINEERING) MENGENAL RCE (REVERSE CODE ENGINEERING) MENGENAL RCE (REVERSE CODE ENGINEERING) | Blog Belajar [ RCE ]

0 MENGENAL RCE (REVERSE CODE ENGINEERING)

Kita, terutama gue sering mendengar istilah Reverse Engineering. Kalau mendengar istilah ini, biasanya akan dihubungkan dengan hacker atau cracker. Loh, emangnya apa urusannya hacker/cracker tersebut dengan reverse engineering?

Reverse engineering atau biasa disebut juga back engineering merupakan proses pembelajaran (ekstraksi) pengetahuan, desain, atau apapun yang dibuat manusia, yang kemudian hasil ekstraksi (ilmu) tersebut digunakan kembali oleh orang yang melakukan proses tersebut untuk mereproduksi pengetahuan / desain maupun membuat sesuatu hal baru berdasarkan hasil ekstraksi pengetahuan di atas. Tentunya dalam konteks ini, yang dimaksud adalah software reverse engineering, yaitu proses bagaimana kita bisa mengetahui algoritma program (atau source codenya jika mungkin).
Proses yang digunakan biasanya melibatkan pembongkaran alat / sistem yang ada, yang kemudian menghasilkan bagian yang lebih kecil / sederhana. Bagian yang lebih kecil tersebut lalu dipelajari dan dianalisa secara lebih detail fungsi dan komponennya.

Terus apa tujuannya melakukan reverse engineering? Banyak hal, tergantung orangnya juga sih. Ada yang tujuannya untuk have fun, untuk memperbaiki sistem yang ada, untuk membuat duplikasi sistem tersebut, bahkan untuk kriminal seperti cracker (cracker merupakan kependekan dari criminal hacker, yaitu orang yang sangat pandai dalam penguasaan sistem namun digunakan untuk tujuan kejahatan/tindak kriminal).

Beginilah kurang lebih cara hacker ataupun cracker bekerja. Mereka (kebanyakan) sebelumnya tidak tahu / tidak ikut terlibat dalam pembuatan sautu sistem. Namun, mereka melakukan reverse engineering dengan memecah/membagi sistem yang ada ke part / bagian yang lebih kecil kemudian bagian tersebut dipelajari dan dianalisis secara lebih detail apa fungsinya. Jika mereka sudah mampu menguasai tiap bagiannya, tentunya akan lebih mudah untuk menambah, mengurangi, duplikasi ataupun memodifikasi.

(Mungkin) khusus untuk software, karena biasanya dalam distribusi software tidak disertai / hanya disertai sedikit  source code, hacker / cracker menganalisa input dan output dari software tersebut. Dari hasil analisa input dan output tersebut, hacker dapat membuat suatu fungsi yang meniru tingkah laku fungsi dari software yang ada. Misalnya begini:

Suatu software mempunyai fungsi x, yang jika dimasukkan dua buah angka akan menghasilkan satu angka. Satu angka tersebut selalu bernilai jumlah dari dua angka yang diinput tadi. Maka dapat ditarik kesimpulan fungsi tersebut merupakan fungsi penjumlahan. Hacker / cracker kemudian dapat membuat simulasi dari fungsi tersebut untuk digunakan pada software lain atau pengembangan software tersebut, misalnya software yang dapat mengalikan. Dengan cerdiknya hacker / cracker membuat software perkalian dengan memanfaatkan fungsi penjumlahan yang menjumlahkan angka pertama dan diulang sebanyak angka kedua (atau sebaliknya). Begitulah kurang lebih reverse engineering dalam software.

Jadi menurut ane, reverse engineering tidaklah mudah. Dibutuhkan ketelitian yang tinggi, kesabaran yang ekstra, kemampuan analisis dan imajinasi. Jadi masih bingungkah dengan reverse engineering? Kalau tambah bingung sama!!! ?? :D.


Penggunaan RE
Reverse engineering digunakan untuk banyak tujuan, ada yang baik dan ada pula yang kurang baik.

RE Untuk cracking program
Banyak orang mengenal RE untuk cracking program, baik itu berupa patch agar mendapatkan full version atau key generator untuk menghasilkan serial number yang valid.

RE untuk modifikasi program
Tidak semua bentuk modifikasi program berupa crack, berbagai modifikasi bisa dilakukan yang sifatnya positif misalnya:

Membetulkan bug program
Menambah fitur program (contoh yang sering ditemui adalah Game Mod).
Walaupun ada juga modifikasi yang sifatnya negatif, seperti misalnya menambahkan malware/backdoor/trojan/logger ke sebuah aplikasi.

RE untuk analisis security software komersial
Berbagai software legal ternyata menginstall rootkit. Sudah ada berbagai kasus terkait ini, misalnya kasus Sony, dan kasus terbaru saat ini di game Street Fighter.

Berbagai router dan benda IOT perlu direverse engineer untuk mengetahui cara kerjanya. Kadang pembuat device membuat backdoor, atau menyembunyikan fitur tertentu yang bisa diaktifkan.

RE untuk membuat exploit
Salah satu hal dasar yang dipakai bidang security adalah exploit. Para pentester memakai eksploit untuk masuk ke sistem, demikian juga para cracker. Exploit untuk berbagai OS komersial tertutup (Windows, OSX, iOS) pasti dihasilkan dari RE. Bahkan yang open source pun kadang butuh sedikit RE untuk membuat exploitnya (untuk memastikan berbagai address yang dihasilkan compiler).

RE untuk pentest
Sebagian mungkin menganggap: buat apa RE? bidang security saya nggak ada hubungannya dengan RE sama sekali: saya nggak ngurusin virus komputer ataupun malware. Saya cukup memakai exploit buatan orang saja. Saya nggak suka ikutan CTF yang ada reverse engineeringnya. Saya nggak akan membongkar software baru/router baru/device baru ataupun apapun yang berhubungan dengan IoT (Internet of Things). Saya nggak akan mengurusi web app yang memakai .NET ataupun Java (contoh pentester yang mengurusi kode low level .NET di aplikasi web). Saya nggak akan mempelajari protokol sebuah aplikasi. Saya juga nggak mengurusi mobile app untuk platform manapun. Karena itu semua keahlian RE buat saya nggak berguna.

Sekarang saya contohkan penggunaan RE satu bidang saja yang praktis dan dibutuhkan: mobile app. Sekarang ini dengan maraknya mobile device, keahlian RE untuk mobile app sangat dibutuhkan. Dari beberapa app yang saya test: tanpa RE, banyak bug bisa lolos.

Testing standar yang dilakukan banyak orang yang tidak melakukan RE adalah blackbox testing. Testing ini dilakukan dengan memonitor traffic dari device ponsel ke Wifi access point (dan mungkin menginstall dulu root cert di device jika protokolnya memakai SSL). Jika protokol yang dipakai adalah HTTP biasa (baik dengan SSL maupun tidak), maka langkah berikutnya adalah fuzzing (mencoba-coba sql injection dsb).

Teknik blackbox ini bisa gagal dalam banyak app. Pertama ada aplikasi yang memakai SSL Pinning, dan jika kita install root cert palsu, tetap tidak akan mau melakukan koneksi. Lalu meskipun protokolnya HTTP biasa (tanpa SSL sekalipun), jika aplikasi menggunakan HMAC untuk menandatangani requestnya, seperti ini:

aksi?a=1&b=2&hmac=xxyyzz
Jika kita berusaha mengganti satu byte saja, maka requestnya akan langsung ditolak tanpa HMAC yang benar. Jika kita tidak bisa mereverse engineer caranya menandatangani request tersebut, maka fuzzing tidak bisa dilakukan.

Apalagi jika ternyata protokolnya tidak memakai HTTP, tapi socket langsung, dan aplikasi menggunakan custom encryption (misalnya sekedar mengenkrip dengan AES dengan kunci yang tetap), maka blackbox testing tidak berguna sama sekali. Pernah ketemu aplikasi semacam ini di aplikasi mobile banking dan ternyata ada bug super penting di mana kita bisa mentransfer uang dari rekening orang ke rekening kita. Bug ini sebenarnya super konyol, jika memakai HTTP, requestnya kira-kira:

transfer?from=rekening1&to=rekening2&amount=1000
Tapi di sisi server tidak divalidasi bahwa rekening “from” adalah benar milik user tersebut (seorang user bisa punya beberapa rekening). Jika requestnya menggunakan HTTP dengan testing sedikit, bug ini akan ketahuan, tapi karena requestnya menggunakan socket dan paketnya formatnya tidak standar (bukan XML atau JSON), dan menggunakan enkripsi (AES), maka bug ini tidak tertangkap sampai cukup lama.

RE untuk analisis malware
Berbagai file yang kena ransomware berhasil didekrip karena ada kelemahan dalam enkripsinya, dan ini ditemukan dengan reverse engineering (dan tentunya ilmu kriptografi).

Malware yang sangat spesifik (misalnya yang digunakan untuk hacking Bank Sentral Bangladesh) harus dianalisis khusus, tidak akan ketemu oleh antivirus biasa. Malware yang tertarget (via email/web) untuk perusahaan tertentu juga perlu dianalisis secara khusus.

Berbagai exploit disebarkan via halaman web (via Javascript yang diobfuscate, memanfaatkan kelamahan Flash/Java/IE, lalu mengandung kode biner berisi shell code)

RE untuk analisis protokol dan algoritma
Berbagai protokol komunikasi software komersial (misalnya WhatsApp) berhasil dibongkar lalu diimplementasikan ulang dalam bentuk software open source.

RE dan cyberwar
Berdasarkan berbagai penggunaan RE di atas, saya berpendapat bahwa keahlian RE ini amat sangat penting untuk cyberwar/defense. Jika kita membeli semua software untuk bertahan dan menyerang, siapa yang tahu bahwa software yang kita beli itu tidak ada backdoornya jika tidak kita bongkar (RE)?. Beberapa waktu yang lalu ketika Hacking Team dijebol, baru diketahui bahwa software keamanan yang mereka jual (untuk menyadap/menyerang orang lain) ternyata ada backdoornya juga. Padahal client Hacking Team ini adalah lembaga pemerintah. Oh iya, dari bocoran Hacking Team, bisa dilihat juga bahwa harga sebuah exploit zero day mencapai ratusan juta rupiah (puluhan ribu dollar).

Legalitas RE
Tergantung penggunaannya dan hukum tempat Anda berada, RE bisa legal, illegal atau dalam area abu-abu. Penggunaan yang 100% legal misalnya: RE kode milik sendiri (baik individu ataupun perusahaan) yang source codenya hilang, RE untuk kompetisi (CTF), RE malware.

Beberapa yang masuk area abu-abu karena tergantung hukum dan interpretasi terhadap hukum tersebut: RE protokol untuk interoperabilitas, RE untuk mencari trade secret (rahasia dagang). Bahkan kadang RE untuk bidang security bisa masuk ke area abu-abu, sudah ada beberapa kasus di mana security researcher bermasalah dalam mencari dan atau mempublikasikan bug yang ditemukan.

Yang jelas masuk dalam kategori illegal adalah RE untuk cracking software, baik itu dengan patching ataupun dengan membuat key generator.

Cara belajar RE
Ada banyak cara untuk belajar sesuatu, dan tidak ada cara terbaik bagi siapapun untuk belajar sesuatu. Akan saya tunjukkan setidaknya beberapa pendekatan untuk belajar RE.

Sebagian orang akan langsung mengikuti tutorial cracking software. Hasilnya beragam: ada yang sudah memiliki dasar komputer yang baik (assembly, C, dsb) dan langsung bisa memahami prosesnya, serta bisa langsung mengcrack program lain. Ada yang bisa mengikuti tutorialnya, dan berhasil membongkar program serupa, tapi ada juga yang langsung gagal ketika programnya berbeda sedikit saja.

Ada orang yang belajar dari buku, hasilnya pun beraneka ragam. Berbeda dengan tutorial yang sifatnya pendek dan jelas, sebuah buku akan memberikan dasar teori yang lebih banyak. Karena bidang RE sangat luas, ada banyak buku dengan fokus tertentu saja, dan tiap buku bisa ratusan hingga ribuan halaman. Contohnya: buku RE malware yang hanya membahas Windows bisa mencapai 800 halaman. Dari beberapa orang yang memakai pendekatan ini, kebanyakan menyerah di tengah jalan.

Cara yang biasanya berhasil ada kombinasi dari kedua hal di atas: praktik plus teori. Jika Anda sudah punya dasar komputer yang cukup baik, maka bisa langsung praktik, jika mentok baca lagi teorinya. Jika belum punya dasar komputer yang baik, Anda sebaiknya belajar dulu dasar-dasarnya.

Ilmu dasar
Saya tidak akan membahas berbagai ilmu dasar untuk bisa melakukan RE, saya hanya akan memberikan daftarnya saja. Anda bisa mempelajari dasar ilmu ini baik dari buku, kuliah online, maupun materi dari Youtube.

Keahlian dasar komputer
Anda perlu tahu berbagai hal dasar sekali. Saya tidak akan mau ditanya: bagaimana menginstall program X, bagaimana mengekstrak file yang dikompres (dengan zip/7z/rar, dsb). Anda perlu tahu bagaimana menginstall driver, menginstall SDK, mencari tutorial (menggunakan Google) bagaimana cara mengcompile sesuatu. Jika berurusan dengan OS selain desktop -- misalnya ketika reversing Android --, Anda perlu tahu bagaimana menghubungkan benda tersebut ke desktop, bagaimana mengekstrak APK, melakukan rooting terhadap device, dsb.

Basis bilangan
Anda akan banyak menemukan penggunaan bilangan basis 2, 10 dan 16 serta terkadang basis 8. Jangan kaget ketika di kode program Anda menulis angka 200 (desimal) dan ketika melihat listing disassembly Anda melihat c8 (heksadesimal).Selagi belajar ini, coba juga tengok tabel ASCII. Berbagai karakter akan menjadi bilangan di assembly (misalnya if (c=='\n') bisa menjadi cmp al, 0xa).

Dasar Arsitektur komputer
Biasanya materi dari kuliah Arsitektur Komputer sudah cukup. Akan lebih baik jika Anda mengerti konsep abstraknya juga (biasanya dari kuliah teori bahasa dan automata), misalnya mengenai konsep mesin turing.

Dasar pemrograman
Untuk reverse engineering sederhana, kemampuan programming dasar diperlukan. Untuk reverse engineering yang lebih rumit, ilmu pemrograman yang dibutuhkan juga semakin tinggi. Andaikan Anda tidak bisa memprogram secara terstruktur baik, minimal kemampuan membaca source program sangat dibutuhkan.

Dalam beberapa kasus -- misalnya reverse engineering Android -- kita (biasanya) bisa mendapatkan source code dengan decompiler. Di titik ini Anda perlu membaca source code Java. Jika Anda tidak punya dasar Java sama sekali, Anda akan kesulitan memahami source codenya. Ini berlaku juga untuk berbagai bahasa/teknologi lain.

Ilmu lanjut
Ketika melakukan RE, Anda akan bertemu dengan berbagai topik tingkat lanjut. Ini tidak diperlukan di bagian awal, tapi kemungkinan besar akan Anda temui ketika berusaha mengcrack suatu program atau ikut sebuah CTF.

Enkripsi
Hampir semua game dan aplikasi serius memiliki proteksi dalam bentuk enkripsi. Jadi Anda perlu tahu dasar berbagai enkripsi sederhana, minimal cara kerjanya. Jika Anda ingin membongkar ransomware -- sebuah software yang menyandera user dengan mengenkrip datanya -- Anda perlu belajar enkripsi tingkat lanjut, yang meliputi mencari kelemahan dalam implementasi enkripsi.

Networking
Kebanyakan program yang memakai jaringan akan menggunakan HTTP dengan data dalam JSON/XML. Program tertentu akan memakai protokol khusus. Pemahaman akan protokol jaringan, bagaimana melakukan intercept dsb akan sangat berguna.

sumber

Artikel Lainnya

[ FANS PAGE ]

Diberdayakan oleh Blogger.

[ KONTEN TERBARU]

[ POPULER KONTEN ]