前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IDAPython第三讲 搜索功能 与交叉引用功能

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

作者头像
IBinary
发布2021-05-27 11:03:21
2.1K1
发布2021-05-27 11:03:21
举报
文章被收录于专栏:逆向技术逆向技术逆向技术

目录

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)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IDAPython第三讲 搜索功能 与交叉引用功能
    • 一丶搜索函数简介
      • 二丶数据校验函数
        • 三丶交叉引用功能
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档