qq群:555054687

过掉百度加固的java层调试

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

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"




评论

© fcc_load | Powered by LOFTER