在百度的加固中会使用这句话来判断本程序是否被调试
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"