• Tidak ada hasil yang ditemukan

PERBANDINGAN METODE OBFUSCATION PADA OBFUSCATOR UNTUK BAHASA PEMROGRAMAN JAVA TESIS

N/A
N/A
Protected

Academic year: 2021

Membagikan "PERBANDINGAN METODE OBFUSCATION PADA OBFUSCATOR UNTUK BAHASA PEMROGRAMAN JAVA TESIS"

Copied!
12
0
0

Teks penuh

(1)

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

(2)

PERBANDINGAN METODE OBFUSCATION

PADA OBFUSCATOR UNTUK BAHASA PEMROGRAMAN

JAVA

Oleh :

Yudhi Widyatama

Menyetujui

Pembimbing,

(3)

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

(4)

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

(5)

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.

(6)
(7)

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

(8)

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

(9)

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

(10)

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

(11)

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

(12)

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

Referensi

Dokumen terkait

Java dapat diigunakan untuk membuat sesuatu program sebagaimamna Anda membuatnya dengan bahasa seperti Pascal atau C++2. Yang lebih manarik, java juga mendukung

Penulisan tugas akhir ini bertujuan untuk membuat suatu program bantu untuk mempermudah dalam perancangan sebuah fondasi telapak dengan menggunakan bahasa pemrograman Java..

Implementasi Bahasa Pemrograman Java Untuk Pengontrolan Aset Kantor Pada Dinas Kebudayaan Dan Pariwisata Provinsi Sumatera Barat Debi Setiawan DosenTeknologi Informatika STMIK-AMIK

Berdasarkan uraian dan hasil analisa yang telah dilakukan selama pengembangan Aplikasi Deteksi Kemiripan Source Code Pada Bahasa Pemrograman Java Menggunakan Metode

LEGO MINDSTORM NXT merupakan sebuah robot kit yang dapat diprogram dengan berbagai bahasa pemrograman seperti C dan Java setelah terlebih dahulu mengganti firmware lego

E-learning yang bertujuan untuk membantu mempelajari bahasa pemrograman Java tentu akan sangat berguna terutama kepada mahasiswa yang ingin belajar pemrograman

Berdasarkan uraian dan hasil analisa yang telah dilakukan selama pengembangan Aplikasi Deteksi Kemiripan Source Code Pada Bahasa Pemrograman Java Menggunakan Metode

LEGO MINDSTORM NXT merupakan sebuah robot kit yang dapat diprogram dengan berbagai bahasa pemrograman seperti C dan Java setelah terlebih dahulu mengganti firmware lego