android apk 防止反編譯技術第四篇-對抗JD-GUI

又到週末一個人侘在家裏無事可幹,這就是程序員的悲哀啊。好了我們利用週末的時間繼續介紹android apk防止反編譯技術的另一種方法。前三篇我們講了加殼技術(http://my.oschina.net/u/2323218/blog/393372)、運行時修改字節碼(http://my.oschina.net/u/2323218/blog/396203)和僞加密(http://my.oschina.net/u/2323218/blog/399326),如果有不明白的可以查看我的博客的前三篇中關於這三種技術的介紹。接下來我們將介紹另一種防止apk反編譯的技術-對抗JD-GUI

 

一、對抗JD-GUI原理

通常在對apk進行反編譯的時候用到的最多的兩個工具就是apk-tooldex2jar。利用這兩個工具將apk首先反編譯成classes.dex然後再將classes.dex反編譯成jar文件或者將apk直接反編譯成jar文件;得到jar文件以後就可以利用JD-GUI將得到的jar文件打開就可以直接查看apkjava源碼了。我們花了那麼大心思寫的程序就這麼容易被別人拿到源碼是不是很不甘心,現在我就告訴你對抗JD-GUI查看源碼的方法。我們在用JD-GUI查看源碼時有時有些函數的根本看不到直接提示error錯誤,我們就利用這點來保護我們的apk。原來JD-GUI在將經過混淆處理的jar裏面的class字節碼文件轉成java文件時,遇到函數中根本走不到的分支的特殊實現時就會提示函數error。這時我們只要查看這些提示error的文件或者函數對應的源碼是有什麼語句引起的,將這些語句加到我們的源碼中就可以防止利用JD-GUI去查看我們的apk源碼了。

 

二、原理實現

(1)假如我們的apk onCreate的函數實現如下:

?

1
2
3
4
5
 @Override   
 protected void onCreate(Bundle savedInstanceState) {   
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main);  
  }

 

(2)將我們的apk經過混淆處理後經過簽名導出我們的apk,我們用dex2jar工具將我們的apk轉換成jar文件

222235_qfJI_2323218.png

 

(3)JD-GUI打開我們的jar文件就可以看到我們的apk onCreate函數的源碼了。如下:

222314_huYO_2323218.png

 

(4)這時我們在apk onCreate函數裏面加上不可能的特殊分支語句,代碼如下:

?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  @Override
    protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       switch(0)
       {
       case 1:
           JSONObject jsoObj;
           String date=null;
           String second=null;
           try
           {
              jsoObj=new JSONObject();
              date=jsoObj.getString("date");
               second=jsoObj.getString("second");
           }
           catch(JSONException e)
           {
              e.printStackTrace();
           }
           test.settime(date,second);
           break;
       }
    }

?

1
2
3
4
class test
{
   public static void settime(String a,String b){}
}

 

(5)我們用(2)中同樣的方法將apk轉成jar文件,然後用JD-GUI打開會看到提示error錯誤。如下:

222354_3Ip1_2323218.png

 

根據上面的講述相信大家對對抗JD-GUI的方法有了一定的瞭解,我只是舉了其中的一個方法,之所以說是特殊的分支語句是因爲不是所有的分支語句都可以讓JD-GUI提示error。我們可以根據原理多注意一些這樣的特殊分支語句以便用來保護我們的apk,下一篇我們將講解另一種android apk防止反編譯技術,期待大家的捧場。如果對這篇講的技術有任何疑問:

歡迎關注個人微信公衆平臺:程序員互動聯盟(coder_online),掃一掃下方二維碼或搜索微信號coder_online即可關注,我們可以在線交流。

222526_gKJd_2323218.jpg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章