经常在用IDA调试时, 一些断点如文件打开, 或是发送数据会频繁的断下来, 每次断下去查看是不是我们关注的数据, 以此判断来源, 这太费时间, 也常导致程序超时, 正常流程没法继续, 强大的IDA为我们提供了 脚本条件, 可以选择IDC或是Python.

如图:

在断点处右键编辑断点,

点击右边的按钮在输入框中输入脚本即可, 返回False表示不中断
返回 True 断点将激活中断下来. 以此我们还可以在条件中增加msg, 从而实现不中断而显示信息的功能. 下面给出一个示例脚本:

def dumpbytes(pdata, blen):
    msg("%03d: " % blen)
	for i in range(blen):
		msg("%02X " % get_byte(pdata+i))
	msg("\n")	
	
phead = get_dword(cpu.r1+4)
pdata = get_dword(phead)
binlen = get_word(phead+4)
dumpbytes(pdata, binlen)
if (binlen == 16):
	if (get_dword(pdata+3) == 0x1919181B):
		return True

return False

同时我们也可以利用条件断点脚本, 修改寄存器或内存数据.

IDA 对数据库相应位置应用补丁脚本

from idaapi import *

def PatchArr(dest, str):
     for i, c in enumerate(str):
       idc.PatchByte(dest+i, ord(c));

ea = ScreenEA()
data = "\xE0\x69\x03\x68"
for i in range(0,18):
    data += "\x00\xBF"
    
PatchArr(ea, data)
       

转载请注明转自: 听风 , 本文固定链接: IDA 调试条件断点的使用示例