1. 程式人生 > 實用技巧 >安卓之旅-3

安卓之旅-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的混淆