又到周末一個人侘在家里無事可干,這就是程序員的悲哀啊。好了我們利用周末的時間繼續(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進(jìn)行反編譯的時候用到的最多的兩個工具就是apk-tool和dex2jar。利用這兩個工具將apk首先反編譯成classes.dex然后再將classes.dex反編譯成jar文件或者將apk直接反編譯成jar文件;得到j(luò)ar文件以后就可以利用JD-GUI將得到的jar文件打開就可以直接查看apk的java源碼了。我們花了那么大心思寫的程序就這么容易被別人拿到源碼是不是很不甘心,現(xiàn)在我就告訴你對抗JD-GUI查看源碼的方法。我們在用JD-GUI查看源碼時有時有些函數(shù)的根本看不到直接提示error錯誤,我們就利用這點來保護(hù)我們的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)如下:
?