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:

Reverse Engineering

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 softwre

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:

Signature email jaman kuliah

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 enginerring, 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.

Pengantar Reverse Engineering

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

Reverse Engineering APK

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:

Hacking dan Reverse engineering hardware

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 buat kode dalam 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. Untuk reversing kode dalam bahasa mesin, sebaiknya dalami bahasa C. Sampai sedalam apa belajar bahasa C? sudah saya tuliskan di sini:

Mendalami Bahasa C

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 kode (kode dalam bahasa mesin), dan native code tidak selalu bisa di-decompile, jadi dalam kasus ini tetap perlu memahami assembly?

Ada buku yang disarankan?

Sebaiknya baca dulu buku pemrograman sesuai dengan apa yang akan di RE. 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.

Tantangan Flare On

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).

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, 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:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

static int is_serial_valid(const char *user, const char *serial)
{    
    int i, total;
    for (i=0; i < strlen(user); i++) {
        total += user[i];
    }
    for (i=0; i < strlen(serial); i++) {
        total += serial[i];
    }
    return (((total + 17)*100057)%1871)==812;
}

int main(int argc, char *argv[])
{
    char *user;
    char *serial;
    if (argc<3) {
        printf("Usage: serial3 <user> <serial>\n");
        return 0;
    }
    user = argv[1];
    serial = argv[2];
    
    if (is_serial_valid(user, serial)) {
        printf("correct serial\n");
    } else {
        printf("incorrect serial\n");
    }
}

Jika dikompilasi dengan mengatifkan 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; // [email protected]
  const char *v4; // [email protected]
  const char *v5; // [email protected]
  size_t v6; // [email protected]
  const char *v7; // [email protected]
  const char *v8; // [email protected]
  int v9; // [email protected]
  const char *v10; // [email protected]
  size_t v11; // [email protected]
  int v12; // [email protected]
  int result; // [email protected]

  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).

Contoh decompiler (native code): IDA Pro, Hopper, Snowman, RetDec, dsb

Contoh decompiler Java: JD-GUI, CFR, dsb

Contoh decompiler .NET: ilspy, dotPeek, dsb

Contoh decompiler 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.

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:

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):

http://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:

https://github.com/yohanes/write-ups

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 3 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 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).

Exploiting the Futex Bug and uncovering Towelroot

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

Bug Mandiri e-Money Isi Ulang (November 2015)

Mastercard Internet Gateway Service: Hashing Design Flaw

Pertanyaan saya belum terjawab

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

2 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)?

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.