python - 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
现在,如果我能弄清楚如何在每条指令中使用通配符来做到这一点。因为对于这个解决方案,我需要知道至少一个完整的模式字节
推荐阅读
- php - 附加子元素时,PHP DOMDocument 缺少断线
- rust - 如何为实现另一个特征的类型实现特征而不冲突的实现
- python - Python UDP 服务器无法接受客户端连接
- ubuntu - Netcat 抛出“getnameinfo:名称解析临时失败”错误
- elasticsearch - 如何创建一个记录到特定 Elasticsearch 索引的 Laravel Logger?
- html - 如何在记事本++中的标签内换行段落或文本
- python - 如何让 UDP 服务器在 Python 中不断接收数据报
- java - 如何同时按下多个键?JavaFX
- angular - 通过选择器(sidenav)不可见角度组件
- pandas - Python:如何从熊猫的特定列中获取价值?