IDA python查找问题



我的目标是在进程的整个内存范围内搜索以下模式:

pop *
pop *
retn

我尝试过使用FindText,但它似乎只返回IDA中已经为其指令解析的区域的结果。因此,要使用FindText-id,需要弄清楚如何解析整个内存范围的指令(这似乎很密集(。

所以我切换到FindBinary,但我也遇到了一个问题。我搜索的模式只需要匹配字节的前5位,其余的都是通配符。所以我的目标是搜索:

01011***
01011*** 
11000011

我发现一些帖子声称IDA有?字节的通配符,但我还没能让它工作,即使它工作了,它似乎也只能工作整整8位。因此,对于这种方法,我需要找到一种方法来搜索比特模式,然后解析结果周围的比特。这似乎是最可行的途径,但到目前为止,我还没能在文档中找到任何可以搜索这样的内容的东西。

有人知道如何实现我想要的吗?

在经典的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

现在,如果我能弄清楚如何在每个指令中使用通配符就好了。因为对于这个解决方案,我需要知道模式的至少一个完整字节

最新更新