On Staying Competitive – Protecting your Silverlight outputs (and other .NET Assemblies) from Copy-Pasters

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:

  1. 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.
     
  2. Source code program diberikan, jadi buat apa reverse-engineer assembly pake .NET Reflector? Buang-buang waktu saja…
     
  3. 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:

  1. 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).
     
  2. File .XAP tinggal di-unzip kemudian DLL-nya bisa dibaca pake .NET Reflector.
     
  3. Semua resources (.xaml, .png, dll) bisa di-extract pake .NET Reflector juga.
     
  4. 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.
     
  5. 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:

ScreenShot014

Kemudian extract PemiluTV_JawaBali.dll dan buka dengan .NET Reflector.

Anda bisa lihat source code-nya:

ScreenShot015

Maupun extract .xaml-nya:

ScreenShot016

Enter {smartassembly} , sebuah produk yang menjanjikan fitur berikut: http://www.smartassembly.com/product/features.aspx

Baiknya kita lihat bisa ngapain aja nih si SmartAssembly:

ScreenShot017

Merging Dependencies:

ScreenShot020

Pruning:

ScreenShot021

Obfuscation:

ScreenShot023

Control Flow Obfuscation (bye-bye readable if/then/else/switch):

ScreenShot024

Runtime Strings Decoding:

ScreenShot025

Crash Favorite Decompilers (and ILDASM too):

ScreenShot026

Memory and Sealed Class Optimization:

ScreenShot027

Strip Debugging Info:

ScreenShot028

Strong Naming:

ScreenShot029

Setelah pencet tombol Build, hasilnya seperti berikut (yang nomor 2 adalah yg di-optimize & obfuscate dengan SmartAssembly):

ScreenShot030

Lumayan lebih kecil 1 KB :)

Mari kita lihat reaksi-nya dengan .NET Reflector:

ScreenShot031

Kasian deh nggak bisa dibuka… tapi pastinya masih bisa dibuka dengan ILDASM donk:

ScreenShot032

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:

ScreenShot033

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…

Share this post: | | | |
Published Saturday, May 23, 2009 5:23 PM by zeddy

Comments

# re: On Staying Competitive – Protecting your Silverlight outputs (and other .NET Assemblies) from Copy-Pasters

Monday, May 25, 2009 6:29 AM by ridi

Bang....CPnya di japri ya ke email Ane, Sukron :)

Powered by Community Server (Commercial Edition), by Telligent Systems