IDAPython入门基础语法

这篇具有很好参考价值的文章主要介绍了IDAPython入门基础语法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考文章

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

IDAPython简介

IDAPython拥有强大的功能,在使用IDA分析程序时非常有用,可以简化许多操作例如花指令的特征码匹配修改

学习IDAPython需要了解一点Python语言的基本知识以及查询IDAPython文档
IDAPython官方文档: IDAPython documentation
直接在搜索框搜索即可匹配相关项
IDAPython入门基础语法
IDAPython入门基础语法

常用函数

获取界面地址的函数

  1. idc.here()
    获取当前光标选择的指令地址
    IDAPython入门基础语法

  2. idc.get_screen_ea()
    功能同idc.here()

  3. ida_ida.inf_get_min_ea()
    获取程序的最小地址

  4. ida_ida.inf_get_max_ea()
    获取程序最大地址

  5. idc.read_selection_start()
    获取选中区块的起始地址
    IDAPython入门基础语法

  6. idc.read_selection_end()
    获取选中区块的终止地址

  7. idc.BADADDR
    这是一个常量,定义为4294967295(0xffffffff),用于表示不可访问的空地址(类似于值等于NULL的指针),用于判断地址是否存在
    IDAPython入门基础语法

数值获取函数

  1. idc.get_wide_byte(addr)
  2. idc.get_wide_word(addr)
  3. idc.get_wide_dword(addr)
  4. idc.get_qword(addr)

数值判断函数

  1. ida_bytes.is_byte(addr)
  2. ida_bytes.is_word(addr)
  3. ida_bytes.is_dword(addr)
  4. ida_bytes.is_qword(addr)

patch操作函数

  1. ida_bytes.patch_byte(addr,value)
  2. ida_bytes.patch_word(addr,value)
  3. ida_bytes.patch_dword(addr,value)
  4. ida_bytes.patch_qword(addr,value)

去除花指令实例

NKCTF2023 Reverse earlier
该题有多个相同的花指令
IDAPython入门基础语法
IDAPython入门基础语法

.text:00401527 33 C0                         xor     eax, eax
.text:00401529 85 C0                         test    eax, eax
.text:0040152B 74 03                         jz      short near ptr loc_40152F+1
.text:0040152B
.text:0040152D 75 00                         jnz     short $+2
.text:0040152D
.text:0040152F
.text:0040152F                               loc_40152F:                             
.text:0040152F                                                                       
.text:0040152F E8 8B F4 FF 15                call    near ptr 164009BFh

很显然,xor eax,eax之后eax置零,此时test指令得到的结果必定是0
所以必定执行jz指令而非jnz (jnz指令的意思是跳转到该条指令地址+2后)
也就是说必定跳转到0x00401530处,不可能跳转到0x0040152f
我们手动去除完全可以,取消定义,nop,重新识别为代码即可
IDAPython入门基础语法
IDAPython入门基础语法
来试试IDAPython脚本:

import idc
import idautils
import ida_bytes
pattern = "33 C0 85 C0 74 03 75 00 E8" 	# 匹配花指令字节码
cur_addr = 0x401000						# 程序起始地址
while cur_addr != idc.BADADDR:			# 遍历程序可访问地址
    cur_addr = idc.find_binary(cur_addr,SEARCH_DOWN,pattern) 
    # 匹配花指令所在地址,第一个参数是起始地址,第二个参数是搜索方式,这里是向下(低地址向高地址搜索),第三个是格式字符串
    if cur_addr == idc.BADADDR:								 # 如果未匹配到
        break;
    else:
        print("patch address: ",hex(cur_addr)) 				 # 打印起始地址
        for i in range(9):									 # 开始patch
            ida_bytes.patch_byte(cur_addr,0x90)
            cur_addr += 1

可以看到所有相同的花指令都被去除了
IDAPython入门基础语法

IDAPython入门基础语法
后续内容随着学习补充ing文章来源地址https://www.toymoban.com/news/detail-428036.html

到了这里,关于IDAPython入门基础语法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Python从入门到人工智能】14个必会的Python内置函数(6)——打印输出 (详细语法参考+参数说明+具体示例) | 详解Python中的打印输出!附综合案例!

      你有不伤别人的教养,却缺少一种不被别人伤害的气场,若没有人护你周全,就请你以后善良中带点锋芒,为自己保驾护航。   🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[

    2024年02月15日
    浏览(62)
  • C++(1) —— 基础语法入门

    一、C++初识 1.1 第一个C++程序 1.2 注释  1.3 变量 1.4 常量 1.5 1.6 标识符命名规则 二、数据类型 2.1 整型 2.2 sizeof 2.3 实型(浮点型) 2.4 字符型 2.5 转义字符 2.6 字符串型 2.7 布尔类型 bool 2.8 数据的输入 三、运算符 3.1 算术运算符 3.1.1 加减乘除运算  3.1.2 取模运算

    2024年01月18日
    浏览(86)
  • Unity入门基础语法

    transform.position 世界坐标 transform.localPosition  相对坐标 设置物体的坐标: this.transform.localPosition = new Vector3(1.5f, 0, 2.0f); Update(),称为帧更新 此方法会被游戏引擎定时调用,已更新游戏的状态 Time.time 游戏启动的时间 Time.deltaTime 距上次帧更新的时间差 Unity不支持固定帧率,但可

    2024年02月03日
    浏览(86)
  • 【Python从入门到人工智能】16个必会的Python内置函数(4)——数据转换与计算 (详细语法参考+参数说明+具体示例) | 求和、四舍五入、幂运算的综合应用

      成长的标准就是,拒绝别人以后,没有任何的愧疚感。——萨特     🎯作者主页: 追光者♂🔥          🌸个人简介:   💖[1] 计算机专业硕士研究生💖   🌟[2] 2022年度博客之星人工智能领域TOP4🌟   🏅[3] 阿里云社区特邀专家博主🏅   🏆[4] CSDN-人工智能领域优质

    2024年02月15日
    浏览(74)
  • Java入门&IDEA&基础语法

    1.1 Java简介 Java是什么: Java是一门非常优秀的计算机语言 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 Java之父:詹姆斯·高斯林(James Gosling) 知道了Java是什么之后,大家就会 想,我们学完Java可以做什么呢?下面,我们

    2024年01月21日
    浏览(45)
  • 【Python入门】Python基础语法

    前言 📕作者简介: 热爱跑步的恒川 ,致力于C/C++、Java、Python等多编程语言,热爱跑步,喜爱音乐的一位博主。 📗本文收录于Python零基础入门系列,本专栏主要内容为Python基础语法、判断、循环语句、函数、函数进阶、数据容器、文件操作、异常模块与包、数据可视化等,

    2024年02月03日
    浏览(80)
  • C++基础入门——语法详解篇(下)

    文章目录 一、缺省参数 1、1 缺省参数的概念 1、2 缺省参数的分类 1、2、1 全部缺省 1、2、2 半缺省参数 二、引用 2、1 引用的概念 2、2 引用特征 2、3 引用的使用场景 2、3、1 引用做参数  2、3、2 常引用 2、3、3 引用做返回值  2、4 引用总结 三、内联函数 3、1 内联函数的引出

    2023年04月24日
    浏览(34)
  • Python零基础入门(一)——Python简介与基础语法

    个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页 Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟 码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊 Python是一门适合初学者入门的编程语言,本文将介

    2024年02月10日
    浏览(40)
  • Java入门高频考查基础知识9(银盛15问万字参考答案)

    JAVA刷题专栏: 目录 一、Springcloud的工作原理 三、注册中心心跳是几秒 四、消费者是如何发现服务提供者的 五、多个消费者调⽤用同⼀接口,eruka默认的分配⽅式是什么 六、springboot常用注解,及其实现 七、spring的事务注解是什么?什么情况下事物才会回滚 八、spring事物的

    2024年02月20日
    浏览(57)
  • Python入门教程 | Python 基础语法

    第一个字符必须是字母表中字母或下划线 _ 。 标识符的其他的部分由字母、数字和下划线组成。 标识符对大小写敏感。 在 Python 3中,可以用中文作为变量名,非 ASCII 标识符也是允许的了。默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是 unicode 字符串。 在Python中

    2024年02月11日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包