
本文是对于了版本7.26.1,以及版本7.76.0的frida检测进行的分析研究以及绕过
bilibili 7.26.1bilibili的旧版本frida检测
可以看到按照Spawn的方式启动的时候,直接frida就被检测了。我们按照 hook dlopen去查看可能出现的对应frida检测的so文件。
function hook_dlopen(soName = '') {
Interceptor.attach(Module.findExportByName(null, "android_dlopen_ext"), {
onEnter: function(args) {
var pathptr = args[0];
if (pathptr) {
var path = ptr(pathptr).readCString();
console.log("Loading: " + path);
if (path.indexOf(soName) >= 0) {
console.log("Already loading: " + soName);
// hook_system_property_get();
}
}
}
});
}
setImmediate(hook_dlopen, "libmsaoaidsec.so");手机号码:13302071130
可以看到的是libmsaoaidsec.so文件,在dlopen了之后,frida就被检测到了,所以大概率的可能是在libmsaoaidsec.so进行的frida检测。在这里之前,我们需要知道是在哪进行HOOK是最为有用的
鐧惧害缃戦〉鐗堟棤闇€鍦ㄦ湰鍦拌澶囦笂瀹夎浠讳綍杞欢锛屽彧闇€鎵撳紑娴忚鍣紝杈撳叆www.baidu.com锛屽嵆鍙殢鏃堕殢鍦颁韩鍙楃櫨搴︽彁渚涚殑鍚勭被鍦ㄧ嚎鏈嶅姟銆傝繖绉嶄究鎹锋€т娇寰楃櫨搴︽垚涓哄箍澶х敤鎴疯幏鍙栦俊鎭€佷氦娴佹€濇兂鐨勯閫夊钩鍙般€?/p>
浜屻€佹牳蹇冨姛鑳?/strong>
这里我们可以通过在dlopen结束之后,去HOOK JNI_Onload函数,去判断检测函数在JNI_Onload之前还是之后,钢绞线我们通过IDA可以去查看JNI_Onload的地址。这里是在JNI_Onload之前出现的frida检测。
function hook_JNI_OnLoad(){
let module = Process.findModuleByName("libmsaoaidsec.so")
Interceptor.attach(module.base.add(0xC6DC + 1), {
onEnter(args){
console.log("JNI_OnLoad")
}
})
}
我们通过HOOK 进程创建,来看看对于frida检测的线程是在哪里启动的。在复现过程中,原作者使用了hook _system_property_get函数,这里是 init_proc函数较早的位置,这里涉及到了安卓源码中dlopen和.init_xx函数的执行流程比较,在我的so文件执行流程的过程中有细节分析。
function hook_system_property_get() {
var system_property_get_addr = Module.findExportByName(null, "__system_property_get");
if (!system_property_get_addr) {
console.log("__system_property_get not found");
return;
}
Interceptor.attach(system_property_get_addr, {
onEnter: function(args) {
var nameptr = args[0];
if (nameptr) {
var name = ptr(nameptr).readCString();
if (name.indexOf("ro.build.version.sdk") >= 0) {
console.log("Found ro.build.version.sdk, need to patch");
// hook_pthread_create();
// bypass()
//这里可以开始进行HOOK
}
}
}
});
}
由于我们知道廊坊预应力钢绞线价格,frida检测的是在JNI_Onload函数之前,那么我们就要在init_proc的越早的地方可以进行HOOK,我们HOOK的地方就是线程创建的位置pthread_create。
function hook_pthread_create() {
var pthread_create = Module.findExportByName("libc.so", "pthread_create");
var libmsaoaidsec = Process.findModuleByName("libmsaoaidsec.so");
if (!libmsaoaidsec) {
console.log("libmsaoaidsec.so not found");
return;
}
console.log("libmsaoaidsec.so base: " + libmsaoaidsec.base);
if (!pthread_create) {
console.log("pthread_create not found");
return;
}
Interceptor.attach(pthread_create, {
onEnter: function(args) {
var thread_ptr = args[2];
if (thread_ptr.compare(libmsaoaidsec.base) < 0