又到周末一個(gè)人侘在家里無(wú)事可干,這就是程序員的悲哀啊。好了我們利用周末的時(shí)間繼續(xù)介紹android apk防止反編譯技術(shù)的另一種方法。前三篇我們講了加殼技術(shù)(http://my.oschina.net/u/2323218/blog/393372)、運(yùn)行時(shí)修改字節(jié)碼(http://my.oschina.net/u/2323218/blog/396203)和偽加密(http://my.oschina.net/u/2323218/blog/399326),如果有不明白的可以查看我的博客的前三篇中關(guān)于這三種技術(shù)的介紹。接下來(lái)我們將介紹另一種防止apk反編譯的技術(shù)-對(duì)抗JD-GUI。
創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、灌云網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5頁(yè)面制作、商城系統(tǒng)網(wǎng)站開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為灌云等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。
一、對(duì)抗JD-GUI原理
通常在對(duì)apk進(jìn)行反編譯的時(shí)候用到的最多的兩個(gè)工具就是apk-tool和dex2jar。利用這兩個(gè)工具將apk首先反編譯成classes.dex然后再將classes.dex反編譯成jar文件或者將apk直接反編譯成jar文件;得到j(luò)ar文件以后就可以利用JD-GUI將得到的jar文件打開(kāi)就可以直接查看apk的java源碼了。我們花了那么大心思寫的程序就這么容易被別人拿到源碼是不是很不甘心,現(xiàn)在我就告訴你對(duì)抗JD-GUI查看源碼的方法。我們?cè)谟肑D-GUI查看源碼時(shí)有時(shí)有些函數(shù)的根本看不到直接提示error錯(cuò)誤,我們就利用這點(diǎn)來(lái)保護(hù)我們的apk。原來(lái)JD-GUI在將經(jīng)過(guò)混淆處理的jar里面的class字節(jié)碼文件轉(zhuǎn)成java文件時(shí),遇到函數(shù)中根本走不到的分支的特殊實(shí)現(xiàn)時(shí)就會(huì)提示函數(shù)error。這時(shí)我們只要查看這些提示error的文件或者函數(shù)對(duì)應(yīng)的源碼是有什么語(yǔ)句引起的,將這些語(yǔ)句加到我們的源碼中就可以防止利用JD-GUI去查看我們的apk源碼了。
二、原理實(shí)現(xiàn)
(1)假如我們的apk onCreate的函數(shù)實(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)過(guò)混淆處理后經(jīng)過(guò)簽名導(dǎo)出我們的apk,我們用dex2jar工具將我們的apk轉(zhuǎn)換成jar文件
(3)用JD-GUI打開(kāi)我們的jar文件就可以看到我們的apk onCreate函數(shù)的源碼了。如下:
(4)這時(shí)我們?cè)赼pk onCreate函數(shù)里面加上不可能的特殊分支語(yǔ)句,代碼如下:
?
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打開(kāi)會(huì)看到提示error錯(cuò)誤。如下:
根據(jù)上面的講述相信大家對(duì)對(duì)抗JD-GUI的方法有了一定的了解,我只是舉了其中的一個(gè)方法,之所以說(shuō)是特殊的分支語(yǔ)句是因?yàn)椴皇撬械姆种дZ(yǔ)句都可以讓JD-GUI提示error。我們可以根據(jù)原理多注意一些這樣的特殊分支語(yǔ)句以便用來(lái)保護(hù)我們的apk,下一篇我們將講解另一種android apk防止反編譯技術(shù),期待大家的捧場(chǎng)。