易錦Android逆向工程師精英計劃2023
Android逆向分析大全
分析步驟
通用逆向分析步驟
1.了解該模塊正向編程相關方法
2.使用apktool解密apk,得到資源、jni模塊等文件
3.從apk提取出dex文件,使用dex2jar轉換成jar文件,再用java逆向工具得到java源碼 dex->jar->java
4.根據特征(字符串、常量、包名類名方法名、manifest文件、布局文件等方式)或調試手段定位到關鍵代碼
5.分析變量含義類型、函數(shù)邏輯、模塊流程
6.對變量、函數(shù)、類進行標注、恢復成高級語言 ->c
Android程序的特點相比在于使用混淆方式打包,將包名、類名、函數(shù)名改成不易看懂的字母,從而使生成的apk小很多(android studio提供了release編譯方式,使用proguard混淆),因此反編譯apk最多的工作在于重構這些名稱,這一點和pc上一致,對于android native程序(jni)則和pc上基本一致,不同之處在于常見的是arm匯編。
安卓上APK調試步驟:
1.Apk(debuggable)或系統(tǒng)(ro.debuggable=1)設置為可調試
2.在虛擬機中啟動服務端(adbd/android_server)
3.在主機端連接客戶端調試器(IDA/jdb/adt),設置斷點
安卓上linux程序調試步驟:
1.在虛擬機中啟動服務端(gdb_server/linux_server)
2.在主機端連接客戶端調試器(IDA/gdb_for_windows),設置斷點
對于apk的反編譯,由于資源和xml都進行了編碼,因此反編譯時必然要解析相應的resource.arsc/AndroidManifest.xml等文件,對于做過保護處理的apk通常會在這里做手腳干擾Apktool、dex2jar等反編譯工具因此很有必要掌握編譯、調試這些工具源碼的方法(見“如何編譯、調試apktool和dex2jar”)
分析工具
集成IDE:APK改之理、JD-GUI、JEB(1.4破解 2.0)、jadx
解壓(apk, jar):WinRar
解析資源:apktool
反編譯引擎(jar, class):dex2jar工具集、jd-core(JD-GUI,JD-Eclipse反編譯核心)、fernflower(Android Studio反編 、procyon
回編譯:aapt、dex2jar工具集
調試器:IDA、jdb、adt等
輔助工具:DDMS 如果是虛擬機可以看到所有進程
APK改之理
整合&提供了全套解壓、反編譯代碼和資源、回編譯、簽名功能,強大的正則搜索,修改smali字節(jié)碼等功能
集成ApkTool、Dex2jar、JD-GUI工具
可視化操作,全自動的反編譯、回編譯、簽名Apk
正則表達式搜索資源及源碼
JD-GUI
輕量級反編譯,反編譯jar/class等java字節(jié)碼文件(能力一般),提供簡單的搜索能力
JEB
反編譯apk/jar工具(能力較強)
強大的正向、反向索引,一定程度重命名能力,一定搜索能力
支持注釋、插件
交互式可視化操作,全自動的反編譯
支持重命名
Dex2jar工具集
dex2jar是一個工具包,反編譯dex和jar,還提供了一些其它的功能,每個功能使用一個bat批處理或 sh 腳本來包裝,只需在Windows 系統(tǒng)中調用 bat文件、在Linux 系統(tǒng)中調用 sh 腳本即可。在bat中調用相應的jar主類完成特定功能,例如d2j-dex2jar.bat中的內容是:@"%~dp0d2j_invoke.bat" com.googlecode.dex2jar.tools.Dex2jarCmd %*
。常用的有dex2jar jar2dex dex2smali smali2dex
d2j-apk-sign用來為apk 文件簽名。命令格式:d2j-apk-sign xxx.apk 。
d2j-asm-verify 用來驗證jar 文件。命令格式:d2j-asm-verify -d xxx.jar。
d2j-dex2jar 用來將dex 文件轉換成jar 文件。命令格式:d2j-dex2jar xxx.apk
d2j-dex-asmifier 用來驗證dex 文件。命令格式:d2j-dex-asmifier xxx.dex。
d2j-dex-dump 用來轉存dex 文件的信息。命令格式:d2j-dex-dump xxx.apk out.jar 。
d2j-init-deobf 用來生成反混淆jar 文件時的初始化配置文件。
d2j-jar2dex 用來將jar 文件轉換成 dex 文件。命令格式:d2j-jar2dex xxx.apk。
d2j-jar2jasmin 用來將jar 文件轉換成jasmin 格式的文件。命令格式:d2j-jar2jasmin xxx.jar
d2j-jar-access 用來修改jar 文件中的類、方法以及字段的訪問權限。
d2j-jar-remap 用來重命名jar 文件中的包、類、方法以及字段的名稱。
d2j-jasmin2jar 用來將jasmin 格式的文件轉換成 jar 文件。命令格式:d2j-jasmin2jar dir dex2jar為d2j-dex2jar 的副本。
dex-dump為d2j-dex-dump 的副本
Apktool反編譯&打包工具
反編譯apk:apktool d file.apk –o path
回編譯apk:apktool b path –o file.apk
常見文件格式
Apk
Android package,android安裝程序文件,本質上是壓縮包,解壓得到classes.dex、resources.arsc、AndroidManifest.xml、so文件以及資源文件
Resources.arsc資源描述文件
Classes.dex所有代碼編譯過得darvik字節(jié)碼文件,可能會有多個
AndroidManifest.xml 編譯過的AndroidManifest.xml文件