IDA 的变更

在做逆向的时候,有时会涉及到对硬指令的更改,不论是直接修改还是异或之类的,由于数据量比较大,所以会用到 IDA 提供的脚本编辑器(shift + F2

但是网上有些 WP 给出的是比较旧的 IDA 脚本,在新版 IDA 中使用会报出各种 "NameError: name xxx is not defined" 的错误,这是因为 IDA 官方在新版中修改了部分 API 的名称,导致新旧版本不互通


脚本示例

  • 在旧版本中:
address = 0x600b00
for i in range(182): 
	PatchByte(address + i, Byte(address + i) ^ 0xC)
  • 在新版本中
address = 0x600B00
for i in range(182):
	ida_bytes.patch_byte(address + i, idc.get_wide_byte(address + i) ^ 0xC)

在 IDA 7.0 以后的版本中,要将:
idc.PatchByte() 改为 ida_bytes.patch_byte()
idc.Byte() 改为 idc.get_wide_byte()


解决方法

网上解决方法提到了很多,但是我尝试之后,发现大部分方法在我使用的 吾爱破解论坛 版的 IDA Pro 7.7.220118 (SP1) 全插件绿色版 上无效,最后我是在 IDA 官方文档上解决

为避免大家再次踩坑,所以记录一下


官方文档

Hex-Rays 在官网的 The guide 部分列出了新版与旧版 IDA 中 API 的名称变化,需要时可以 ctrl + F 自行查找 API 名称是否变动(一般旧版在函数名前加上 idc,例如 idc.xxx()


其他方法

其他方法在我的 IDA 版本中无效,但是也搜集了一下,说不定其他版本可以