Android混淆代碼bug跟蹤:
一. 代碼混淆的意義
代碼混淆的一個主要的目的是為了能夠保證代碼的安全性:我們的代碼發布出去以後,有的用戶可能會使用某些反編譯工具查看我們的代碼,為了避免這樣的行為,故有代碼混淆。
代碼混淆以後,原有代碼的包名,類名和方法名會被修改。
二.反編譯工具介紹
Android平台目前常用的反編譯工具主要是:smali這個jar包,其他的工具基本上是對該工具的包裝,這裡有一個比較便捷的工具包dex2jar,該工具可以直接將apk包中的dex文件轉換成jar文件,這樣我們就可以使用jd-gui這樣的工具查看代碼了。
三.問題定位
問題的定位是比較復雜的,基本的思路是
1.准備:錯誤日志、mapping文件、被混淆的apk文件、源代碼
2.反編譯:使用dex2jar反編譯apk包中的dex文件,之後使用jd-gui打開
3.進反編譯的代碼:根據錯誤日志,在jd-gui中找到相應的錯誤位置。(這裡強調使用反編譯的代碼定位錯誤日志主要考慮以下幾點原因:a.重名的方法比較多,反編譯的代碼可以提供二外的信息【參數的個數和類型】;b.便於堆棧的追溯)
4.根據上一步中的定位,使用mapping文件迅速定位到源碼位置