【问题标题】:IDA python Find issuesIDA python 查找问题
【发布时间】:2020-10-05 08:32:53
【问题描述】:

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

pop *
pop *
retn

我尝试过使用 FindText,但它似乎只返回已在 IDA 中针对其指令进行解析的区域的结果。所以要使用 FindText id 需要弄清楚如何解析整个内存范围的指令(这似乎很密集)。

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

01011***
01011*** 
11000011

我发现一些帖子声称 IDA 有 ?字节的通配符,但我无法让它工作,即使它做到了,它似乎只适用于完整的 8 位。所以对于这种方法,我需要找到一种方法来搜索位模式,然后解析结果周围的位。这似乎是最可行的路线,但到目前为止我还没有在docs 中找到任何可以搜索这样的位的内容。

有人知道实现我想要的方法吗?

【问题讨论】:

    标签: python assembly ida


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2010-09-18
      • 2011-02-14
      • 1970-01-01
      • 2014-02-24
      • 1970-01-01
      • 2019-03-31
      • 2021-05-21
      • 2020-11-29
      • 2014-07-13
      相关资源
      最近更新 更多