如何食用idapython

j1ya Lv5

基础知识

IDA菜单栏File选项下的Script file…对应导入脚本,Script command…对应自行编写命令

编写命令主要有两种脚本语言:IDC和Python。IDC是IDA自带的脚本语言(类似 C 语言), IDA后来加入Python支持,是现在主流语言,下面以Python为例介绍

如果无法选择Python大概率是IDA找不到可用的Python,可以双击IDA文件夹路径下的idapyswitch查看可用Python版本

idapython核心有如下3个python模块:

  1. idc模块负责提供IDC中所有的函数功能;
  2. idautils提供大量的实用函数,其中许多函数可生成各种数据库相关对象(如函数或交叉引用)的python列表;
  3. idaapi 允许使用者通过类的形式,访问更多底层的数据;

需要注意的是idapython会自动导入idc和idautils模块,idaapi模块需要自己手工导入

无论读写内存,单词和对应字节长度关系如下:

  • byte<->1字节
  • word<->2字节
  • dword<->4字节
  • qword<->8字节

主要用法

获取值

idc.get_wide_byte(addr):获取addr对应的字节

1
2
3
4
5
6
7
8
9
10
start_addr = 0x7FF671784040 
end_addr = 0x7FF67178D83C

output = bytearray()
for addr in range(start_addr, end_addr + 1, 4):
value = idc.get_wide_byte(addr)
output.append(value)

with open("tmp.exe", "wb") as f:
f.write(output)

修改值

ida_bytes.patch_byte(addr,value):修改addr对应的字节

1
2
3
4
5
6
7
for i in range(0x140011000,0x140012e00):
patch_byte(i,get_wide_byte(i)^0x81)
addr = 0x055CAA9008300
test = "b949b7688a7ab3bc26862d161312831e"
ps = [i for i in b''.fromhex(test)]
for i, v in enumerate(ps):
ida_bytes.patch_qword(addr+i * 8, v)

打印寄存器值

1
2
eax = get_reg_value('eax')
print(chr(eax),end='')

idapython完整用法可参考:

https://wonderkun.cc/2020/12/11/idapython%E4%BD%BF%E7%94%A8%E7%AC%94%E8%AE%B0/

  • 标题: 如何食用idapython
  • 作者: j1ya
  • 创建于 : 2025-08-23 21:39:55
  • 更新于 : 2026-08-24 08:40:55
  • 链接: https://redefine.ohevan.com/2025/08/23/如何食用idapython/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论