安卓逆向之java层反调试isDebuggerConnected

在做某app的so层逆向时,发现ida附加jdb,在linker加载so的时候崩了。发现了java层的Debug.isDebuggerConnected()。

虽然不是因为这个原因导致的ida动态调试失败,但是在网上查阅怎么绕过java层反调试的时候,发现全网都是抄一份百度加固的Debug.isDebuggerConnected(),说是改smali然后回编译。然而根本没用,现在的app都有签名校验,改完回编译app根本打不开。所以在这里记录一下绕过方法。

其实很简单,直接hook系统函数isDebuggerConnected(),修改返回值为false就可以了。我用的是frida做hook。

frida代码:
在这里插入图片描述

自己写了一个比较简单的Android代码测试,如果检测到调试器就会打印检测到调试器,否则就会打印hello C++。这里我为了练习,调用native层的方法来给res赋值。
在这里插入图片描述
断点打在判断debug之前,然后debug模式启动,打开frida。
Hook截图:
在这里插入图片描述
可以看到hook是成功的。
我在调试某app的so时,发现java层做了isdebugger的判断,但是frida并没有hook到,在linker加载so时app发生闪退。这一点我一直百思不得其解,在网上查阅各种资料发现so层反调试都是需要写在so文件里,可以在动态调试时,修改内存值来跳过。在初始化so时发生程序崩溃的相关资料,找了好久也没有发现。如果有人可以帮忙指点一下解决这个问题,请私聊我或者留下联系方式我愿意重金感谢。

如果想要交流技术,可以加群:546452230。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值