PERBANDINGAN METODE OBFUSCATION
PADA OBFUSCATOR UNTUK BAHASA PEMROGRAMAN
JAVA
TESIS
Karya tulis sebagai salah satu syarat
untuk memperoleh gelar Magister dari
Institut Teknologi Bandung
Oleh
YUDHI WIDYATAMA
NIM : 23204014
Program Studi Teknologi Informasi
INSTITUT TEKNOLOGI BANDUNG
2007
PERBANDINGAN METODE OBFUSCATION
PADA OBFUSCATOR UNTUK BAHASA PEMROGRAMAN
JAVA
Oleh :
Yudhi Widyatama
Menyetujui
Pembimbing,
ABSTRAK
PERBANDINGAN METODE OBFUSCATION
PADA OBFUSCATOR UNTUK BAHASA PEMROGRAMAN
JAVA
Oleh
YUDHI WIDYATAMA
NIM : 23204014
Program Studi Teknik Elektro
Obfuscation adalah salah satu cara untuk melindungi properti intelektual yang berada di dalam program yang ditulis dengan bahasa Java. Banyaknya informasi yang disertakan di dalam file .class membuat dekompilasi mudah dilakukan pada program Java. Oleh karena itu muncullah bermacam-macam obfuscator, yang mencegah atau mempersulit dilakukannya reverse engineer yang diawali dekompilasi. Dalam tesis ini dilakukan studi perbandingan antara enam buah obfuscator Java, di antaranya tiga bersifat open-source dan tiga lainnya komersial. Dalam pelaksanaan riset, dibuat beberapa transformasi balik yang dapat mempermudah proses reverse engineering, sehingga dari hasil obfuscation itu dapat dikeluarkan source code Java yang dapat di-dekompilasi.
Transformasi balik meliputi pemetaan ulang nama, penghapus enkripsi string, penghapus exception handling palsu, serta penghapus predikat transparan. Transformasi balik menghilangkan efek transformasi obfuscation yang tidak resilient, sehingga analisa berikutnya hanya dipengaruhi oleh transformasi obfuscation yang resilient.
Perbandingan dilakukan pada beberapa ukuran, yaitu besar program, banyaknya kondisional, banyaknya variabel lokal, dan banyaknya blok terlabel (labeled block) yang ditemukan pada source code hasil dekompilasi. Pada tesis ini ditunjukkan keunggulan dan kekurangan pada beberapa obfuscator yang dibandingkan.
Kata kunci: dekompilasi, metrik obfuscation, JVM, Java, obfuscator, obfuscation, transformasi obfuscation, transformasi balik
ABSTRACT
COMPARISON OF OBFUSCATION METHODS IN JAVA
OBFUSCATORS
By
YUDHI WIDYATAMA
NIM : 23204014
Electrical Engineering Study Program
For programs written in the Java programming language, obfuscation can be used to protect the intellectual property contained in the program. There is a large amount of information given in the Java .class file, making decompilation easy to do. There is many obfuscators that inhibits decompilation or make the resulting source code difficult to understand. This thesis compares six Java obfuscators, three of which are open source, and the other three are commercial.
Reverse transformations are performed to remove low-resilience obfuscation transformations, then decompilation is done to extract source code. Reverse transformations performed include name remapping, string encryption removal, fake exception handling removal, and transparent predicate removal.
Comparisons are done by measuring complexity aspects of the source code, that is : program size, number of conditionals, total conditional complexity, number of local variables, number of abrupt flow statements, number of labeled blocks. This thesis shows the advantage and disadvantage of the compared obfuscators.
Keywords: decompilation, metrics, JVM, Java, obfuscator, obfuscation, obfuscating transformation, reverse transformation
PEDOMAN PENGGUNAAN TESIS
Tesis S2 yang tidak dipublikasikan terdaftar dan tersedia di Perpustakaan Institut Teknologi Bandung, dan terbuka untuk umum dengan ketentuan bahwa hak cipta ada pada pengarang dengan mengikuti aturan HaKI yang berlaku di Institut Teknologi Bandung. Referensi kepustakaan diperkenankan dicatat, tetapi pengutipan atau peringkasan hanya dapat dilakukan seizin pengarang dan harus disertai dengan kebiasaan ilmiah untuk menyebutkan sumbernya.
Memperbanyak atau menerbitkan sebagian atau seluruh tesis haruslah seizin Direktur Program Pascasarjana, Institut Teknologi Bandung.
KATA PENGANTAR
Puji syukur kehadirat Allah SWT, yang telah melimpahkan rahmad-Nya sehingga penulis dapat menyelesaikan tesis beserta laporannnya. Laporan tesis tersebut berjudul “Studi Perbandingan Metode Obfuscation pada obfuscator untuk bahasa pemrograman Java” , yang merupakan salah satu syarat untuk memperoleh gelar magister dari Institut Teknologi Bandung.
Selama melaksanakan tesis ini, penulis mendapat bantuan dan dukungan dari berbagai pihak. Untuk itu, penulis ingin mengucapkan terima kasih kepada :
1. Dr. Ir. Bambang Riyanto selaku pembimbing, yang telah memberikan
bimbingan dan semangat dalam menyelesaikan tesis ini;
2. istri dan anak tercinta yang membantu dalam penulisan laporan tesis,
memberikan syaran, dorongan dan semangat, serta pengertian dan do’anya.
3. bapak, mama, dan adik-adik tercinta, beserta seluruh keluarga yang
senantiasa memberikan semangat dan do’anya;
4. seluruh staf dan karyawan PT Probindo Artika Jaya (Revtech), yang telah
memberikan bantuannya;
5. dan semua pihak yang membantu, yang tidak dapat penulis sebutkan satu
persatu.
Penulis menyadari bahwa tesis ini banyak terdapat kekurangan, untuk itu kritik dan saran sangat diharapkan. Akhir kata, semoga tesis ini dapat bermanfaat bagi para pembacanya.
Bandung, Juni 2007 Penulis
DAFTAR ISI
ABSTRAK...i
ABSTRACT...ii
PEDOMAN PENGGUNAAN TESIS ...v
DAFTAR ISI... viii
DAFTAR GAMBAR ...x DAFTAR TABEL...xi DAFTAR LAMPIRAN...xii BAB 1 PENDAHULUAN ...1 1.1 Latar Belakang ...1 1.2 Rumusan masalah ...3 1.3 Lingkup Permasalahan...4 1.4 Metodologi...5 1.5 Kontribusi ...6
BAB 2 DASAR TEORI ...7
2.1 Klasifikasi Obfuscating Transformations ...8
2.2 Daftar Obfuscating Transformations ...9
2.2.1 Pengacakan nama...9
2.2.2 Enkripsi String ...11
2.2.3 Transformasi ekspresi aritmetik...13
2.2.4 Menyimpan variabel lokal dalam bitfield ...13
2.2.5 Pengubahan urutan blok statement ...14
2.2.6 Menyimpan konstanta sebagai field...14
2.2.7 Menambahkan kode mati atau tidak relevan (Transformasi penambahan branch)...14
2.2.8 Konversi Flow Graph dari Reducible menjadi Non-Reducible ...15
2.2.9 Menyamarkan panggilan ke library...15
BAB 3 METODOLOGI RISET...16
3.1 Transformasi Pembalik ...16
3.1.2 Menghilangkan Exception Handling palsu...19
3.1.3 Menghilangkan pemanggilan string encryption method...21
3.1.4 Menghilangkan predikat transparan...22
3.2 Reverse Engineering ...23
3.3 Metrik Obfuscation ...24
3.4 Prosedur perbandingan...26
3.5 Pekerjaan lain yang terkait dengan pengukuran hasil obfuscation ...27
BAB 4 ANALISIS ...28
4.1 Test case...28
4.2 JBCO (Java ByteCode Obfuscator) ...28
4.2.1 Pengukuran metrik obfuscation ...35
4.3 Zelix KlassMaster 5.01 (Eval) ...38
4.3.1 Enkripsi String ...38
4.3.2 Control Flow Obfuscation ...42
4.3.3 Pengukuran metrik obfuscation ...43
4.4 Dash O Pro 3.3 (Eval)...45
4.4.1 Enkripsi String ...45
4.4.2 Control Flow Obfuscation ...46
4.4.3 Pengukuran metrik obfuscation ...50
4.5 SmokeScreen 3.5 (Eval)...52
4.5.1 Enkripsi String ...53
4.5.2 Control Flow Obfuscation ...54
4.5.3 Pengukuran metrik obfuscation ...56
4.6 ProGuard 4.0 ...57
4.6.1 Pengukuran metrik obfuscation ...60
4.7 yGuard 2.2...61
BAB 5 KESIMPULAN DAN SARAN ...63
5.1 Perbandingan dan Kesimpulan...63
5.2 Saran ...65
DAFTAR GAMBAR
Gb. 2.1 Taksonomi obfuscation menurut Collberg, Thomborson, dan Low [7] . ...9
Gb. 2.2 Program asli dan setelah string encryption oleh ZKM...12
Gb. 3.1 Pelaksanaan pengukuran metrik obfuscation ...16
Gb. 3.2 Class Diagram untuk transformasi pemetaan ulang nama kelas dan field ...18
Gb. 3.3 Class Diagram dan Flowchart rutin penghilang exception handler palsu ...20
Gb. 3.4 Class Diagram transformasi penghilang enkripsi String...22
Gb. 4.1 Control Flow Graph Obfuscation Bytecode ...32
Gb. 4.2 Control Flow Graph rutin string decryption pada Klassmaster ...41
Gb. 1.1 Perubahan urutan blok kode yang dilakukan DashO ...47
Gb. 4.4 Hasil dekompilasi Dava pada switch yang telah diacak urutan bloknya ...48
Gb. 4.5 Control Flow Graph rutin isInBounds setelah mengalami flow obfuscation oleh DashoPro ...49
Gb. 4.6 Control Flow Graph rutin asli isInBounds ...49
Gb. 4.7 CFG pada WormLink.decreaseLength dengan perubahan alir...55
Gb. 4.8 Hasil diassembly sebuah kelas dalam Jasmin. ...58
DAFTAR TABEL
Tabel 2.1 Contoh name obfuscation ...9
Tabel 4.1 Metrik setelah obfuscation untuk JBCO:...36
Tabel 4.2 Metrik setelah obfuscation untuk Zelix KlassMaster ...44
Tabel 4.3 Metrik setelah obfuscation untuk DashO Pro ...50
Tabel 4.4 Metrik setelah obfuscation untuk Smokescreen ...56
Tabel 4.5 Metrik setelah obfuscation untuk ProGuard ...60
Tabel 4.6 Metrik setelah obfuscation untuk yGuard...62
DAFTAR LAMPIRAN
Lampiran A : Patches untuk Dava... L-2 A.1. Dava Patch 1 – membypass AbruptEdge jika kedua klausa if bukan
merupakan SETStatementSequenceNode... L-2 A.2. Dava Patch 2 – memaksa Dava mengeluarkan output jika synchronized block tidak bisa ditentukan ... L-3 A.3. Dava Patch 3 – Casting boolean ke integer dan sebaliknya ... L-5 Lampiran B. Kelemahan pada JBCO... L-6 Lampiran C. Kode Proof-of-concept ... L-7 C.1. Field rename & Class rename transformation... L-7 Lampiran D. Hasil pengukuran metrik obfuscation untuk tiap test case ... L-27 D.1. Worms... L-27 D.2. Crackme ... L-27 D.3. Logicexpr ... L-27 D.4. Netapp ... L-27 D.5. Ooapp ... L-28