一、目標
App安全的主戰場在Native層,分析Native層的so,最趁手的兵器就是Frida和Unidbg了,
今天我們的目標是 某汽車社區App v8.0.1 so 的分析,
二、步驟
特征字串定位
我們在上一篇教程 某汽車社區App 簽名和加解密分析 已經定位了,資料加密和解密函式再java層的位置,

按照常理來說,這個java類檔案中,應該有個 System.loadLibrary(“libxxx”) 來方便我們定位對應的so,
可惜的是,這個樣本里找不到,原因大概率是脫殼不完整,
既然沒這么簡單,我們再回憶一下加密串的特征:
1、sd= 開頭
2、資料都是大寫的M開頭
3、== 結尾,那大概率是Base64
有共性就好辦了,我們在Native層匹配下 M 開頭的字串,匹配到了就列印Native層的堆疊,
if(string.toString().length > 50 && string.toString().indexOf("M") == 0){
var threadef = Java.use('java.lang.Thread');
var threadinstance = threadef.$new();
console.log("[NewStringUTF] bytes:" + string);
console.log(Thread.backtrace(this.context, Backtracer.FUZZY)
.map(DebugSymbol.fromAddress).join("\n"))
}
跑一下

結果是出來了,但是這個結果很有料呀, 沒聽說過江湖上有 1ef38371-d2a4-4ade-8510-d08f5c05fe5f-32.so 這種名號的so,
全域搜索
這個奇怪的so在apk里面肯定是找不到了,我們在手機里去找一找,
要玩好Android,那么linux命令不可少,搜索檔案用find命令
find / -name '1ef38371-d2a4-4ade-8510-d08f5c05fe5f-32.so' -print
我去,沒道理呀,居然搜不到?當然不會是我們find命令輸錯了,
在加密或者加殼的手段下,是可以實作手機只有加密檔案,只在記憶體中加載解密后的so,
Frida Dump So
今天的重頭戲就是這個了,so在記憶體里面,如何把它搞出來?
第一步: 把冰箱門打開
var libxx = Process.getModuleByName("210f3bcc-51b1-4f3c-9ca4-c429ad93ded1-32.so");
console.log("*****************************************************");
console.log("name: " +libxx.name);
console.log("base: " +libxx.base);
console.log("size: " +ptr(libxx.size));
列印出了這個神奇的so的地址和大小
*****************************************************
name: 210f3bcc-51b1-4f3c-9ca4-c429ad93ded1-32.so
base: 0xc380c000
size: 0xec9000
第二步:把大象塞進冰箱
var file_path = "/data/data/com.clxxx.lxxxlxxxbxxx/" + libxx.name + "_" + libxx.base + "_" + ptr(libxx.size) + ".so";
console.log(file_path);
var file_handle = new File(file_path, "wb");
if (file_handle && file_handle != null) {
Memory.protect(ptr(libxx.base), libxx.size, 'rwx');
var libso_buffer = ptr(libxx.base).readByteArray(libxx.size);
file_handle.write(libso_buffer);
file_handle.flush();
file_handle.close();
console.log("[dump]:", file_path);
}
注意: 寫so檔案的時候,把檔案寫在 /data/data/包名 目錄下,這個目錄大概率下是可以讀寫的,
第三步: 把冰箱門關上
最后把dump的so用adb命令 pull出來,
如果沒有pull /data/data/包名 這個目錄的權限,那就先copy到 /data/local/tmp 目錄下面,
現在可以拖進ida愉快的分析了,
三、總結
先找共性,然后再定位,字串定位的套路都是一樣的,
如果樣本沒有呼叫 NewStringUTF 或者 GetStringUTFChars 怎么辦?
我覺得還可以考慮libc.so, malloc strcpy 這些標準C函式 Hook一下,應該也會有驚喜,
Linux命令可以熟悉下,關鍵時刻還是有用的,

俄羅斯方塊教會了我們,如果你合群,就會消失,
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/378236.html
標籤:其他
