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 @ 2021-05-23 19:36  iBinary  阅读(2164)  评论(0编辑  收藏  举报