检测APK是否混淆
目錄
- 為什么要檢測APK是否混淆
- 混淆的優點
- 混淆的缺點
- APK的混淆的分類
- 檢測工具
- 檢測
- 人工檢測
- 自動化檢測
為什么要檢測APK是否混淆
apk代碼混淆就是為了保護代碼安全,防止被反編譯拿到源碼做審計找出危險漏洞,現在大部分的APK都會做混淆。
下面分析混淆APK后的優缺點。
混淆的優點
- 防止被惡意破解逆向分析
- 代碼可閱讀性降低
- 減少apk體積(也是瘦身的方法)
混淆的缺點
- 調試不方便(可以配置mapping變得方便)
- 測試不充分,可能導致部分功能不能使用(比如注解相關等)
APK的混淆的分類
- 代碼混淆
- 資源混淆
檢測工具
反編譯的工具眾多,編譯出的源碼效果也不太相同,使用自己熟悉的就好;
- Jadx-gui-0.8.0.exe(下載地址:https://github.com/skylot/jadx)
- smali2java(下載地址:http://www.hensence.com/cn/smali2java/#Overview)
- Android逆向助手2.2 (下載地址:http://www.funytao.com/?p=430)
- dex2jar
- apktool
如果你有有更好的工具推薦 請在評論里分享一下 :)
檢測
人工檢測
使用工具打開APK,查看反編譯后的代碼如果類名、方法名大部分都為A、B、C字母,那就說明混淆了,反之就說明未混淆。
代碼混淆前:
代碼混淆后:
資源混淆是可以解決apk瘦身,主要就是壓縮了資源文件及修改了文件名字及映射關系。
資源混淆前:
資源混淆后:
有開發源碼可以看是否加混淆proguard
有如上兩個步驟,基本上不需要代碼審計了,不過你有代碼的話,可以看看;
在build.gradle文件中是否配置混淆規則:
buildTypes {debug {//加載默認混淆配置文件proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'...}release {// 如果沒有提供混淆規則文件,則設置默認的混淆規則文件(SDK/tools/proguard/proguard-android.txt)pseudoLocalesEnabled true...}}自動化檢測
使用程序檢測的話,應該檢測什么特征呢?
1.下載apktool工具
2.運行apktool.bat d xxx.apk,把apk反編譯成smali
3.如果想要進一步查看源碼,可下載smali2java
4.使用smali文件的文件名進行分析,如果存在1個或1個以上的資源類的smali文件,就可以證明該apk沒有被混淆過。如下圖所示
程序遍歷 smali文件夾,只有存在1個或1個以上R$~就判定為未混淆。
備注:是apk的核心代碼下的資源文件在混淆后不應該出現上述文件,反之則說明該apk沒有進行混淆;使用方案一也是要進入核心代碼
轉載于:https://www.cnblogs.com/mysticbinary/articles/10446019.html
總結
- 上一篇: 微信支付开发文档说明
- 下一篇: [乐意黎原创]联想G470老笔记本升级改