IDAPython第三讲 搜索功能 与交叉引用功能

IDAPython第三讲 搜索功能 与交叉引用功能

一丶搜索函数简介

​ 在IDAPython中如果我们想查询某些 数据 代码 二进制 都可以用都搜索函数.

搜索函数可以是向上搜索 也可以是向下搜索. 搜索失败就会返回-1 也就是BADADDR

而搜索功能也常常用于去除花指令当中.

在官网中可以点击此链接进行观看学习:

IDAPython 升级版查找函数

IDAPython中 isxxx判断函数

IDAPtyhon中的引用功能

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中都给我们提供了函数功能. 下面来看看如何操作吧.

这里只介绍如何对引用做操作. 至于添加引用删除引用 可以观看文档.

IDAPtyhon中的引用功能

函数 作用
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)
posted @   iBinary  阅读(2376)  评论(0编辑  收藏  举报
编辑推荐:
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
阅读排行:
· 本地部署 DeepSeek:小白也能轻松搞定!
· 基于DeepSeek R1 满血版大模型的个人知识库,回答都源自对你专属文件的深度学习。
· 在缓慢中沉淀,在挑战中重生!2024个人总结!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 大人,时代变了! 赶快把自有业务的本地AI“模型”训练起来!
点击右上角即可分享
微信分享提示