安卓之旅-3
一、解決軟體會自動斷掉USB連結的設定
在手機上使用termux,開啟frida,監聽0.0.0.0:8888埠
./frida-** -l 0.0.0.0:8888
就會在0.0.0.0的埠上進行監聽,這裡的0.0.0.0是通過該裝置的所有流量都會被劫持,而127.0.0.1只有本地機器發出的流量才會被劫持。然後,在電腦上開啟objection
objection -N -h ip -p 埠 -g 包名 explore
使用下面的命令進行檢視報名
frida -ps -H ip:埠 | grep shimeng
-h是適應網路連結,-u是使用usb連結
檢視監聽埠
netstat -tuulp | grep frida lsof -p 2349 |grep TCP netstat -aple | grep frida
二、破解第一步
1.我要確定點選解鎖的第一步在哪裡,就是要把類hook上,要trace
然後我們發現這個類有點問題,為什麼一直在那裡自己啟動,然後一直跑,我們要看看他的方法了。
然後知道了他的原始碼是音量的增加。
2.然後輸入密碼試一下,來trace一下,然後再靜態分析一波,繼續深入,突突他
三、自動化動態分析和快速定位
先來準備一波工具,首先是工具解包
ln -s /root/Desktop/android-studio/jre/bin/jarsigner /usr/bin ln -s /root/Android/Sdk/build-tools/30.0.1/aapt /usr/bin ln -s /root/Android/Sdk/build-tools/30.0.1/aapt2 /usr/bin ln -s /root/Android/Sdk/platform-tools/adb /usr/bin
建立一下細節
安裝apktools
1.Download Linux wrapper script (Right click, Save Link As apktool) 2.Download apktool-2 (find newest here) 3.Rename downloaded jar to apktool.jar 4.Move both files (apktool.jar & apktool) to /usr/local/bin (root needed) 5.Make sure both files are executable (chmod +x) 6.Try running apktool via cli
objection patchapk的引數設定
objection patchapk -s fulao2.apk -a x86
來對x86架構的來幹他
help命令使用方法照舊
memory list exports lib.so 列舉該so檔案的所有匯出函式
android heap search instances 搜尋tostring 在安卓的堆上進行搜尋
android heap execute + hashid + 函式 --return-string 執行這個handler的函式,獲得返回值 最直接的主動呼叫
android heap evaluate + hashid 然後輸出 console.log(clazz.getPixel(傳入引數)) 就可以了
控制四大元件
android hooking +方法+四大元件
android intent launch_activity + activity 進入四大元件
android hooking list services 列舉廣播
android hooking watch
jobs list 檢視當前被hook的函式
jobs kill 殺掉任務
objection 繼承了flask 可以從電腦向手機中傳入指令碼進行跑(詳情看肉絲姐姐的知識星球)
objection -g EXPLORE --enable-api 開啟flask 然後使用他提供的api介面進行繼續的操作就可以實現想要的功能了。
四、真實app實操(去強制升級)
Dalvik虛擬機器就是一個java程式碼的虛擬機器,在本地的as路徑下都有d8和dx,以及各種檔案都會在本地進行生成
參考連結:https://www.jianshu.com/p/6bdbbab73705
首先來一個app實操(去升級)
1.我們想一想彈出這個升級視窗是如何開發的
參考連結:https://www.jianshu.com/p/18e1f518c625
2.現在要尋找他有三個辦法
(1).字串搜尋大法
(2),順著上面的思路進行hook
android heap search isntance + 類名
使用外掛
plugin wallbreaker objectsearch android.app.AlertDialogxxxxxxxxxxplugin plugin wallbreaker objectsearch android.app.AlertDialog
就可以檢視成功了,然後進行dexdump即可。
(3)和程式啟動進行搶時間hook
(4)frida的兩個模式:1.attach2.spawn兩個模式
--startup-command + 命令,這樣可以開軟體自啟動命令
最後記錄兩個生成簽名和給包簽名的命令
keytool -genkey -alias abc.keystore -keyalg RSA -validity 20000 -keystore abc.keystore
jarsigner -verbose -keystore abc.keystore -signedjar testx.apk zhibo.apk abc.keystore
五、重打包去強升級
-
DEXDump三種使用模式脫殼
1.py指令碼使用
-
Objection快速自動化定位
-
Wallbreaker記憶體可視漫遊
記憶體中存在的例項,new String("nihao"),GC kicak in
-
所見即所得的程式碼定位思路(其實也是從開發的方向來看的)
-
修改原始碼重打包強制升級
記憶體會有回收機制,但是肉眼可見的類是可以直接看到的,
hook:就是在api上掛一個鉤子
下面來進行實操
青青草視訊
1.使用objection來進行連結並操作脫殼
objection -g com.hello.qqc explore
plugin load /root/.objection/plugins/dexdump/frida_dexdump
plugin dexdump dump
下載的檔案自動儲存到桌面下的目錄cd Desktop/com.hello.qqc
尋找主進入口:grep -ril "MainActivity" *
2.直接使用dexdump中的main.py來進行脫殼
先把objection 跑起來,再進行執行,與殼做一手對抗
python3 main.py
注意這裡可以指定frida的指定模式,attach 或者swap
3.使用pip install
直接獲得命令 frida-dexdump 直接進行脫殼
然後使用下面的命令進行重打包
apktool -s d + *.apk 保留dex檔案
然後刪除那個class.dex檔案
然後把脫殼之後的檔案中那個dex檔案進行重新命名classes,classes2,classes3
然後再更改那個入口進入的配置檔案
真實APP實操
-
所謂原生就是離CPU越近,安卓就是libart.so來解釋,linux原生就是原生直接解釋
-
想要分析/破解加固,就必須從開發和加固的角度來實現
-
要看是不是我們要的類,就看他的結構對不對
-
直接亂碼的資料根本沒法複製的,就去進行編碼,然後hook的時候再反編碼回去
案例:混淆後的Okhtpp3的混淆