一净薛、Jadx
1.1 介紹
GitHub - skylot/jadx: Dex to Java decompiler
jadx是圖形化逆向工具雁仲,可以直接打開(kāi)apk融痛、aar、dex蒙挑、jar等文件阶女,通常用于做java代碼靜態(tài)分析输瓜。
1.2 使用
- 1 全局搜索。如果是當(dāng)前文件搜索:command+f
- 2 前進(jìn)或后退操作猿规。
- 3 反混淆衷快。 對(duì)于開(kāi)啟ProGuard或R8的工程,可以通過(guò)點(diǎn)擊該按鈕自動(dòng)替換相關(guān)混淆的字符串
- 4 設(shè)置姨俩。打開(kāi)Show inconsistent code開(kāi)關(guān)蘸拔,可以查看反編譯失敗的方法實(shí)現(xiàn),如果不行环葵,配合底部tab的smali调窍、simple來(lái)綜合看。
- 5 尋找調(diào)用者张遭。
- 6 生成frida函數(shù)代碼并復(fù)制邓萨。
1.3 常用命令
反編譯apk:jadx -d output <可選參數(shù)項(xiàng)> xxx.apk
常用的可選參數(shù)項(xiàng):
- --comments-level debug :設(shè)置注釋級(jí)別為debug,以便在反編譯的代碼中包含詳細(xì)的調(diào)試信息
- --show-bad-code:?jiǎn)⒂么诉x項(xiàng)以顯示有問(wèn)題的代碼(bad code)菊卷,并在反編譯的代碼中標(biāo)記這些問(wèn)題區(qū)域缔恳。
二、apktool
2.1 介紹
GitHub - iBotPeaches/Apktool: A tool for reverse engineering Android apk files
apktool是僅對(duì)apk進(jìn)行逆向的命令行工具洁闰,僅支持反編譯為smali文件格式褐耳,該工具目前通常用于重打包。
2.2 使用
1)反編譯為smali工程
apktool d xxx.apk
2)靜態(tài)smali代碼閱讀
vscode 插件smalise渴庆,支持語(yǔ)法高亮和符號(hào)索引铃芦,可以比較方便的閱讀samli代碼雅镊。
3)重打包
① 修改完smali代碼后,在當(dāng)前工作目錄執(zhí)行如下命令刃滓,會(huì)在./dist目錄生成對(duì)應(yīng)的apk文件
apktool b .
② 重簽名
沒(méi)有秘鑰生成秘鑰
keytool -genkeypair -v -keystore <xxx.keystore> -keyalg RSA -keysize 2048 -validity 10000 -alias <name-alias>
輸入密鑰庫(kù)口令: xxx
再次輸入新口令: xxx
您的名字與姓氏是什么?
[Unknown]: xx
您的組織單位名稱(chēng)是什么?
[Unknown]: xx
您的組織名稱(chēng)是什么?
[Unknown]: xx
您所在的城市或區(qū)域名稱(chēng)是什么?
[Unknown]: xx
您所在的省/市/自治區(qū)名稱(chēng)是什么?
[Unknown]: xx
該單位的雙字母國(guó)家/地區(qū)代碼是什么?
[Unknown]: xx
CN=xxx, OU=xx, O=xx, L=xx ST=xx, C=xx是否正確?
[否]: y (注意:這里是y 不是yes仁烹,如果填yes會(huì)再重復(fù)一遍讓你輸入)
用秘鑰簽名:
apksigner sign --ks <xxx.keystore> --ks-key-alias <name-alias> --ks-pass pass:<password> dist/xxx.apk
驗(yàn)證簽名:
jarsigner -verify -verbose -certs xxx.apk
三、其他工具
dex2jar:一款命令行工具包咧虎,支持dex卓缰,smali,jar之間的互相轉(zhuǎn)換砰诵。
smali/baksmali: 是dalvik (Android的Java VM實(shí)現(xiàn))使用的索引格式的匯編/反匯編器征唬。通常使用場(chǎng)景是將odex轉(zhuǎn)為dex。