在百度加固中正确使用ida的姿势

本文介绍了一种绕过百度加固中使用的调试检测方法。通过Hook VMDebug.isDebuggerConnected()函数,实现对调试状态的修改,使IDA等调试工具能够继续工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转:http://bbs.pediy.com/showthread.php?p=1427471#post1427471


在百度的加固中会使用这句话来判断本程序是否被调试

if (!Debug.isDebuggerConnected())

这样对于ida使用者而言,网上的公开调试方式so的方式就不可以用了,怎么办呢?

闲来没事分析了一下,调用的是下面这个函数

public static boolean isDebuggerConnected(){

       return VMDebug.isDebuggerConnected();

}

在libcore\dalvik\src\main\java\dalvik\system\VMDebug.java下:

public static native boolean isDebuggerConnected()

发现是一个native函数,那就hook它过调试检测。

下面给出脚本:

from idaapi import *  

from idc import *





debug_addr = LocByName("_Z25dvmDbgIsDebuggerConnectedv")

end = FindFuncEnd(debug_addr) - 0x02

count = 0;

class DumpHook(DBG_Hooks):

    def dbg_bpt(self,tid,ea):

        global count

        r0 = GetRegValue('r0')

        if r0 == 1:

            count = count + 1

            if count == 2:

                SetRegValue(0,"r0")

        ResumeProcess()

        return 0



AddBpt(end)

debug = DumpHook()

debug.hook()

print "hook"  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值