轉(zhuǎn)載請注明出處。請前往 Tiga on Tech 查看原文以及更多有趣的技術(shù)文章。
SSL Pinning 指的是,對于 target sdk version > 23 的 Android App,App 默認(rèn)指信任系統(tǒng)的根證書或 App 內(nèi)指定的證書,而不信任用戶添加的第三方證書。這會(huì)導(dǎo)致我們在對 App 做逆向分析的時(shí)候,使用 Charles 無法抓 https 包(如圖):
針對 SSL Pinning,常見的繞過方法有兩種:
1.重打包 APK,修改 AndroidManifest 的配置:優(yōu)點(diǎn)是一次重打包永久有效,在其他手機(jī)/電腦上抓包時(shí)不需要重復(fù)搭建環(huán)境,而且也不需要手機(jī)有 root 權(quán)限。缺點(diǎn)是因?yàn)橹卮虬?APK 簽名被改了,容易被檢測出來,可能需要進(jìn)一步繞過簽名校驗(yàn)。
2.使用 injection + hook 的辦法繞過 client 端的證書校驗(yàn),常見的 native 注入框架 xposed, frida 和 objection 都有相關(guān)的工具:優(yōu)缺點(diǎn)和重打包恰好相反。
重打包
重打包是繞過 SSL Pinning 比較常見且實(shí)用的辦法。因?yàn)樵?APK 的 target sdk version <= 23 時(shí),默認(rèn)是信任用戶添加的第三方證書的,因此我們的目標(biāo)是修改 AndroidManifest 里的 target sdk version 為 23(APK 當(dāng)前設(shè)置的是 29)。
1. 使用 apktool 直接重打包
- 第一步:解包。因?yàn)槲覀冎恍枰薷?AndroidManifest 的配置,因此不需要 decode source,只需要 decode resource,因此使用的命令是:
apktool d -s origin.apk
- 第二步:修改 AndroidManifest 的 targetSdkVersion
- 第三步:重打包。命令
apktool b <decode output directory>
在對某個(gè) App 做實(shí)驗(yàn)的時(shí)候,第三步重打包時(shí)出現(xiàn)了以下 error。搜索了一下,大概知道是 apktool 編譯資源文件時(shí)的問題,并且沒有找到相應(yīng)的解決辦法。
2. 只 decode AndroidManifest
因?yàn)橹匦戮幾g資源的時(shí)候會(huì)失敗,那我們可否不 deocde 資源文件而只 decode AndroidManifest?然而 apktool 目前也不支持這個(gè)功能,官方的回答 (github.com/iBotPeaches…%25E6%2598%25AF “https://github.com/iBotPeaches/Apktool/issues/1135)%E6%98%AF”) AndroidManifest 也會(huì)依賴其他資源(如 strings, drawable 等),如果只 decode AndroidManifest 的 effort 會(huì)很大。
3. 直接修改 AndroidManifest 的 binary
因?yàn)槲覀儗?AndroidManifest 只需要做很小的修改,既然不能 decode 資源文件,我們可以直接修改 AndroidManifest 的 binary。上述解包的命令變?yōu)?apktool d -r -s origin.apk
。然后參考這個(gè)博客文章 (juejin.cn/post/684490…%E7%90%86%E6%B8%85%E6%A5%9A “https://juejin.cn/post/6844903747169026061)%E7%90%86%E6%B8%85%E6%A5%9A”) AndroidManifest 文件的 binary 格式,加上 010 editor 的 AndroidManifest 模板,即可輕松實(shí)現(xiàn)修改。修改后用命令 apktool b 重打包,然后用 apksigner 進(jìn)行重簽名即可得到重打包完成后的 APK。簽名的命令為 apksigner sign --ks spykey.keystore --out signed.apk --ks-pass pass:spykey --ks-key-alias spykey --key-pass pass:spykey --v2-signing-enabled true rebuilt.apk
。其中 spykey.keystore 可以在 AndroidStudio 或其他工具生成。
安裝重打包后的 APK,APK 可以正常打開,然而在點(diǎn)擊同意使用條款之后 APP 就 crash 了???logcat 并沒有明顯的 log 指示錯(cuò)誤原因,但能大概猜想到是 APP 里做了 APK 簽名校驗(yàn)。因?yàn)?logcat 沒有明顯的線索,需要繞過簽名校驗(yàn)可能需要較大的 effort。因此到此決定放棄重打包的辦法。
Injection + Hook
如果 App 在 Android 11 的 x86 模擬器上能正常運(yùn)行,因此有很好的 root 環(huán)境,很方便做 Injection 和 Hook。Objection 框架提供了現(xiàn)成的 SSL Pinning Bypassing 功能,因此我們采用了該框架:github.com/sensepost/o… 。具體的原理和操作步驟可以參考這個(gè)博客文章:www.hackingarticles.in/android-hoo…
這里簡單記錄一下各個(gè)步驟:
- 第一步:Mac 上安裝 objection:pip3 install objection
- 第二步:下載 Frida server for Android 并且 push 到手機(jī)
/data/local/tmp
上,root 權(quán)限下把 frida server 運(yùn)行起來。下載地址是 github.com/frida/frida… ,x86 Android 模擬器下載的是 frida-server-14.2.13-android-x86.xz (github.com/frida/frida…) 。Mac 端需要執(zhí)行的命令adb push frida-server-14.2.13-android-x86 /data/local/tmp
。手機(jī)端進(jìn)入 adb shell 并進(jìn)入 su 后,需要執(zhí)行的命令:chmod 0755 /data/local/tmp/frida-server-14.2.13-android-x86 && /data/local/tmp/frida-server-14.2.13-android-x86
- 第三步:啟動(dòng) App
- 第四步:注入 App 進(jìn)程,Mac 上執(zhí)行命令:
objection -g <app package name>
- 第五步:第四步命令執(zhí)行后會(huì)進(jìn)入一個(gè) objection 的 shell,執(zhí)行命令
android sslpinning disable
即可 disable APP 的 SSL Pinning。
上述步驟執(zhí)行完之后,這時(shí)再用 Charles 即可順利抓 https 包:
rk:4536:0:0:0.image" style=“margin: auto” />
## 網(wǎng)絡(luò)安全工程師(白帽子)企業(yè)級學(xué)習(xí)路線
第一階段:安全基礎(chǔ)(入門)
第二階段:Web滲透(初級網(wǎng)安工程師)
第三階段:進(jìn)階部分(中級網(wǎng)絡(luò)安全工程師)
文章來源:http://www.zghlxwxcb.cn/news/detail-794998.html
如果你對網(wǎng)絡(luò)安全入門感興趣,那么你需要的話可以點(diǎn)擊這里??網(wǎng)絡(luò)安全重磅福利:入門&進(jìn)階全套282G學(xué)習(xí)資源包免費(fèi)分享!文章來源地址http://www.zghlxwxcb.cn/news/detail-794998.html
學(xué)習(xí)資源分享

到了這里,關(guān)于繞過 Android SSL Pinning的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!