参考文章
IDAPython入门教程 基于IDA7.5_Python3 第一讲 简介与地址获取
IDAPython简介
IDAPython拥有强大的功能,在使用IDA分析程序时非常有用,可以简化许多操作例如花指令的特征码匹配修改
学习IDAPython需要了解一点Python语言的基本知识以及查询IDAPython文档
IDAPython官方文档: IDAPython documentation
直接在搜索框搜索即可匹配相关项
常用函数
获取界面地址的函数
-
idc.here()
获取当前光标选择的指令地址 -
idc.get_screen_ea()
功能同idc.here() -
ida_ida.inf_get_min_ea()
获取程序的最小地址 -
ida_ida.inf_get_max_ea()
获取程序最大地址 -
idc.read_selection_start()
获取选中区块的起始地址 -
idc.read_selection_end()
获取选中区块的终止地址 -
idc.BADADDR
这是一个常量,定义为4294967295(0xffffffff),用于表示不可访问的空地址(类似于值等于NULL的指针),用于判断地址是否存在
数值获取函数
- idc.get_wide_byte(addr)
- idc.get_wide_word(addr)
- idc.get_wide_dword(addr)
- idc.get_qword(addr)
数值判断函数
- ida_bytes.is_byte(addr)
- ida_bytes.is_word(addr)
- ida_bytes.is_dword(addr)
- ida_bytes.is_qword(addr)
patch操作函数
- ida_bytes.patch_byte(addr,value)
- ida_bytes.patch_word(addr,value)
- ida_bytes.patch_dword(addr,value)
- ida_bytes.patch_qword(addr,value)
去除花指令实例
NKCTF2023 Reverse earlier
该题有多个相同的花指令
.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脚本:
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
可以看到所有相同的花指令都被去除了
文章来源:https://www.toymoban.com/news/detail-428036.html
后续内容随着学习补充ing文章来源地址https://www.toymoban.com/news/detail-428036.html
到了这里,关于IDAPython入门基础语法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!