正文
)
成功命中了,但是nop掉这三处之后app不知道为什么就卡死了
hook clone
这里我又找到了更底层的clone函数创建线程检测方法
某邦企业壳frida检测绕过
https://bbs.kanxue.com/thread-285932.htm
function hook_clone(soname){ var clone = Module.findExportByName('libc.so', 'clone'); Interceptor.attach(clone, { onEnter: function(args) { // args[3] 子线程的栈地址。如果这个值为 0,可能意味着没有指定栈地址 if(args[3] != 0){ var addr = args[3].add(96).readPointer() var so_name = Process.findModuleByAddress(addr).name; var so_base = Module.getBaseAddress(so_name); var offset = (addr - so_base); console.log("===============>", so_name, addr,offset, offset.toString(16)); } }, onLeave: function(retval) { } }); }setImmediate(hook_clone, "libmsaoaidsec.so")
这样也能成功获取到线程函数的地址
hook strstr
frida常用检测点及其原理--一把梭方案
https://bbs.kanxue.com/thread-278145-1.htm
我们不妨进入这几个线程函数,来看看到底做了些什么
可以推测,就是open了一些系统文件,然后fgets获取其信息,再进行ststsr的关键点检测。
function hook_pthread_create(soname) { var pt_strstr = Module.findExportByName("libc.so", 'strstr'); var pt_strcmp = Module.findExportByName("libc.so", 'strcmp'); Interceptor.attach(pt_strstr, { onEnter: function (args) { var str1 = args[0].readCString(); var str2 = args[1].readCString(); if ( str2.indexOf("REJECT") !== -1 || str2.indexOf("tmp") !== -1 || str2.indexOf("frida") !== -1 || str2.indexOf("gum-js-loop"