IDA Python

前言

IDAPython 是 IDA Pro(一款二进制静态分析工具)的 Python 插件,它为用户提供了使用 Python 脚本进行自动化和扩展功能的能力。通过 IDAPython,用户可以在 IDA Pro 环境中编写脚本来执行各种任务,包括二进制分析、自动化反汇编、插件开发等。

官方文档传送门

常用函数

函数名

功能

patch_byte(EA,buf)

将地址EA处的字节值替换为buf的值

get_wide_qword(ea)

读取指定地址处的 8 字节数据

get_wide_dword(ea)

读取指定地址处的 4 字节数据

get_wide_word(ea)

读取指定地址处的 2 字节数据

get_wide_byte()

获取在指定地址处的 1 字节宽度的字节(Byte)值

here()

获取IDA当前地址

实战

以[GFCTF 2021]wordy题目为例,找到main函数之后可以发现是花指令。

image-20230904181507740

这个题我们只要把这些花指令nop掉就可以了。可以看出来这个花指令有亿点多,所以我们需要写个脚本。

for i in range(0x1135,0x3100): # 0x3100是花指令结束的地址
    if get_wide_byte(i) == 0xeb and get_wide_byte(i+1) == 0xff:
        patch_byte(i,0x90)

image-20230904184016778

可以看到换完之后数据已经出来了。接下来把这些数据打印出来就可以了。

for i in range(0x1135,0x3100):
    if get_wide_byte(i) == 0xbf:
        print(chr(get_wide_byte(i+1)),end='')