Frida检测是一种常见的安卓逆向技术,常用于防止应用程序被反向工程。如果您遇到了Frida检测,您可以尝试以下方法来绕过它: 使用MaGISk Hide模块:Magisk是一个强大的安卓root工具,它附带了一个Magisk Hide模
Frida检测是一种常见的安卓逆向技术,常用于防止应用程序被反向工程。如果您遇到了Frida检测,您可以尝试以下方法来绕过它:
使用MaGISk Hide模块:Magisk是一个强大的安卓root工具,它附带了一个Magisk Hide模块,可以帮助您隐藏root权限。这可以帮助您绕过Frida检测。
使用Xposed框架:Xposed框架可以帮助您实现一些高级的安卓逆向技术,包括绕过Frida检测。您可以使用Xposed模块来隐藏您的应用程序信息。
使用Frida Gadget:Frida Gadget是一个用于Frida检测的小型应用程序,可以帮助您绕过检测。将其与Frida一起使用,可以帮助您实现高级的安卓逆向技术。
在使用frida 附加时候发现进程退出,我们首先查看是在哪里结束进程的
function hook_dlopen() { Interceptor.attach(Module.findExportByName(null, "Android_dlopen_ext"), { onEnter: function (args) { var pathptr = args[0]; if (pathptr !== undefined && pathptr != null) { var path = ptr(pathptr).readCString(); console.log("load " + path); } } } );}
通过 dlopen可以发现在模块libnative-lib.so 执行处进程结束
分析模块libnative-lib.so,找关键位置
有两处位退出进程位置函数 check_loop通过maps 内存中的关键字符串查找检测frida.
void __fastcall __noreturn check_loop(void *a1){ for ( i = 0; ; ++i ) { fd = open("/proc/self/maps", 0); if ( fd >= 1 ) { while ( read(fd, buf, 0x200u) >= 1 ) { v11 = buf; v10 = "frida"; haystack = buf; needle = "frida"; if ( strstr(buf, "frida") ) { v1 = getpid(); kill(v1, 9); } if ( sscanf(buf, "%x-%lx %4s %lx %*s %*s %s", &buf[516], &buf[512], &v5, &v4, s) == 5 && v5 == 114 && v6 == 112 && !v4 ) { strlen(s); } } } close(fd); sleep(1u); }}
通过断点标记这两处进程退出位置方便后续返回查看
修改位置有两处,直接IDA keypath nop掉重打包,或这利用frida hook.下面用frida hook方式nop掉结束进程的两处关键点
nop 掉0x9498处exit调用
2.nop 掉0x92C2处kill
实现代码如下
//指令输出function dis(address, number) { for (var i = 0; i < number; i++) { var ins = Instruction.parse(address); console.log("address:" + address + "--dis:" + ins.toString()); address = ins.next; }}function hook() { //call_function("DT_INIT", init_func_, get_realpath()); var linkermodule = Process.getModuleByName("linker"); var call_function_addr = null; var symbols = linkermodule.enumerateSymbols(); for (var i = 0; i < symbols.length; i++) { var symbol = symbols[i]; if (symbol.name.indexOf("__dl__ZL13call_functionPKcPFviPPcS2_ES0_") != -1) { call_function_addr = symbol.address; } } Interceptor.attach(call_function_addr, { onEnter: function (args) { var type = ptr(args[0]).readUtf8String(); var address = args[1]; var sopath = ptr(args[2]).readUtf8String(); console.log("loadso:" + sopath + "--addr:" + address + "--type:" + type); if (sopath.indexOf("libnative-lib.so") != -1) { var libnativemodule = Process.getModuleByName("libnative-lib.so"); var base = libnativemodule.base; //nop kill // .text:000092BA B loc_92BC // .text:000092BC ; --------------------------------------------------------------------------- // .text:000092BC // .text:000092BC loc_92BC ; CODE XREF: check_loop(void *)+5E↑j // .text:000092BC BLX getpid // .text:000092C0 MOVS R1, #9 ; sig // .text:000092C2 BLX kill console.log("---------------- nop kill begin -------------") dis(base.add(0x92BA).add(1), 10); //方式一修改内存 // Memory.protect(base.add(0x92C2), 4, 'rwx'); // base.add(0x92C2).writeByteArray([0x00, 0xbf, 0x00, 0xbf]); //方式二修改内存 var patchaddr=base.add(0x92C2); Memory.patchCode(patchaddr, 4, patchaddr => { var cw = new ThumbWriter(patchaddr); cw.putNop(); var cw = new ThumbWriter(patchaddr.add(0x2)); cw.putNop(); cw.flush(); }); console.log("++++++++++++ nop kill end +++++++++++++") dis(base.add(0x92BA).add(1), 10); // nop exit // .text:0000948E CMP R0, #0 // .text:00009490 BEQ loc_949C // .text:00009492 B loc_9494 // .text:00009494 ; --------------------------------------------------------------------------- // .text:00009494 // .text:00009494 loc_9494 ; CODE XREF: anti_frida_loop(void)+26↑j // .text:00009494 MOV.W R0, #0xFFFFFFFF ; status // .text:00009498 BLX exit console.log("--------------- nop exit begin -------------") dis(base.add(0x948E).add(1), 10); //keystone Memory.protect(base.add(0x9498), 4, 'rwx'); base.add(0x9498).writeByteArray([0x00, 0xbf, 0x00, 0xbf]); console.log("+++++++++++++++ nop exit end +++++++++++++") dis(base.add(0x948E).add(1), 10); } } })}function main(){ hook();}setImmediate(main);
总结:
绕过Frida检测的方法有很多种,以下是一些可能的方法:
使用Frida Bypass插件:这是一款Frida插件,可以自动绕过Frida检测,并让Frida无法对应用程序进行监控。
使用Frida Gadget库:这是一个动态Frida库,可以在运行时注入Frida,以避免被检测到。
修改应用程序代码:通过修改应用程序代码,可以让Frida无法监控应用程序。
使用防检测框架:有些防检测框架可以绕过Frida的检测,例如Xposed框架、VirtualXposed、Magisk等。
使用其他工具:除了Frida,还有其他工具可以用来监控应用程序,例如Xposed、Cydia Substrate等。如果使用这些工具,Frida将无法监控应用程序。
来源地址:https://blog.csdn.net/qq_37431937/article/details/131114434
--结束END--
本文标题: android frida检测绕过
本文链接: https://www.lsjlt.com/news/386301.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-01-21
2023-10-28
2023-10-28
2023-10-27
2023-10-27
2023-10-27
2023-10-27
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0