作者正在撰寫一本爬蟲逆向相關的書籍《書名還沒有想好》,

目前剛寫了50頁,上圖是文章目錄的一部分,
想問一下大家現在對哪階段的內容會更感興趣,
或者哪部分的內容會更有學習力,或者幫我想個書名,
可在本文末留言告知,感謝大家,
下面開始本文正文內容,
在逆向一個Android程式時,如果只是盲目的分析需要閱讀N多代碼才能找到程式的關鍵點或Hook點,本文將分享一下如何快速的找到APP程式的加密引數位置,其實不論是找關鍵位置、找hook點,找加密引數、代碼邏輯追蹤,都是類似的處理方法,
巧用搜索-靜態分析
一般靜態分析找加密引數的流程都是先查殼(脫殼)、反編譯、查找程式的入口方法、分析程式的執行流程,
假設已經使用Android killer反編譯了未加殼的app,直接使用工程搜索檢索需要查找的引數名,根據AK的反饋資訊進行對比,找到其對應的引數位置,也可以根據應用執行流程逐行向下分析代碼,比較累,
objection定位
objection是基于Frida的動態分析工具包,可以免root動態調式apk,同時支持iOS和Android,安裝方法可以到github查看,Github:https://github.com/sensepost/objection
在通過搜索之后如果有幾個不確定的位置,則正好可以使用Objection,Objection就是專業的定位小能手,從定位流程上來說也只有三步,
- 1、注入目標行程
objection -g com.xxx.xxx explore - 2、跟蹤類
android hooking watch class 'com.xxx.xxx.lx.ApiSign' - 3、查看入參和回傳值
然后通過引數和回傳值與請求介面中的協議進行對比就可以卻確定究竟是在哪一個位置了,android hooking watch class_method 'com.xxx.xxx.lx.ApiSign.a' --dump-args --dump-return
frida-hook
frida、xposed這類hook工具也是動態分析的一種,假設某App的介面有 signature 簽名,并且該引數值看上去非常像是Base64,并且長度為定長且少于20位,這個時候如果通過工具全域搜索沒有找到,則可以通過frida憑感覺Hook下App中所有操作Base64的位置,
Frida代碼如下:
var Base64Class = Java.use("android.util.Base64");
Base64Class.encodeToString.overload("[B", "int").implementation = function(a,b){
var resault = this.encodeToString(a,b);
console.log(">>> Base64 " + resault);
if(resault.length <= 20){
var stackAdd = threadinstance.currentThread().getStackTrace();
console.log("resault stackAdd is:" + Where(stack));
}
return rc;
}
通過這種方式大概率能列印出簽名計算的位置,這也屬于巧計的一種,大家一定不要忘記這種定位方式,
log注入
代碼注入也屬于動態分析,流程是先修改apk的smali代碼,既是在某關鍵函式前加入 android/util/Log 輸出,配合LogCat 查看程式執行時的log資料,
關于android/util/Log的 Log extends Object 一共有5個方法:Log.v() Log.d() Log.i() Log.w() and Log.e()
一般使用Log.v() 日志輸出函式就可以了,不做案例了,詳細內容會往書中寫,
動態除錯
其實定位的方法只有兩種靜態分析和動態分析,動態除錯也屬于動態分析,和上面的方法異曲同工,
動態除錯這里可以理解為堆疊除錯,有時候需要利用到不同的工具和方法,
比如 JEB除錯、smali除錯、IDA除錯等等,
不再細說了,本文簡單總結一下,
大家現在對哪階段的內容會更感興趣,望留言告知,感謝大家,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/271416.html
標籤:其他
