溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

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

發(fā)布時間:2020-06-24 10:15:36 來源:網(wǎng)絡(luò) 閱讀:795 作者:lonely_online 欄目:移動開發(fā)

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

 

一、對抗JD-GUI原理

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

 

二、原理實現(xiàn)

(1)假如我們的apk onCreate的函數(shù)實現(xiàn)如下:

?

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

 

(2)將我們的apk經(jīng)過混淆處理后經(jīng)過簽名導(dǎo)出我們的apk,我們用dex2jar工具將我們的apk轉(zhuǎn)換成jar文件

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

 

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

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

 

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

?

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轉(zhuǎn)成jar文件,然后用JD-GUI打開會看到提示error錯誤。如下:

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

 

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

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

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


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI