GNU/Linux >> Belajar Linux >  >> Linux

Lindungi Kode Java Anda dari Rekayasa Terbalik

Jika Anda mengembangkan aplikasi java, penting untuk dipahami bahwa file kelas java dapat dengan mudah direkayasa balik menggunakan dekompiler java. Dalam artikel ini, mari kita jelajahi bagaimana file kelas java direkayasa balik dan bagaimana melindungi kode sumber Anda agar tidak direkayasa balik oleh seseorang.

Kode sumber java dikompilasi ke file kelas yang berisi kode byte. Java Virtual Machine hanya membutuhkan file kelas untuk dieksekusi. Masalahnya adalah bahwa file kelas dapat dengan mudah didekompilasi menjadi kode sumber asli menggunakan alat dekompiler java. Solusi terbaik untuk mencegah rekayasa balik adalah dengan mengaburkan file kelas sehingga akan sangat sulit untuk melakukan rekayasa balik. Menurut kamus Obfuscate berarti “membuat tidak jelas atau tidak jelas”. Itulah yang akan dilakukan oleh banyak alat obfuscator java seperti yang dijelaskan di bawah ini.

Aku. Dekompilasi file kelas Java.

Sebelum memahami cara mengaburkan kode java, mari kita coba memahami bagaimana seseorang dapat merekayasa balik aplikasi java Anda. 3 langkah berikut menjelaskan bagaimana file kelas direkayasa balik ke kode sumber java asli.

1. Buat HelloWorld.java seperti yang ditunjukkan di bawah ini.

public class HelloWorld {
    public static void main (String args[]) {
        String userMessage = "Hello World!";
        int userCount = 100;
        userCount = userCount + 1;
        System.out.println(userMessage);
        System.out.println(userCount);
    }
}

2. Kompilasi HelloWorld.java program dan jalankan untuk memastikannya berfungsi dengan baik.

$ javac HelloWorld.java
$ java HelloWorld
Hello World!
101

File kelas Java hanya berisi kode byte. Jika Anda mencoba melihat file kelas, file tersebut tidak dapat dibaca seperti yang ditunjukkan di bawah ini.

$ vi HelloWorld.class
Ãþº¾^@^@^@2^@
^@^G^@^P^H^@^Q  ^@^R^@^S
^@^T^@^V^G^@^W^G^@^X^A^@^F<init>^A^@^C()V^A^@^DCode^A^@^OLineNumberTable
^A^@^Dmain^A^@^V([Ljava/lang/String;)V^A^@
SourceFile^A^@^OHelloWorld.java^L^@^H^@ ^A^@^LHello World!^G^@^Y^L^@^Z^@^[^G^@^\^L^@^]^@^^^L^@^]^@^_^A^@
HelloWorld^A^@^Pjava/lang/Object^A^@^Pjava/lang/System^A^@^Cout^A^@^ULjava/io/PrintStream;^A
^@^Sjava/io/PrintStream^A^@^Gprintln^A^@^U(Ljava/lang/String;)V^A^@^D(I)V^@!^@^F^@^G^@^@^@^@^@^B^@^A^@^H^@  ^@^A^@

3. Dekompilasi HelloWorld.class file dan lihat sumber aslinya.

Untuk demonstrasi ini mari kita gunakan decompiler Jad yang gratis untuk penggunaan non-komersial. Unduh jad yang sesuai untuk platform Anda. Gunakan jad untuk merekayasa balik file HelloWorld.class untuk mendapatkan sumber aslinya seperti yang ditunjukkan di bawah ini.

$ unzip jadls158.zip
$ ./jad HelloWorld.class
Parsing HelloWorld.class...
Generating HelloWorld.jad
$ vi HelloWorld.jad <This will show the reverse engineered original source code>

II. Mengaburkan aplikasi java Anda

Mari kita tinjau cara mengaburkan dan melindungi kode sumber Anda dari rekayasa balik menggunakan ProGuard, perangkat lunak berlisensi GPL gratis.

1. Unduh dan Instal ProGuard

$ cd /home/jsmith
$ unzip proguard4.2.zip

2. Buat file konfigurasi proguard

Buat myconfig.pro yang berisi semua informasi tentang aplikasi java Anda.

  • -injar :Tentukan lokasi file jar Anda. yaitu aplikasi java terkompilasi yang berisi file kelas
  • -outjar:Ini adalah file jar yang akan dibuat oleh proguard setelah obfuscation. Ini akan berisi semua konvensi penamaan metode dan variabel yang rusak dan tidak jelas dalam file kelas jika seseorang mencoba merekayasa balik.
  • -printmapping:ProGurad mengeluarkan semua informasi pemetaan dalam file ini untuk referensi Anda.
  • -keep:Tunjukkan file kelas atau metode yang tidak ingin Anda obfuscate oleh ProGuard. Untuk misalnya mypkg.MainAppFrame berisi titik masuk untuk aplikasi dengan kelas utama, yang tidak akan dikaburkan dalam contoh ini.
$ cat myconfig.pro
-injars /home/jsmith/myapp.jar
-outjars /home/jsmith/myapp-obfuscated.jar This is the obfuscated jar file
-libraryjars /usr/java/jdk1.5.0_14/jre/lib/rt.jar
-printmapping proguard.map
-verbose
-keep public class mypkg.MainAppFrame

3. Jalankan ProGuard.

$ cd /home/jsmith/proguard4.2/lib
$ java -jar proguard.jar @myconfig.pro

Ini membuat dua file berikut:

  • myapp-obfuscated.jar:Berisi file kelas aplikasi Anda yang di-obfuscate. Anda dapat mendistribusikan ini tanpa harus khawatir tentang seseorang yang merekayasa balik aplikasi Anda dengan mudah.
  • proguard.map:File ini berisi informasi pemetaan untuk referensi Anda.

4. Contoh file proguard.map

Ini adalah contoh file proguard.map yang menunjukkan nama asli dari objek sumber java (file kelas, metode, variabel, dll.) dan nama baru yang dikaburkan.

myapp.AppToolBar -> myapp.ae:
javax.swing.JButton btnNew -> d
javax.swing.JButton btnOpen -> e

5. Contoh kode sumber java (myapp.AppToolBar) sebelum kebingungan.

btnNew = changeButtonLabel(btnNew, language.getText("new"));
btnOpen = changeButtonLabel(btnOpen, language.getText("open"));

6. Contoh kode sumber java yang didekompilasi dari file kelas (myapp.ae) setelah pengaburan.

d = a(d, n.a("new"));
e = a(e, n.a("open"));

Anda dapat melihat bahwa baris “btnNew =changeButtonLabel(btnNew, language.getText(“new”)); ” diterjemahkan menjadi “d =a(d, n.a(“baru”));”, oleh ProGuard, yang tidak masuk akal bagi seseorang yang menggunakan alat dekompiler java untuk merekayasa balik file kelas.

Bantu saya menyebarkan berita tentang The Geek Stuff.

Silakan tinggalkan komentar dan umpan balik Anda tentang artikel ini. Jika Anda menyukai posting ini, saya akan sangat menghargai jika Anda dapat menyebarkan berita tentang blog “The Geek Stuff” dengan menambahkannya ke del.icio.us atau Digg melalui tautan di bawah.


Linux
  1. Instal Java dari repositori distribusi Linux Anda

  2. Mengimpor modul Python dari Bash

  3. Memanggil fungsi C dari kode C++

  1. Mengonversi kode Python 2 Anda ke Python 3

  2. 12 Alat Sederhana untuk Melindungi Privasi Anda

  3. Panggil Syscalls dari Java

  1. Temukan jumlah Baris Kode dari Repositori GitHub

  2. Melayani Domain Anda Dari Server Cloud Rackspace

  3. cara mendapatkan jalur relatif direktori saat ini di kucing jantan dari lingkungan linux menggunakan java