Selasa, 19 Februari 2008

Programimg: Code Obfuscation (1)

Apakah kalian pernah mendengar istilah obfuscator?

Obfuscate adalah suatu istilah yang artinya "meyulitkan". Obfucated code adalah suatu code yang sangat susah untuk dibaca dan dimengerti. Code dalam bahasa indonesia diartikan sebagai lirik atau senarai program. Untuk lebih memudahkan pembacaan dalam artikel ini maka saya akan selalu menggunakan istilah "code".

Kita sebagai programmer menulis program dalam code yang kemudian nantinya akan di compile sehingga dapat dieksekusi oleh sistem operasi kita. Jaman dahulu (bahela) rata-rata setiap bahasa pemrograman, seperti C dan pascal, mengkompilasi code menjadi bahasa mesin (assembly). Tapi sekarang bahasa pemrograman yang paling banyak digunakan seperti java dan .NET mengkompilasi code menjadi Intermediate Language. Intermediate Language tidak dieksekusi langsung oleh Sistem Operasi, tetapi terlebih dahulu diterjemahkan (oleh interpreter atau virtual machine), baru kemudian di eksekusi. Intermediate language ini lebih gampang untuk di recompile atau reverse engineering. Hal ini menyebabkan program yang dibuat menggunakan Bahasa java dan .NET dapat dengan mudah diketahui code sumbernya (source codenya). Hal ini tentu tidak diinginkan oleh perusahaan-perusahaan comercial dan para profesional.

Banyak cara yang dapat dilakukan agar code kita tidak mudah untuk diketahui. Berikut adalah beberapa cara:
  1. Program client-server misalnya. Karena logic-logic yang penting tetap berada di server, tipe program seperti ini lebih aman dari reverse engineer. Namun ini juga menimbulkan masalah baru seperti perfoma yang bergantung pada bandwith.
  2. Melakukan enkripsi pada code. Tetapi jika proses enkripsi ini tidak dilakukan pada level hardware, seorang hacker yang pintar, tetap masih bisa mengetahui kode sumber kita. Selain itu enkripsi pada level hardware membuat aplikasi kita menjadi tidak portable.
  3. Menggunakan Native code. Bahasa Java memungkinkan kita untuk menggunakan Native code. Dengan cara ini dekompilasi akan menjadi lebih susah. Namun ini juga dapat mengurangi nilai portabilitas dari bahasa java.
  4. Cara lain yang juga sekaligus menjadi topik pembicaraan kita kailini adalah dengan menggunakan Obfuscator. Jika memang reverse engineering tidak dapat terelakkan, maka paling tidak kita dapat mempersulit code kita untuk dibaca (obfuscated).
Obfuscation bisa dilakukan dalam berbagai level, seperti: Level Data, Level Layout dan Level Control. Penjelasan lebih rinci mengenai hal-hal diatas akan dijelaskan pada edisi berikutnya.

Tidak ada komentar: