专栏首页逆向技术IDAPython第三讲 搜索功能 与交叉引用功能

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)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • IDAPython入门教程 基于IDA7.5_Python3 第一讲 简介与地址获取

    IDAPython是很强大的功能. 但是在7.5支持python3之后很多函数都改变了. 所以从头开始学一下.

    IBinary
  • 逆向分析神器BinNavi开源了

    得益于IDA pro十分开放的架构,Gergely Erdelyi和Ero Carrera在2004年基于IDA pro发布了IDAPython,逆向工程师能够...

    FB客服
  • 计算机相关专业“Python程序设计”教学大纲(参考)

    适用专业:计算机科学与技术、软件工程、网络工程、通信工程、数字媒体技术大数据应用技术及其他工科专业

    Python小屋屋主
  • C#基础搜索算法

    大家好,我是苏州程序大白。下面讲讲C#中基础搜索算法。 数据搜索是基础的计算机编程工作, 而且人们对它的研究已经很多年了. 本章只会看到搜索问题的一个内容, ...

    苏州程序大白
  • Android数据库高手秘籍(十二),LitePal的索引功能

    我发现今年我的技术产出真的是很不错,自从《第一行代码 第3版》出版之后,我空余出来了大量的时间,不仅频繁地更新和维护自己编写的开源库,还参加了多场GDG活动与大...

    用户1158055
  • 研究生常用的十八大学术搜索引擎

    1、http://scholar.google.com/ 这个不多讲了. 2、http://qns.cc/ 后起之秀,科研人员的良好助手,上此网站的90%是...

    智能算法
  • Ghidra第一讲,常用快捷键.

    Ghidra是由美国国家安全局(NSA)研究部门开发的软件逆向工程(SRE)套件,用于支持网络安全任务. 其实说白了堪比IDA 是一个新的逆向工具,大家有必要学...

    IBinary
  • 数据结构-常用的查找算法

    本篇讲讲数据结构里面常用的几个查找算法,数据结构理论篇系列差不多接近尾声了,接下来会分享一些比较特殊的概念,比如KMP、郝夫曼树等等,讲完概念以后会进入刷题阶段...

    张俊红
  • 用脑机接口去“搜索一下”,是种什么体验? | CCF C³-03@搜狗

    简单来说,就是很多情况下,我们不再记忆所需的信息本身,而是记住能把它们搜索出来的方法和关键词。

    量子位
  • 从 0 开始学习 JavaScript 数据结构与算法(十一)树

    如图,树结构的组成方式类似于链表,都是由一个个节点连接构成。不过,根据每个父节点子节点数量的不同,每一个父节点需要的引用数量也不同。比如节点 A 需要 3 个引...

    XPoet
  • 123个Python黑客工具,再也不用问女朋友要手机密码了

    今天的文章来源于dloss/python-pentest-tools,本文中列举了123个Python渗透测试工具,当然不仅于渗透~ 下面我们就开始吧~ ———...

    小小科
  • 123个Python黑客工具,再也不用问女朋友要手机密码了

    今天的文章来源于dloss/python-pentest-tools,本文中列举了123个Python渗透测试工具,当然不仅于渗透~

    马哥linux运维
  • SQL反模式学习笔记17 全文搜索

    SQL的一个基本原理(以及SQL所继承的关系原理)就是一列中的单个数据是原子性的。

    张传宁IT讲堂
  • 【AutoML】进化算法如何用于自动模型搜索(NAS)

    大家好,欢迎来到专栏《AutoML》,在这个专栏中我们会讲述AutoML技术在深度学习中的应用,这一期讲述进化算法用于模型搜索的基本概念和流程。

    用户1508658
  • Android 开源项目 (AOSP) 代码搜索工具正式发布

    我们非常高兴的为各位开发者们介绍一个 Android 开源项目 (AOSP) 的代码搜索工具: cs.android.com

    Android 开发者
  • 图文详解二叉堆,实现优先级队列

    二叉堆(Binary Heap)没什么神秘,性质比二叉搜索树 BST 还简单。其主要操作就两个,sink(下沉)和swim(上浮),用以维护二叉堆的性质。其主要...

    灵魂画师牧码
  • 数据结构 02

    在《数据结构 01》一文中,说到了数组、链表、栈以及队列这几种基本的线性结构,接下来就一起来看看剩下的内容。

    贪挽懒月
  • 二叉搜索树删除节点 动画演示

    给定一个二叉搜索树的根节点 root 和一个值 key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节...

    double
  • 中国工程院院士论坛惠州召开,徐扬生、高文、王海峰、吴枫带你看AI发展与未来

    他们或详细地报告了最新的学术进展,或幽默地展示了自己最新的研究,演讲涉及到机器人、智能城市、AI 应用、类脑计算、视频编解码等多个领域。

    AI科技评论

扫码关注云+社区

领取腾讯云代金券