IDAPython第三讲 搜索功能 与交叉引用功能
IDAPython第三讲 搜索功能 与交叉引用功能
一丶搜索函数简介
在IDAPython中如果我们想查询某些 数据 代码 二进制 都可以用都搜索函数.
搜索函数可以是向上搜索 也可以是向下搜索. 搜索失败就会返回-1 也就是BADADDR
而搜索功能也常常用于去除花指令当中.
在官网中可以点击此链接进行观看学习:
flag的取值如下:
flag取值有:
SEARCH_DOWN 向下搜索
SEARCH_UP 向上搜索
SEARCH_NEXT 获取下一个找到的对象。
SEARCH_CASE 指定大小写敏感度
SEARCH_UNICODE 搜索 Unicode 字符串。
常见的函数如下: (IDA7.5之前版本与IDA7.5改版后的高级支持版本)
老函数 | 作用 | 新函数 |
---|---|---|
idc.FindBinary | 查找二进制找到返回地址没找到返回-1(BADADDR) | idc.find_binary(ea, flag, searchstr, radix=16, from_bc695=False) |
idc.FindData | 从ea还是返回查找的数据 | idc.find_data 或者ida_search.find_data |
idc.FindCode | 查找代码找到指定地址的代码 | idc.find_code 可以使用 ida_search.find_code 也可以使用 |
idc.Jump | 跳转到ea位置 | ida_kernwin.jumpto(ea) |
例子:
ea = here()
value = idc.find_binary(ea,SEARCH_DOWN,'8B 4D 08') 从ea位置向下查找 查找的二进制为8B 4D 08 返回查找到的地址
value1 = idc.find_code(ea,SEARCH_DOWN) 从ea还是查找找到ea下的第一行code代码地址
value2 = idc.find_data(ea,SEARCH_DOWN)
其中常见的就是上方表示的几个函数
IDA升级之后其查找函数都变为了 ida_search.find_xxx了. 择优选择去官网学习.
而后可以使用 is_code is_data is_xxx函数来判断获取的值是否是对的.
二丶数据校验函数
数据校验函数就是isxxx 但是它的参数是一个flag所以我们要先使用函数来获取flag 然后在将获取的值传入isxxx 来进行判断.
老函数 | 作用 | 新函数 |
---|---|---|
idc.GetFlags(ea) | 获取标志 | ida_bytes.get_full_flags |
idc.isCode(f) | 判断是否是代码传入标志 根据标志返回True or False | ida_bytes.is_code(f) |
idc.isData(f) | 同上 只不过是判断是否是数据 | ida_bytes.is_data(f) |
示例如下:
import idc
ea = here()
value1 = idc.find_code(ea,SEARCH_DOWN)
print(hex(value1))
flag = ida_bytes.get_full_flags(value1)
print(flag)
print(ida_bytes.is_code(flag))
三丶交叉引用功能
在我们实际在IDA的操作中 我们常常会对一个函数按X快捷键来查看谁引用了. 或者对数据看看谁引用了他. 这些在IDAPython中都给我们提供了函数功能. 下面来看看如何操作吧.
这里只介绍如何对引用做操作. 至于添加引用删除引用 可以观看文档.
函数 | 作用 |
---|---|
CodeRefsTo( long Address, bool Flow ) | 获取地址处引用位置 A调用B 对B函数地址使用此函数则找到A调用 返回列表.遍历列表则可以找出所有引用位置. 参数1是ea也就是地址,参数2告诉IDA是否跟踪这些代码. |
CodeRefsFrom( long Address, bool Flow ) | 返回address的代码引用了何处的代码. 返回一个列表 |
DataRefsTo( long Address ) | 返回一个列表告诉address位置的数据被谁引用了 |
DataRefsFrom( long Address ) | 同上 告诉我们address引用了谁. |
代码如下:
import idc
ea = here()
for i in CodeRefsTo(ea,False):
print(hex(i))
# DataRefsTo(ea):
#DataRefsTo(ea)
作者:IBinary
坚持两字,简单,轻便,但是真正的执行起来确实需要很长很长时间.当你把坚持两字当做你要走的路,那么你总会成功. 想学习,有问题请加群.群号:725864912(收费)群名称: 逆向学习小分队 群里有大量学习资源. 以及定期直播答疑.有一个良好的学习氛围. 涉及到外挂反外挂病毒 司法取证加解密 驱动过保护 VT 等技术,期待你的进入。
详情请点击链接查看置顶博客 https://www.cnblogs.com/iBinary/p/7572603.html
本文来自博客园,作者:iBinary,未经允许禁止转载 转载前可联系本人.对于爬虫人员来说如果发现保留起诉权力.https://www.cnblogs.com/iBinary/p/14801928.html
欢迎大家关注我的微信公众号.不定期的更新文章.更新技术. 关注公众号后请大家养成 不白嫖的习惯.欢迎大家赞赏. 也希望在看完公众号文章之后 不忘 点击 收藏 转发 以及点击在看功能. QQ群: