android加密參數定位實現方法

在逆向一個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調試等等。

不再細說瞭,本文簡單總結一下。

到此這篇關於android加密參數定位方法的文章就介紹到這瞭,更多相關android加密參數定位方法內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!