Makalah Seminar Kerja Praktek
METODE ENKRIPSI DAN DEKRIPSI BINER PADA BAHASA PEMROGAMAN PHP Nur Arifin Akbar1, Kodrat Iman Satoto 2 Laboratorium Komputer, Teknik Elektro, Fakultas Teknik, Universitas Diponegoro1 1
Mahasiswa dan 2Dosen Jurusan Teknik Elektro,
System Engineering Research Group, Universitas Diponegoro2
[email protected],
[email protected] 2
Abstrak : PHP adalah bahasa pemrograman yang sering digunakan pada web development Meskipun PHP merupakan bahasa pemrograman opensource, namun tidak semua developer mau memberikan source code kepada client dengan alasan security, privacy, dsb. Oleh karena itu beberapa perusahaan telah membuat program untuk enkripsi source code dari PHP tersebut. Meskipun tidak sepenuhnya aman tetapi tetap saja ada usaha untuk reverse engineering agar source code yang di-protect tersebut untuk mengembalikan ke source code aslinya Kata Kunci : Reverse engineering, source code, PHP
PENDAHULUAN Perkembangan teknologi informasi dan komunikasi sekarang ini sudah tidak dalam hitungan tahun, akan tetapi sudah dalam hitungan bulan. Bahkan dapat dikatakan bahwa setiap hari selalu ada sesuatu hal baru dari teknologi informasi dan komunikasi. Hampir di semua sektor kehidupan manusia, selalu saja ada pemanfaatan dari teknologi informasi dan komuniasi. Sehingga teknologi tersebut menjadi sebuah kebutuhan yang penting bagi kelangsungan hidup manusia. Pada saat ini hampir semua aspek di bahasa pemrograman memanfaatkan teknologi informasi untuk menunjang development aplikasi yang lebih cepat, salah satu bahasa pemrograman yang popular digunakan adalah PHP. PHP: Hypertext Preprocessor adalah bahasa skrip yang dapat ditanamkan atau disisipkan ke dalam HTML. PHP banyak dipakai untuk memrogram situs web dinamis. PHP dapat digunakan untuk membangun sebuah CMS. Pada awalnya PHP merupakan kependekan dari Personal Home Page (Situs personal). PHP pertama kali dibuat oleh Rasmus Lerdorf pada tahun 1995. Pada waktu itu PHP masih bernama Form Interpreted (FI), yang wujudnya berupa sekumpulan skrip yang digunakan untuk mengolah data formulir dari web. Selanjutnya Rasmus merilis kode sumber tersebut untuk umum dan menamakannya PHP/FI. Dengan perilisan kode sumber ini menjadi sumber terbuka, maka banyak pemrogram yang tertarik untuk ikut mengembangkan PHP. Pada November 1997, dirilis PHP/FI 2.0. Pada rilis ini, interpreter PHP sudah
diimplementasikan dalam program C. Dalam rilis ini disertakan juga modul-modul ekstensi yang meningkatkan kemampuan PHP/FI secara signifikan. Pada tahun 1997, sebuah perusahaan bernama Zend menulis ulang interpreter PHP menjadi lebih bersih, lebih baik, dan lebih cepat. Kemudian pada Juni 1998, perusahaan tersebut merilis interpreter baru untuk PHP dan meresmikan rilis tersebut sebagai PHP 3.0 dan singkatan PHP diubah menjadi akronim berulang PHP: Hypertext Preprocessing. Pada pertengahan tahun 1999, Zend merilis interpreter PHP baru dan rilis tersebut dikenal dengan PHP 4.0. PHP 4.0 adalah versi PHP yang paling banyak dipakai pada awal abad ke-21. Versi ini banyak dipakai disebabkan kemampuannya untuk membangun aplikasi web kompleks tetapi tetap memiliki kecepatan dan stabilitas yang tinggi. Pada Juni 2004, Zend merilis PHP 5.0. Dalam versi ini, inti dari interpreter PHP mengalami perubahan besar. Versi ini juga memasukkan model pemrograman berorientasi objek ke dalam PHP untuk menjawab perkembangan bahasa pemrograman ke arah paradigma berorientasi objek. Namun, tidak semua developer mau memberikan source code kepada client dengan alasan security, privacy, dsb. Sehingga beberapa perusahaan telah membuat program untuk enkripsi source code dari PHP tersebut. Meski demikian tetap saja ada usaha untuk reverse engineering agar source code yang di-protect tersebut untuk mengembalikan ke source code aslinya.
Tujuan Tujuan penulis adalah untuk mengetahui lebih jauh tentang metode enkripsi pada bahasa pemrogaman PHP dan metode untuk reverse engineering dari PHP tersebut. . Batasan Masalah Penulis membatasi pembahasan penulisan ini pada enkripsi & dekripsi yang digunakan pada software ZendGuard, Ioncube v6, dan PHPLockit. PEMBAHASAN Zend Guard Zend Guard adalah aplikasi Encoder pada PHP yang dijalankan menggunakan CEE (Custom Excecution Engine). Dengan enkoder, source code PHP Anda dapat diproteksi dan bisa ditaruh di server hosting dengan lebih aman; baik administrator server hosting maupun pengunjung website Anda tidak dapat mengintip source code program Anda. Ada 3 Level yang biasa diterapkan pada Zend Guard, yaitu Encoding Only, Basic, maupun Strong.
Gambar 3.2 Hasil Encrypt Zend Guard
Ioncube Ioncube PHP Encode adalah salah satu produk enkoder PHP yang beredar di pasaran. Ioncube menggunakan CEE (Custom Excecution Engine) yang dipasang di server. Berikut adalah tabel perbandingan versi encrypter di ioncube Ketika menjalankan ioncube GUI, kita bisa langsung meng encrypt ioncube menggunakan drag n drop, berikut adalah screenshotnya :
Zend Guard dijalankan menggunakan GUI, berikut adalah screenshotnya
Gambar 3.1 Screenshot Zend Guard
Gambar 3.3 Screenshot Ioncube Encoder
Sebagai contoh, kita mengenkripsi script PHP, Sebagai contoh, kita mengenkripsi script PHP, maka hasilnya akan menjadi sebagaimana berikut :
maka hasilnya akan menjadi sebagaimana berikut :
wME8wME8wKTs=')));return;?> kr9NHenNHenNHe1lFMamb3klFoxiC2APk19gOLlHOa9gk ZXJkZwVkr9NTznNHr8XHt4JkZwShokiF2A 2Yy9LcBYvcoAPF3OZfuwPcmklCBWPkr8XHenNHr8XHtXL T08XHr8XHeEXhUXmOB50cbk5d3a3D2iUUy lRTlfNaaOnCAkJW2YrcrcMO2fkDApQToxYdanXAbyTF1c2 BuiDGjExHjH0YTC3KeLqRz0mRtfnWLYrO AcuUrlhU0xYTL9WAakTayaBa1icBMyJC2OlcMfPDBpqdo1 Vd3nxFmY0fbc3Gul6HerZHzW1YjF4KUSv kZLphUL7cMYSd3YlhtONHeEXTznNHeEpK2a2CBXPkr9N HenNHenNHtL7eWPLUAlkUAlkUAlkUAlkwe0 IwLildoxvwufvFMxLwUw7eWplC2ivwtOkUAlkUAlkUAlkUA L7eWP=
Gambar 3.4 Screenshot Hasil Ioncube
PHPLockit PHPLockit adalah encoder PHP tanpa CEE, sehingga script dapat dijalankan dimanapun tanpa mengubah konfigurasi dari web server. Berikut adalah screenshot dari aplikasi :
Gambar 3.5 PHPLockit Screenshot Sebagai contoh, kita akan meng encrypt source PHP :
Maka hasilnya adalah sebagaimana berikut :
Gambar 4.3 File Sample Ioncube
DECODING Zend Guard Decoding PHP pada zend guard dapat menggunakan dezender, dezender menggunakan loader asli dari zend guard yang kemudian di patch dengan program cli untuk mendapatkan source kembali. berikut adalah contoh file yang akan di decode dengan dezender.
Dengan perintah cli untuk decode, maka hasil decrypt akan sebagai berikut :
Gambar 4.2 Hasil Decode Zend Guard
Gambar 4.1 File Sample Zend Guard
Dengan perintah cli untuk decode, maka hasil decrypt akan sebagai berikut :
Gambar 4.2 Hasil Decode Zend Guard
Ioncube Decoding PHP pada ioncube dapat menggunakan dezender, dezender menggunakan loader asli dari ioncube loader yang kemudian di patch dengan program cli untuk mendapatkan source kembali. Berikut adalah contoh file yang akan di decode dengan dezender.
PHPLockit Decoding PHP pada Phplockit dapat menggunakan dilakukan secara manual. Sebagai contoh file yang akan di decode adalah : kr9NHenNHenNHe1lFMamb3klFoxiC2APk19gOLlHOa9 gkZXJkZwVkr9NTznNHr8XHt4JkZwShokiF2A 2Yy9LcBYvcoAPF3OZfuwPcmklCBWPkr8XHenNHr8XHt XLT08XHr8XHeEXhUXmOB50cbk5d3a3D2iUUy lRTlfNaaOnCAkJW2YrcrcMO2fkDApQToxYdanXAbyTF1 c2BuiDGjExHjH0YTC3KeLqRz0mRtfnWLYrO AcuUrlhU0xYTL9WAakTayaBa1icBMyJC2OlcMfPDBpqd o1Vd3nxFmY0fbc3Gul6HerZHzW1YjF4KUSv kZLphUL7cMYSd3YlhtONHeEXTznNHeEpK2a2CBXPkr 9NHenNHenNHtL7eWPLUAlkUAlkUAlkUAlkwe0 IwLildoxvwufvFMxLwUw7eWplC2ivwtOkUAlkUAlkUAlk UAL7eWP=
Kita highlight syntax base64_decode
Karena fungsi eval evaluating, maka kita ganti echo
hanyalah
$ php
Outputnya adalah : $O000O0O00=fopen($OOO0O0O00,'rb'); while(--$O00O00O00)fgets($O000O0O00,1024); fgets($O000O0O00,4096); $OO00O00O0=(base64_decode(strtr ( fread($O000O0O00,372) , 'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgIiJjLlMmPp QqSsVvXxZz0123456789+/=' , 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmno pqrstuvwxyz0123456789+/' ))); eval($OO00O00O0);
$OO00O00O0=ereg_replace(' FILE ',"'".$OOO0O0O00."'" ,(base64_decode(strtr(fread($O000O0O00,$OO00O0 000) ,'EnteryouwkhRHYKNWOUTAaBbCcDdFfGgIiJjLlMmPp QqSsVvXxZz0123456789+/=' ,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmno pqrstuvwxyz0123456789+/')))); fclose($O000O0O00); eval($OO00O00O0);
Dengan replace _FILE_ maka didapat code $ php
Hasilnya ialah $IIIIIIIIIIII = "Hello world!"; echo $IIIIIIIIIIII;
Dari code di atas, dapat diuraikan dengan algoritma sbb: 1. Membuka file untuk pembacaan secara biner. 2. Membaca baris comment pada file. 3. Skip first pass script dengan membaca baris dari input. 4. Membaca seluruh file (nonPHP). 5. Decode dengan subtitusi (sttr function) 6. Decode dengan base64. 7. Menjalankan script dengan fungsi eval. Untuk mendapatkan evaluated string, kita dapat menggunakan code $ php
Dan hasilnya ialah
Dari hasil decoding di atas, maka kita dapat membuat decoder sendiri berdasarkan hasil di atas, berikut adalah codenya : #!/usr/bin/php
$decoder = str_replace($ilinenum ,'line' ,$decoder); $decoder = str_replace($ifilename,'filename',$decoder); // replace $decoder = str_replace('eval($output);','return $output;',$decoder); $decoder = '$line=2;'.$decoder;
5. Decoding pada PHP tidak menjamin source code kembali 100% dikarenakan obfuscation yang mengenkripsi local variable dan functions. Saran 1. Gunakan obfuscation tiap kali mengencrypt PHP code, namun harus ada penyesuaian code jika ingin aman pembajak. 2. Ioncube dapat mendeteksi encrypter yang menggunakan software bajakan hingga tidak dapat berjalan di server.
// sandbox $next = eval($decoder); // remove expiration time $next = ereg_replace("^if[^;]+;",'',$next); // deciphering ereg('^[$]([^=]+)=',$next,$x); $next = str_replace($ihandle, 'handle', $next); $next = str_replace($ifilename,'filename',$next); $next = str_replace($x[1] , 'output', $next); $next = str_replace($ioffset, 'offset', $next);
DAFTAR PUSTAKA
// replace $next = str_replace('eval($output)','return $output',$next);
[1] Zend GuardTM , Obfuscating Code with Zend
// final $code = eval($next);
.
// finish echo '<','?php',$code,'?','>',"\n";
Guard, Zend Technologies, Inc, 2006. [2] Zend Optimizer TM , User Guide, Zend Technologies, Inc, 2006.
} else die("Selesai.\n");
[3] --, http://www.phplockit.com/. Diakses pada 20
?>
PENUTUP Kesimpulan Berdasarkan hasil penelitian di atas, maka dapat disimpulkan : 1. PHP merupakan bahasa pemrograman opensource yang langsung dijalankan pada sisi web dari sourcenya. 2. Penggunaan enkripsi pada PHP bisa dilakukan dengan tools baik yang melibatkan CEE maupun tidak. 3. Sebagian besar encrypter meng-convert code PHP ke dalam bentuk binary, baik yang dapat dibaca langsung oleh PHP maupun harus diinterpretasikan dengan loader. 4. Sebelum encrypt PHP source code, perlu dipastikan agar local variables dan functions agar bisa disesuaikan terlebih dahulu supaya berjalan sempurna pada server.
Maret 2012. [4] -,http://kb.masterweb.net/beta/index.cgi/read/Zend _Optimizer. Diakses pada 10 Maret 2012. . [5]---, ,http://kb.masterweb.net/beta/index.cgi/read/Ioncu be_PHP_Encoder. Diakses pada 10 Maret 2012 [6] ---, http://id.wikipedia.org/wiki/PHP . Diakses pada 11 Maret 2012.
[7] ---, http://dezender.net/ . Diakses pada 11 Maret 2012. [8]---, http://www.qinvent.com/index-en.htm . Diakses pada 11 Maret 2012. .
BIODATA Nur Arifin Akbar, seorang mahasiswa S1 di Jurusan Teknik Elektro Fakultas Teknik Universitas Diponegoro Semarang. Lahir di Jakarta pada tanggal 16 Oktober 1989. Menyelesaikan studi dasar di SDN Cipinang Melayu 04, serta merampungkan studi lanjutan di IT Al- Irsyad Purwokerto dan SMA Negeri 2 Purwokerto. Keinginan untuk dapat mempelajari mengenai dunia komputer membuatnya memilih konsentrasi informatika dan sistem komputer yang merupakan salah satu dari 4 konsentrasi yang disediakan oleh jurusan teknik elektro UNDIP.
Semarang,
Mei 2012
Mengetahui, Dosen Pembimbing KP
Ir. Kodrat Iman Satoto, MT. NIP. 196310281993031002