寫在最前面
之前分析過一點資訊app的signature參數(shù)捻激,那篇文章沒有記錄frida的使用。這篇就通過分析某東app的sign參數(shù)來記錄下frida簡單的使用
介紹
- 通過分析某東APP sign加密禾锤,來簡單的記錄下frida的使用走越。
- app版本 10.2.0
- 本文不介紹 此app的完整分析過程咳焚,具體可參考這大佬的公眾號(微信搜 逆向lin狗)泉哈,關(guān)注一波津函,絕對不虧肖粮。
抓包&定位
安裝好app后直接抓包即可
將apk拖進(jìn)jadx,反編譯搜索球散,不斷定位尿赚。最終定位到這里
frida Hook java層
經(jīng)過多次嘗試后散庶,app對frida的默認(rèn)端口27042進(jìn)行檢測。所以讓frida運(yùn)行在其它接口即可
./frida-server-12.11.18-android-arm64 -l 127.0.0.1:8080
轉(zhuǎn)發(fā)接口
adb forward tcp:8080 tcp:8080
啟動frida
frida -H 127.0.0.1:8080 包名 -l 文件.js
Java.perform(function () {
console.log("Hook Start...");
var BitmapkitUtils = Java.use("com.jingdong.common.utils.BitmapkitUtils")
console.log("=====")
BitmapkitUtils.getSignFromJni.implementation = function (content, str, str2, str3, str4, str5) {
console.log(content, str)
console.log("str2", str2)
console.log("str3", str3)
console.log("str4", str4)
console.log("str5", str5)
var res = this.getSignFromJni(content, str, str2, str3, str4, str5)
console.log("=======", res)
return res
}
}
frida Hook so層
打開ida凌净,加載so文件悲龟,搜索關(guān)鍵詞定位到方法
var ptr_func = Module.findExportByName("libjdbitmapkit.so", "Java_com_jingdong_common_utils_BitmapkitUtils_getSignFromJni") //對函數(shù)名hook
Interceptor.attach(ptr_func, {
//onEnter: 進(jìn)入該函數(shù)前要執(zhí)行的代碼,其中args是傳入的參數(shù)冰寻,一般so層函數(shù)第一個參數(shù)都是JniEnv须教,第二個參數(shù)是jclass,從第三個參數(shù)開始是我們java層傳入的參數(shù)
onEnter: function (args) {
console.log("Hook so -------");
console.log("arg0", args[0])
console.log("arg1", args[1])
console.log("arg2",args[2])
console.log("arg3", Java.vm.getEnv().getStringUtfChars(args[3], null).readCString())
console.log("arg4", Java.vm.getEnv().getStringUtfChars(args[4], null).readCString())
console.log("arg5", Java.vm.getEnv().getStringUtfChars(args[5], null).readCString())
console.log("arg6", Java.vm.getEnv().getStringUtfChars(args[6], null).readCString())
console.log("arg7", Java.vm.getEnv().getStringUtfChars(args[7], null).readCString())
// console.log("arg4", Memory.readUtf8String(args[4]))
// console.log("arg5", Memory.readUtf8String(args[5]))
// console.log("arg6", Memory.readUtf8String(args[6]))
// console.log("arg7", Memory.readUtf8String(args[7]))
},
onLeave: function (retval) { //onLeave: 該函數(shù)執(zhí)行結(jié)束要執(zhí)行的代碼斩芭,其中retval參數(shù)即是返回值
console.log("return:" + Java.vm.getEnv().getStringUtfChars(retval, null).readCString()); //返回值
// retval.replace(100); //替換返回值為100
}
});
控制臺打印輸出
frida的其它相關(guān)工具介紹
在之前的hook的時候轻腺,app出現(xiàn)卡死和閃退。
這可能是對frida有檢測
使用葫蘆娃大佬的魔改frida再次嘗試
github: https://github.com/hluwa/strongR-frida-android
繼續(xù)啟動frida 發(fā)現(xiàn)還是崩潰
猜測可能還有其他檢測方式
根據(jù)網(wǎng)上文章給出的frida檢測點進(jìn)行多次嘗試
經(jīng)過多次試錯后最后可知 樣本App對frida的默認(rèn)端口27042進(jìn)行檢測