ida使用技巧:ida python

一、简介

ida python是ida中一个很强大的功能,早期需要另行下载,后来在6.8版本成为了内置插件,而在7.5版本更新后又对函数的命名进行了规范修整。
ida python官方提供了函数文档:https://www.hex-rays.com/wp-content/static/products/ida/support/idapython_docs/
IDC api函数文档:https://www.hex-rays.com/products/ida/support/idadoc/162.shtml

二、使用

现在几乎没有人在使用ida 6.8及以下版本了,所以ida python的安装不再介绍,直接从使用说起。

小问题

首先先解决一个小问题,因为ida7.5更新后函数名称不同,再使用老版本脚本或函数时,会出现NameError: name ‘XXXX’ is not defined这样的报错提示,解决办法有两种
方法一:
在代码面前:
from idc_bc695 import *
方法二:
修改配置文件
进入ida的存储目录,找到cfg文件下的idapython.cfg文件,修改其中参数“AUTOIMPORT_COMPAT_IDA695”值为YES
在这里插入图片描述
当然,官方更新这些api函数的名称肯定是有道理的,所以建议遇到有问题的函数之后去官方提供的对照表中查看一下新版本的函数名,链接如下:
https://www.hex-rays.com/products/ida/support/ida74_idapython_no_bc695_porting_guide.shtml

使用方法

使用ida python有三种方法
第一种:
在菜单栏中点击“文件”->“脚本命令”即可打开脚本编写窗口,快捷键是Shift+F2在这里插入图片描述
可以看到,在下方的设置选项中有一个Scripting language,在这里可以选择python或者IDC。如果选IDC的话,就只能使用IDC函数了。
第二种:
直接引用编写好的脚本文件,在菜单栏中点击“文件”->“引用脚本”即可,快捷键是Alt+F7
第三种:
直接在下方命令行输入
在这里插入图片描述

常用函数
获取地址
  • idc.get_screen_ea() 旧版:ScreenEA()
    获取 IDA 调试窗口中此时光标指向代码的地址。

  • idc.here()
    获取当前指令位置

  • ida_ida.inf_get_min_ea()
    获取最小地址

  • ida_ida.inf_get_start_ip()

  • ida_ida.inf_get_max_ea() 旧版:idc.MaxEA()
    获取最大地址

  • idc.read_selection_start() 旧版:idc.SelStart()
    当前选择区块的起始地址

  • idc.read_selection_end() 旧版:idc.SelEnd()
    当前选择区块的结束地址

获取段
  • idc.get_first_seg() 旧版:FirstSeg()
    访问程序中的第一个段。
  • idc.get_next_seg() 旧版:NextSeg()
    访问下一个段,如果没有就返回 BADADDR。
  • idc.selector_by_name(string SegmentName) 旧版:SegByName( string SegmentName )
    通过段名字返回段基址
  • idc.get_segm_end(long Address) 旧版:SegEnd( long Address )
    获取传入地址的段尾地址
  • idc.get_segm_start( long Address )旧版:SegStart( long Address )
    获取传入地址的段首地址
  • idc.get_segm_name( long Address ) 旧版:SegName( long Address )
    获取传入地址的段名
  • Segments()
    获取所有段名
获取数值
  • idc.get_wide_byte(addr) 旧版:Byte(addr)
    以字节为单位获取地址处的值
  • idc.get_wide_word(addr) 旧版:Word(addr)
    以2字节(字)为单位获取地址处的值
  • idc.get_wide_dword(addr) 旧版:Dword(addr)
    以4字节为单位获取地址处的值
  • idc.get_qword(addr) 旧版:Qword(addr)
    以8字节为单位获取地址处的值
处理数值
  • ida_bytes.patch_byte(addr,value) 旧版:idc.PatchByte(addr,value)
    修改addr地址的值为value.每次修改一个字节
  • ida_bytes.patch_word(addr,value) 旧版:idc.PatchWord(addr,value)
    修改addr地址的值为value.每次修改两个字节
  • ida_bytes.patch_Dword(addr,value) 旧版:idc.PatchDword(addr,value)
    修改addr地址的值为value.每次修改四个字节
  • ida_bytes.patch_Qword(addr,value) 旧版:idc.PatchQword(addr,value)
    修改addr地址的值为value.每次修改八个字节
函数处理相关
  • Functions( long StartAddress, long EndAddress )
    返回一个列表,包含了从 StartAddress 到 EndAddress 之间的所有函数。

  • Chunks( long FunctionAddress )
    返回一个列表,包含了函数片段。每个列表项都是一个元组(chunk start, chunk end)

  • idc.get_name_ea_simple( string FunctionName ) 旧版:LocByName( string FunctionName )
    通过函数名返回函数的地址。

  • idc.get_func_off_str( long Address ) 旧版:GetFuncOffset( long Address )
    通过任意一个地址,然后得到这个地址所属的函数名,以及给定地址和函数的相对位移。 然后把这些信息组成字符串以"名字+位移"的形式返回。

  • idc.get_func_name( long Address ) 旧版:GetFunctionName( long Address )
    通过一个地址,返回这个地址所属的函数。

  • CodeRefsTo( long Address, bool Flow )
    返回一个列表,告诉我们 Address 处代码被什么地方引用了,Flow 告诉 IDAPython 是否要 跟踪这些代码。

  • CodeRefsFrom( long Address, bool Flow )
    返回一个列表,告诉我们 Address 地址上的代码引用何处的代码。

  • DataRefsTo( long Address )
    返回一个列表,告诉我们 Address 处数据被什么地方引用了。常用于跟踪全局变量。

  • DataRefsFrom( long Address )
    返回一个列表,告诉我们 Address 地址上的代码引用何处的数据。

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
回答: IDA PythonIDA中一个强大的功能,可以通过编写Python脚本来扩展IDA的功能。安装IDA Python的步骤如下:首先,根据自己的IDA版本和Python版本,下载对应的IDAPython包。然后,将IDAPython解压后的Python文件夹内的所有内容覆盖掉IDA原有的Python文件夹。接下来,将IDAPython解压后的Plugins文件夹中的python.plw和python.p64拷贝到IDA原有的Plugins文件夹中。最后,将IDAPython解压后的python.cfg文件拷贝到IDA原有的cfg文件夹中。如果python2.7安装包中没有python27.dll,可以将python26.dll重命名为python27.dll,并确保python的系统位数与IDAPython的系统位数相同。安装完成后,可以通过编写IDA Python脚本来扩展IDA的功能。IDA Python文档提供了相关函数的详细说明,可以在官方网站上获取相关文档。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [IDA 配置python环境,可执行python脚本](https://blog.csdn.net/ayxh0058/article/details/101094191)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [ida使用技巧ida python](https://blog.csdn.net/m0_52164435/article/details/124878537)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值