Ini baru kepikiran kemarin… sebenarnya selama ini saya tidak begitu care tentang .NET Obfuscation dan teknik anti-reverse-engineer lainnya… well, karena sebelum ini mindset-nya begini:
- Area project masih Windows Forms, jadi DLL akan selalu terjaga di satu client. Urusan kalo nanti DLL pindah ke instansi lain, itu udah di-cover dengan perjanjian software: Assemblies yang dihasilkan hanya boleh digunakan untuk kepentingan client dan shall remain di client’s site.
- Source code program diberikan, jadi buat apa reverse-engineer assembly pake .NET Reflector? Buang-buang waktu saja…
- Jika source code program diberikan, sudah pasti bayarannya beda dengan tanpa source code. Kalo ada yang jual software (yang ribuan baris kode yah, bukan yang kecil-kecil) dan menyertakan source code dibawah 70 juta, dia rugi besar (baca ini). Jadi kalo pun source code bocor ke pihak non-client, silakan saja bikin program tandingan. Butuh waktu untuk memahami kode orang lain, apalagi jika jumlahnya ribuan baris… daripada hire 1 developer freshgrad buat memahami source code kemudian me-modify-nya, mendingan langsung aja bayar ke saya untuk dibikinin versi custom-nya :)
Tapi ketika saya terjun ke Silverlight development, saya jadi mikir-mikir lagi karena:
- Dengan Silverlight, .NET Assemblies Anda bisa diunduh oleh siapa pun (assuming buat konsumsi public, which is memang typical-nya saat ini bikin aplikasi Silverlight buat dinikmati public dan tanpa authentication ke website).
- File .XAP tinggal di-unzip kemudian DLL-nya bisa dibaca pake .NET Reflector.
- Semua resources (.xaml, .png, dll) bisa di-extract pake .NET Reflector juga.
- Biasanya aplikasi Silverlight sifatnya kecil (tidak mungkin ada 30MB Silverlight), jadi untuk memahami source code hasil reverse-engineer bisa memakan waktu lebih singkat… bahkan mungkin cuman 1 hari.
- Dalam kasus saya, project Silverlight-nya bersifat exclusive selama “x” bulan… jika Silverlight saya tidak di-proteksi, maka akan muncul clones-from-copy-paste dalam waktu 1-2 minggu (karena mudahnya melakukan reverse engineer) daripada membuat clone-from-scratch dalam waktu 2-3 bulan.
Ini saya ambil contoh, Anda bisa mengunduh .XAP Pemilu.TV langsung dari sini: http://pemilu.tv/ClientBin/PemiluTV_JawaBali.xap
Kemudian lakukan Unzip:
Kemudian extract PemiluTV_JawaBali.dll dan buka dengan .NET Reflector.
Anda bisa lihat source code-nya:
Maupun extract .xaml-nya:
Enter {smartassembly} , sebuah produk yang menjanjikan fitur berikut: http://www.smartassembly.com/product/features.aspx
Baiknya kita lihat bisa ngapain aja nih si SmartAssembly:
Merging Dependencies:
Pruning:
Obfuscation:
Control Flow Obfuscation (bye-bye readable if/then/else/switch):
Runtime Strings Decoding:
Crash Favorite Decompilers (and ILDASM too):
Memory and Sealed Class Optimization:
Strip Debugging Info:
Strong Naming:
Setelah pencet tombol Build, hasilnya seperti berikut (yang nomor 2 adalah yg di-optimize & obfuscate dengan SmartAssembly):
Lumayan lebih kecil 1 KB :)
Mari kita lihat reaksi-nya dengan .NET Reflector:
Kasian deh nggak bisa dibuka… tapi pastinya masih bisa dibuka dengan ILDASM donk:
Monggo aja mas… ini cara reverse-engineer nya harus dengan bikin sebuah table, dimana simbol “|” diganti dengan nama method yang sesuai.
Kemudian tiap kali baca method lainnya, harus was-was baca table tadi karena pasti akan muncul banyak simbol aneh di method call:
At this point, sudahlah bung… ngapain buang-buang waktu mencoba mengerti source code ini… lebih baik traktir saya makan steak ntar saya kasih hint cara bikinnya… atau bayarin biaya hidup saya 3 bulan ntar tiba-tiba nyampe rumah di inbox ada yg ngirim source code unobfuscated-nya :)
{smartassembly} memang cukup mahal, tapi bagi perusahaanISV besar sepertinya affordable… untuk para MVP, biasa ada versi gratis single-user-nya, japri ane ntar ane kasih tahu contact person-nya..
Happy Protecting your Intellectual Property…