Tanya Jawab Reverse Engineering

Sebenarnya saya sudah membuat beberapa artikel tentang perkenalan RE. Tapi sepertinya akan lebih mudah jika saya buat sebuah halaman khusus dalam format tanya jawab dan nanti bisa saya update pertanyaan dan jawabannya berdasarkan komentar yang masuk.

Cakupan tanya jawab ini hanya Reverse engineering hardware dan software.

Mengenal Reverse Engineering (RE)

Bagian ini berisi pertanyaan dasar seputar RE.

Apa itu reverse engineering?

Reverse engineering adalah proses untuk membongkar sebuah software, elektronik, atau benda apapun untuk mendapatkan design atau pengetahuan dari objek tersebut.

Contoh sederhana: makanan bisa di-reverse engineer untuk mendapatkan resepnya. PCB bisa direverse engineering untuk mendapatkan file layoutnya. Software bisa direverse engineer untuk mendapatkan algoritmanya, key-nya, bug-nya dsb.

Dalam konteks software: reverse engineering bisa diartikan sebagai membaca kode dan biasanya kodenya dalam bahasa mesin. Beberapa tool memungkinkan kita bisa mengembalikan sebagian kode bahasa mesin kembali menjadi source code, tapi dalam banyak kasus kita perlu membaca kode yang dekat dengan bahasa mesin (assembly / byte code).

Kalau ingin membaca perkenalan RE dalam bentuk artikel (bukan tanya jawab seperti ini), silakan baca:

Apa tujuan RE software/hardware?

Ada banyak sekali tujuan RE, ada yang baik dan ada yang jahat, beberapa di antaranya

  • Analisis malware
  • Pentesting
  • Memahami format file (misalnya OpenOffice melakukan RE agar bisa membaca format Ms Office yang belum terdokumentasikan)
  • Memahami protokol jaringan (misalnya bagaimana membuat client WhatsApp open source)
  • Cracking software: membuat patch dan key generator
  • Mencari algoritma sebuah software
  • Mencari bug sebuah software
  • Mengekstrak key dari hardware (contoh kasus Wii dan PS3)
  • Memahami software lama agar bisa dibuat versi barunya

Beberapa artikel dan tool hanya berkonsentrasi pada bidang tertentu saja, misalnya “file format reverse engineering”, atau “protocol reverse engineering”.

Apakah saya bisa mencari pekerjaan dengan ilmu RE?

Di luar Indonesia ada banyak pekerjaan yang khusus hanya memakai ilmu RE saja, misalnya:

  1. Analisis malware
  2. Reverse engineering hardware
  3. Reverse engineering software

Tapi di Indonesia (setahu saya) saat ini biasanya pekerjaan ini masuk ke dalam scope penetration testing.

Jika tidak ingin bekerja di perusahaan Indonesia, ada banyak pekerjaan remote yang bisa dilakukan di bidang RE.

Apakah RE selalu membaca bahasa mesin?

Tidak selalu, tergantung apa yang di-RE, misalnya jika aplikasi ditulis dalam Javascript, kita perlu membaca source code Javascript yang mungkin di-minify atau di-obfuscate. Dalam bahasa apapun: meskipun source code bisa dibaca belum tentu bisa dipahami.

Jika kita membaca source code yang lengkap (apalagi dengan dokumentasi), maka biasanya itu tidak dianggap sebagai RE, tapi sekedar source code review. Tapi dalam review ini bisa saja didapati kode yang sulit dimengerti, tidak terdokumentasi, dan perlu di reverse engineer untuk mengetahui cara kerjanya.

Contoh ini program kecil dalam C yang jadi signature email saya dulu:

main(i){putchar((i-1)["Xme]i_l"]+(i++))&&(8-i)&&main(i);}

Penjelasannya bisa dibaca di tulisan saya ini:

Apa hubungannya RE dengan eksploit?

Eksploit adalah cara untuk memanfaatkan bug, biasanya eksploit ini bentuknya dalam bentuk kode program (walau ada eksploit yang bisa langsung dilakukan dengan browser atau manual dengan telnet/nc).

Untuk membuat eksploit, pertama kita perlu menemukan dulu bugnya. Cara menemukan bug dilakukan dengan RE. Selain RE murni, biasanya dilakukan fuzzing, artinya aplikasi diberi berbagai kombinasi input sampai crash, lalu digunakan RE untuk mengevaluasi apakah crash tersebut bisa dieksploitasi. Dalam kebanyakan eksploit kita perlu tahu dengan tepat layout memori. Ini bisa didapatkan dengan melakukan RE terhadap file executable.

Apa hubungannya RE dengan kriptografi?

Banyak software baik software normal maupun malware menggunakan kriptografi. Pemahaman kriptografi dibutuhkan untuk membongkar program semacam ini. Contohnya: game tertentu menggunakan enkripsi untuk melindungi file data agar tidak mudah diubah.

Ransomware (malware yang mengenkrip file korban) menggunakan kriptografi untuk mengenkrip file korban. Dari analisis RE bisa disimpulkan apakah ada bug sehingga keynya bisa didapatkan, atau memang mustahil (silakan baca tulisan saya mengenai unbreakable encryption).

Berbagai protokol juga menggunakan enkripsi (misalnya berbagai protokol chat). Pemahaman kriptografi dibutuhkan untuk memahami program yang menggunakan protokol semacam itu.

Apa hubungannya RE dengan security secara umum?

Seperti telah dijelaskan sebelumnya: RE digunakan untuk menulis eksploit dan analisis malware, dan secara umum banyak tool hacking yang ada dihasilkan dari proses RE.

Untuk bisa pentesting software tertentu (contoh: mobile app dengan custom signing dan custom SSL Certificate Check) maka dibutuhkan keahlian RE. Tanpa ini testing tidak bisa dilakukan dengan baik.

Apakah topik X termasuk dalam topik reverse engineering?

Sering kali pemula join group reverse engineering, tidak mau membaca apa itu reverse engineering, lalu bertanya tentang: SQL injection, hacking website, dsb.

Mudahnya jika tidak berhubungan dengan membaca dan memahami kode maka itu di luar topik RE.

Pertanyaan seputar: cara hacking Facebook tidak masuk topik RE. Cara membongkar/memahami APK/IPA Facebook masuk topik RE.

SQL Injection bukan topik RE, tapi jika kita memiliki kode aplikasi (baik binary ataupun source-nya) dan kita mencari tahu apakah ada bug RE dengan membaca kodenya maka itu topik RE.

Saya punya aplikasi, bagaimana caranya mulai RE aplikasinya?

Tidak ada jawaban singkat untuk ini. Harus tahu: aplikasinya untuk sistem operasi apa, versi berapa, dibuat dengan apa dsb. Ini sama dengan bertanya: bagaimana caranya mengganti hard disk di laptop, harus tahu: merk apa, model tahun berapa, dsb.

Jawaban panjangnya sudah saya tuliskan di posting terpisah.

Khusus untuk aplikasi Android saya sudah membuat artikel yang membahas lebih detail caranya.

Saya berharap di masa depan bisa membuat tulisan serupa untuk teknologi lain (atau akan saya link ke sini jika sudah ada artikel lain dalam bahas Indonesia).

Bisa minta tolong RE aplikasi X?

RE butuh waktu, kadang sangat sebentar, dan kadang sangat lama. Jawaban singkatnya: mungkin bisa kalau ada bayarannya yang cocok.

Jika ada alasan sangat bagus, mungkin bisa ditanyakan ke group reversing, mungkin ada yang punya waktu luang dan iseng.

Contoh salah alasan yang bagus yang pernah saya temui: Program Studi kami membeli software bioinformatika, tapi produsen softwarenya bangkrut, kami sudah membayar untuk software tersebut tapi sekarang tidak bisa dipakai (ada bukti pembeliannya), bisakah softwarenya dicrack supaya bisa dipakai sampai kami membeli software baru?

Contoh alasan jelek: saya mau mencurangi game supaya gak perlu beli koin. Buat apa kami menghabiskan waktu untuk orang lain yang pelit terhadap developer game?

Bagaimana cara mulai reversing hardware?

Jawabannya panjang dan sudah saya tulis di sini:

Belajar Reverse Engineering

Bagian ini berisi pertanyaan bagi yang mulai ingin belajar RE.

Apa dasar yang diperlukan untuk bisa reverse engineering?

Dasar utama yang dibutuhkan adalah kemampuan memprogram. Tool RE maksimum hanya bisa mengembalikan ke source code semula (jika beruntung), dan jika ada proteksi, maka biasanya kita berurusan dengan bahasa mesin atau bytecode.

Contoh: Jika diberikan sebuah aplikasi dalam .NET (yang tidak diproteksi) maka dengan mudah bisa kita melakukan dekompilasi kode menjadi C#. Nah jika Anda tidak bisa membaca kode C# maka berikutnya Anda akan bengong.

Sebagai analogi: sudah dijelaskan sebelumnya bahwa RE bisa juga diaplikasikan ke bidang memasak, dari makanan dicari apa resepnya. Nah bayangkan Anda tidak bisa memasak sama sekali dan tidak tahu bumbu dapur, tapi berusaha membuat resep makanan yang Anda cicipi. Mungkin untuk kasus sederhana (telur rebus, telur mata sapi) resepnya bisa didapat, tapi ketika menunya makin rumit, maka semakin mustahil untuk mengerti resepnya.

Bahasa yang perlu dipelajari adalah sesuai yang ingin Anda reverse, misalnya ingin reversing Android ya belajarlah bahasa Java/Kotlin. Untuk reversing kode dalam bahasa mesin, sebaiknya dalami bahasa C. Sampai sedalam apa belajar bahasa C? sudah saya tuliskan di sini:

Apa itu bahasa assembly?

Assembly adalah bahasa pemrograman aras rendah yang sangat dekat dengan instruksi bahasa mesin arsitektur tertentu. Artinya tidak ada satu bahasa assembly. Assembly untuk X86, MIPS, ARM, dsb semuanya berbeda. Sebuah kode assembly bisa diassemble dengan assembler untuk menjadi kode bahasa mesin.

Sebuah bahasa (misalnya C) biasanya dicompile (oleh compiler) ke assembly, lalu hasilnya diassemble menjadi bahasa mesin.

Apakah saya harus belajar assembly?

Sekali lagi ini tergantung dari apa yang ingin ada RE. Jika ingin melakukan RE kode Java saja ya tidak butuh mengenal assembly. Jika memakai kode binary pun jika bisa didekompilasi maka tidak perlu memahami assembly.

Tapi secara umum jika ingin bisa reversing apa saja maka perlu belajar assembly. Perlu dicatat juga bahwa: kode .NET/Java/Python bisa memanggil native code (kode dalam bahasa mesin), dan native code tidak selalu bisa di-decompile, jadi dalam kasus ini tetap perlu memahami assembly.

Baca juga:

Apakah saya harus belajar C?

Decompiler untuk native code saat ini hanya bisa menghasilkan kode dalam bahasa C. Jadi meskipun yang source code ditulis Pascal/Delphi/Go/bahasa lain, ketika didecompile, yang ditampilkan adalah kode dalam bahasa C, jadi pemahaman C sangat diperlukan.

Ada buku yang disarankan?

Sebaiknya baca dulu buku pemrograman sesuai dengan apa yang akan di RE. Dengan memahami bagaiman aplikasi dibuat, akan lebih mudah membongkarnya.

Berikutnya ada banyak buku RE yang spesifik untuk masing-masing tujuan. Contohnya jika ingin RE untuk malware ada buku Practical Malware Analysis (800 halaman) untuk iOS ada buku iOS App Reverse Engineering (gratis, lebih dari 400 halaman) dan masih banyak lagi buku lainnya.

Saat ini juga ada buku RE gratis (lebih dari 1000 halaman) untuk pemula dalam bahasa inggris (dan sudah diterjemahkan ke beberapa bahasa lain) di https://beginners.re/

Dari tebalnya masing-masing buku menunjukkan bahwa:Topik RE sangat luas meskipun sudah dibatas untuk satu teknologi (iOS) atau satu sub bidang spesifik saja (malware).

Ada group facebook/telegram/website yang disarankan?

Untuk yang berbahasa Indonesia

Facebook: Reversing .ID

Telegram: Reversing.ID

Saya cukup aktif di group Telegram. Mohon tidak spam di group tersebut karena anggotanya sudah sekitar 2000 orang. Satu spam saja sudah mengganggu banyak orang (dan Anda akan ditendang).

Untuk yang berbahasa inggris:

Reddit: https://www.reddit.com/r/reverseengineering

Saya ingin berlatih, apakah ada contohnya?

Ada banyak software yang jenisnya “crackme” (sesuai namanya, ini untuk latihan cracking secara legal). Reversing.ID memiliki repository crackme di: https://github.com/ReversingID

Apakah ada kompetisi/lomba yang bisa saya ikuti?

Ada banyak. Banyak CTF memiliki soal dalam kategori RE dan beberapa CTF bahkan hanya memiliki soal RE saja. Salah satu CTF yang saya sarankan adalah Flare On. Waktunya lama, jadi sempat untuk belajar. CTF lain biasanya waktunya hanya 2 hari, dan kebanyakan orang jika sudah lewat 2 hari akan menyerah, sedangkan flare on waktunya 6 minggu.

Berikut ini tulisan saya mengenai Flare On.

Bagaimana cara bertanya mengenai RE yang baik?

Sering kali ada pertanyaan yang sejenis ini yang kurang jelas:

  • saya coba X kok error ya
  • saya sudah utak-atik y tapi belum bisa

Sertakan ini ketika bertanya:

  • Platform apa yang dipakai, kadang orang berpikir: kan pakai IDA pro, pasti Windows dong (padahal IDA Pro berjalan di Windows, OS X, dan Linux)
  • Program apa yang berusaha di RE, apakah program buatan sendiri? apakah dari sebuah CTF, apakah sebuah malware (untuk kasus malware, mungkin ada proteksi khusus)
  • Apa tepatnya yang sudah dilakukan (“utak-atik”, “oprek”, dsb itu kurang jelas). Jika mengikuti tutorial tertentu, sebutkan tutorial dari mana. Bisa saja tutorialnya salah atau kurang lengkap, bisa saja sudah terlalu tua (tidak berlaku lagi), dsb

Satu hal yang mengesalkan adalah jika seseorang diminta lagi belajar dasar sesuatu, tapi merasa sudah bisa (padahal belum bisa, kalau sudah bisa tidak akan menanyakan hal itu). Jadi jika semua orang di group menjawab: pelajari dulu topik X, maka pelajarilah topik X.

Pertanyaan dasar RE

Pertanyaan dasar seputar istilah-istlah dalam RE.

Apa itu packer/protector?

Sebuah aplikasi bisa dikompres saja (di-pack), dienkripsi saja (di-encrypt/protect), atau dua-duanya. Untuk membongkar sebuah aplikasi yang dipack/protect, maka kita perlu meng-unpack/unprotect dulu baru setelah itu kita bisa mendisassemble atau mendecompile.

Ada begitu banyak jenis packer/kompressor dan protektor di dunia ini, dan bisa dicari di Internet cara membukanya (banyak juga video Youtube yang menjelaskan prosesnya). Jika ingin mencoba unpacking manual paling dasar, bisa coba packer (hanya kompressor saja) UPX yang open source.

Apa itu disassembler?

Dari kode biner (baik itu machine code ataupun bytecode) kita pasti bisa mengubah ke bentuk tekstual yang bisa dibaca manusia tapi sulit dimengerti, contohnya fungsi sederhana ini:

int double_it(int x)
{
return 2*x;
}

Dalam assembly Intel x86 bisa jadi seperti ini:

0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 89 7d fc mov %edi,-0x4(%rbp)
7: 8b 45 fc mov -0x4(%rbp),%eax
a: 01 c0 add %eax,%eax
c: 5d pop %rbp
d: c3 retq

Contoh disassembler yang bisa dipakai: radare, objdump, IDA Pro, Hopper

Disassembler menghasilkan instruksi-instruksi sangat dasar, jika kita memperhatikan gerak manusia yang sedang berjalan, maka bisa dijelaskan tiap detail gerakannya: dia mengangkat kaki kiri, dia memajukan kaki kiri, dia menurunkan kaki kiri, dia mengangkat kaki kanan, dst. Ini mungkin bagian dari sesuatu kegiatan yang lebih rumit lagi (dia berjalan ke dapur), dan bagian dari kegiatan yang lebih rumit lagi (dia memasak).

Untuk eksperimen melihat kode assembly apa yang akan dihasilkan dari kode dalam berbagai bahasa, Anda bisa menggunakan Compiler Explorer.

Bagaiamana caranya memakai IDA Pro/Hopper/Radare?

Pertanyaan ini serupa dengan bertanya:

  • Bagaimana caranya memakai Photoshop? Ada ribuan tutorial Photoshop, tergantung Anda ingin melakukan apa
  • Bagaimana cara memakai Visual Studio? memakai visual studio paling sederhana adalah: menulis program, lalu tekan run. Masalahnya adalah bagian menulis program yang bisa butuh beberapa semester sampai bisa membuat program yang baik.

Jawabannya adalah:

  • Anda perlu paham assembly, supaya tahu apa yang dibaca
  • Anda bisa membaca buku cara pemakaian IDA Pro dan Video tutorial untuk menggunakan fitur IDA Pro secara optimal

Apa itu decompiler?

Decompiler bisa mengembalikan sebagian kode biner menjadi kode teks lagi (perhatikan bahwa ini tidak selalu bisa dilakukan). Tapi belum tentu kembali 100% seperti semula, tergantung bahasa, optimasi compiler, dsb.

Dalam contoh sebelumnya (di jawaban tentang disasembler), jika disassembler menghasilkan instruksi-instruksi mengangkat kaki kiri dst, maka decompiler akan menghasilkan sesuatu yang lebih tinggi levelnya, misalnya: dia berjalan. Decompiler bisa gagal dalam banyak kasus karena tidak semua langkah bisa dijelaskan dalam level yang lebih tinggi.

Contoh program kecil ini dalam bahasa C:

https://gist.github.com/yohanes/4680db8ee6f27a9d3ce5ea5d35b967cc

Jika dikompilasi dengan mengaktifkan optimasi compiler, kemudian didekompilasi hasilnya seperti di bawah ini. Ini jauh lebih mudah dibaca daripada assembly, tapi tetap saja: jika tidak mengerti C, maka tetap akan bingung membaca kode ini.

int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // ebx@0
const char *v4; // r12@2
const char *v5; // rbp@2
size_t v6; // rax@2
const char *v7; // rdx@2
const char *v8; // rax@2
int v9; // ecx@3
const char *v10; // rdi@5
size_t v11; // rax@5
int v12; // edx@6
int result; // eax@9
if ( argc <= 2 )
{
puts("Usage: serial3 <user> <serial>");
result = 0;
}
else
{
v4 = argv[1];
v5 = argv[2];
v6 = strlen(argv[1]);
v7 = v4;
v8 = &v4[v6];
while ( v7 != v8 )
{
v9 = *v7++;
v3 += v9;
}
v10 = v5;
v11 = (size_t)&v5[strlen(v5)];
while ( v10 != (const char *)v11 )
{
v12 = *v10++;
v3 += v12;
}
if ( 100057 * (v3 + 17) % 1871 == 812 )
result = puts("correct serial");
else
result = puts("incorrect serial");
}
return result;
}

Perhatikan: nama variabel hilang, fungsi juga ada yang hilang (di-inline-kan karena hanya dipakai sekali). Kode tidak lagi menjadi jelas bahwa hanya sekedar menjumlahkan karakter.

Sebagai perbandingan, berikut ini file executable biner dalam bentuk heksadesimal jika program itu dicompile untuk Linux 64 bit, dan berikut ini disassemblynya. Sangat sulit dibaca (terutama bagi pemula).

Berikut ini beberapa software decompiler yang ada saat ini:

  • native code: IDA Pro, Hopper, Snowman, RetDec, Binary Ninja
  • Java: JD-GUI, CFR
  • .NET: ilspy, dotPeek, dsb
  • Python: uncompyle6

Apakah hasil RE bisa dikompilasi lagi?

Jawaban singkatnya: kadang ya, kadang tidak. Program sederhana biasanya bisa didekompilasi, bisa diubah, lalu dicompile lagi. Program yang rumit sulit dicompile lagi. Tapi secara umum: jika sudah mengetahui apa yang dilakukan oleh sebuah program, kita bisa membuat tiruan program tersebut di bahasa lain.

Contoh: setelah dekompilasi aplikasi Android, didapati bahwa aplikasi tersebut hanya mempost data ke sebuah URL dengan parameter tertentu. Dengan mengetahui apa URL dan parameternya kita bisa membuat program serupa di Python atau bahasa lain.

Apa itu debugger?

Debugger adalah program untuk menelusuri jalannya program lain. Kita bisa menjalankan sampai fungsi tertentu, atau alamat memori tertentu, melihat isi variabel, isi memori, dsb.

Cara terbaik belajar debugger adalah belajar dulu memprogram karena debugging merupakan salah satu tool untuk menemukan bug dalam program.

Contoh debugger native : gdb (cross platform), x64dbg (windows), ollydbg (windows), windbg (windows).

Apakah ada tool lain selain debugger?

Ada banyak tool untuk tujuan spesifik. Tapi sebelum memakai tool-tool ini diperlukan dulu dasar yang baik mengenai sistem operasi, pemrograman dan juga hal-hal low level lain. Jadi tool-tool ini tidak bisa dijelaskan dengan singkat.

Beberapa contoh tool misalnya: strace (untuk tracing system call di Linux), ltrace (untuk tracing library call di Linux), dtruss (software sejenis strace/ltrace untukl OS X, BSD).

Ada juga binary instrumentation tool yang memungkinkan kita membuat program untuk menelusuri program lain. Contohnya: Intel PIN dan DynamoRIO. Di level yang lebih tinggi ada Frida.

Untuk kasus tertentu kita bisa menggunakan symbolic execution. Contohnya dengan menggunakan angr. Di kasus lain kita bisa mengguankan SMT solver (misalnya Z3).

Apakah wajib mengetahui tools selain debugger? tidak wajib, tapi jika tahu tool yang tepat, sebuah pekerjaan RE yang tadinya butuh berjam-jam bisa jadi hanya butuh beberapa menit.

Apa itu patching?

Arti harfiah patching adalah menambal. Dalam konteks RE, artinya mengubah byte-byte di dalam program. Misalnya mengubah suatu instruksi dari “if true” menjadi “if false”. Perubahan ini bisa dilakukan manual (dengan hex editor), atau dijadikan program yang akan mengedit program lain.

Perubahan tidak selalu harus di kode program, bisa juga di bagian data, misalnya mengubah string tertentu.

Patch adalah perubahan yang perlu dilakukan (misalnya ubah 0x1 jadi 0x0 di offset 100), dan patching adalah proses melakukan perubahan itu.

Apa gunanya mem-patch sebuah program?

Inti patching adalah mengubah fungsionalitas program, jadi kegunaannya tidak terbatas. Contoh:

  1. bypass pengecekan serial number
  2. bypass pengecekan versi sistem operasi
  3. perbaikan program, misalnya tadinya ada limit 100 direktori dan ternyata crash jika ada 101 direktori
  4. menambah fitur program

Ketika melakukan reverse engineering, sering kali ada proteksi misalnya “antidebug”, untuk membypass itu program kadang perlu dipatch.

Apa itu obfuscator?

Obfuscator adalah tool untuk membuat kode program menjadi sulit dibaca. Contoh sederhana adalah dengan mengganti semua nama variabel, misalnya jadi a, aa, ab, ac, dst. Contoh lain adalah dengan menggunakan goto, mengubah loop for menjadi while, dsb. Kode yang sulit dibaca ini dikatakan sudah obfuscated.

Perkenalan Code Obfuscation bisa dibaca di artikel saya.

Bagaimana Mengamankan Aplikasi Saya?

Pertanyaan ini biasanya diajukan oleh programmer yang tidak ingin aplikasinya mudah dibongkar orang lain.

Bagaimana agar aplikasi saya tidak bisa di RE?

Jawaban singkatnya: aplikasi yang bisa berjalan akan selalu bisa di-RE hanya masalah: apakah mudah atau tidak. Yang bisa dilakukan hanyalah mempersulit proses reverse engineering.

Bagaimana caranya mempersulit RE aplikasi saya?

Ini sangat tergantung pada bahasa dan tool yang Anda gunakan. Di beberapa platform ada tool gratis untuk mengobfuscate aplikasi (misalnya proguard untuk Android) dan ada juga berbagai solusi komersial. Dengan solusi komersial, Anda tidak perlu memahami RE dan cukup memakai solusi dari pihak ketiga.

Jika ingin jawaban spesifik, ada banyak artikel di Internet untuk melindungi dari RE. Contohnya ini :https://medium.com/@Andromeda./basics-of-anti-reverse-engineering-9173826f1914

Reverse Engineering Malware

Saya punya malware, bagaimana cara RE-nya?

Malware hanyalah sebuah aplikasi. Bedanya aplikasi tersebut memiliki karakteristik jahat, misalnya menghapus file, mengenkrip file, dsb. Dan biasanya malware memiliki proteksi lebih baik dari aplikasi biasa (anti debug, anti disassembly, dsb).

Jika sudah bisa membongkar file biasa (non malware) maka membongkar malware juga bisa. Beberapa perbedaan dalam membongkar malware dibandingkan program biasa:

  • Harus hati-hati, misalnya: memakai virtual machine yang tidak terhubung ke jaringan, berhati-hati ketika menyalin file, dsb.
  • Malware memiliki berbagai proteksi, misalnya akan mendeteksi debugger, mendeteksi apakah ada dalam VM, mendeteksi apakah jaringan aktif, memakai anti debug, anti disassembly, dsb
  • Malware kadang berisi exploit untuk memanfaatkan kelemahan sistem operasi
  • Malware sering memakai teknik yang jarang dipakai aplikasi biasa, misalnya code injection

Biasanya yang dilakukan ketika membongkar malware adalah untuk:

  • mencari tahu algoritma yang dipakai, misalnya algoritma domain generation algorithm (DGA)
  • mencari tahu apakah ada kill switch (contoh kasus wannacry)
  • mencari tahu apakah ada kelemahan dalam enkripsi (berbagai ransomware)
  • mencari tahu aktivitas apa yang dilakukan oleh malware

Secara umum: belajarlah dulu RE file biasa, lalu nanti RE malware akan lebih mudah.

Berikut ini contoh analisis malware yang saya lakukan di tahun 2006 (Virus Brontok): https://www.compactbyte.com/brontok/

Di mana mendapatkan contoh malware?

Ada beberapa situs di Internet yang menyediakan contoh malware. Jika malware sangat populer (contoh wannacry), ini akan mudah dicari, dan jika kurang populer maka sulit dicari.

Ada beberapa situs yang menyediakan membership untuk malware sample.

Siapa sih Anda kok sok ahli dalam bidang RE?

Saya bukan expert RE. Pekerjaan full time saya adalah programmer, tapi saya sudah melakukan cukup banyak RE dan juga mengikuti beberapa kompetisi yang ada. Ada banyak pekerjaan RE saya yang tidak bisa ditampilkan di sini karena NDA, jadi saya tampilkan saja kemampuan saya yang umum dan sudah dipublish.

Saya tidak menganggap diri saya sangat ahli. Dan saya menantang yang lain yang merasa lebih jago dari saya untuk lebih banyak menulis mengenai ilmu RE dalam bahasa Indonesia. Saya berusaha untuk tidak pelit ilmu, dan berbagai writeup, tutorial, dsb saya tuliskan di situs ini dan di github saya.

Saat ini saya tidak punya buku atau pelatihan yang dikomersialkan dari topik RE . Hanya pentest, request RE tertentu dan kadang bug hunting yang menghasilkan uang dari bidang ini (sekali lagi: pekerjaan full time saya adalah programmer).

Saya sudah menyelesaikan 5 kali kompetisi Flare-On. Menurut pendapat saya siapapun yang sudah bisa menyelesaikan semua soal flare on sudah memiliki ilmu RE yang cukup baik karena scopenya cukup luas, mulai dari reversing aplikasi/malware Windows, Linux, bahkan Arduino. Saya juga sudah masuk top 10 dalam reversing hardware RHME 2 dan dan dari writeup-nya mendapatkan pelatihan gratis di Belanda. Saya juga menang challenge BevX (tiket pesawat gratis dan akomodasi ke konferensi Hong Kong)

Saya juga pernah membahas exploit towelroot (dan exploit versi saya dibeli perusahaan NowSecure).

Saya juga sudah menemukan beberapa bug, baik melalui RE maupun tidak, beberapa di antaranya:

Pertanyaan saya belum terjawab

Silakan kontak saya dengan facebook message ke page Yohanes & Risna atau tinggalkan pesan di komentar.

4 thoughts on “Tanya Jawab Reverse Engineering”

    1. Bisakah diperjelas:

      – Game apa?
      – untuk platform apa? PC, Android, iOS, console?
      – Game multiplayer atau single player?
      – Hacknya ingin seperti apa? sekedar menambah coin, mengubah game (modding)?

  1. Reverse engineering itu bagian “membaca kode”, sebelum membuat cheatnya biasanya perlu membaca kodenya (perlu reverse engineering), tapi dalam kasus tertentu (game yang mengakses data online) kadang nggak perlu membaca kode, cuma intercept request aja dah bisa bikin cheatnya.

Tinggalkan Balasan

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.