我在这里的目标是在进程的整个内存范围内搜索以下模式:
pop *
pop *
retn我尝试过使用FindText,但它似乎只返回已经在IDA中解析其指令的区域的结果。因此,要使用FindText id,需要弄清楚如何解析整个内存范围中的指令(这似乎是密集的)。
所以我转而使用FindBinary,但在那里我也遇到了一个问题。我搜索的模式只需要匹配字节的前5位,其余的是通配符。所以我的目标是搜索:
01011***
01011***
11000011我发现有帖子说IDA有一个?字节的通配符,但我不能让它工作,即使它工作,它似乎只工作了整整8位。因此,对于这种方法,我需要找到一种方法来搜索位模式,然后解析结果周围的位。这似乎是最可行的路线,但到目前为止,我还没有在docs中找到任何可以像这样搜索比特的东西。
谁知道实现我想要的东西的方法?
发布于 2020-10-05 08:32:53
在经典的stackoverflow风格中,我花了几个小时试图弄清楚,然后在请求帮助20分钟后,我找到了我需要的确切函数,get_byte()
def find_test():
base = idaapi.get_imagebase()
while True:
res = FindBinary(base, SEARCH_NEXT|SEARCH_DOWN, "C3")
if res==BADADDR: break
if 0b01011 == get_byte(res-1) >> 3 and 0b01011 == get_byte(res-2) >> 3:
print "{0:X}".format(res)
base=res+1现在,如果我能弄清楚如何在每条指令中使用通配符就好了。因为对于这个解决方案,我至少需要知道模式的一个完整字节
https://stackoverflow.com/questions/64201037
复制相似问题