混淆代碼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文件迅速定位到源碼位置