LyScriptTools 反汇编类API接口手册
LyScriptTools模块实在LyScript模块反汇编基础上封装而成,其提供了更多的反汇编方法,可以更好的控制x64dbg完成自动化反汇编任务,API参考手册如下。
is系列函数: 该系列是反汇编模块中的判断语句,主要用于验证当前或指定一个内存地址指令类型,如果是返回true否则返回false,该函数默认不传参数使用的是当前EIP所指向的位置,传入参数(十进制)则对指定位置进行判断。
from LyScript32 import MyDebug
from LyScriptTools32 import Module
from LyScriptTools32 import Disassemble
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("连接状态: {}".format(connect_flag))
# 反汇编类
dasm = Disassemble(dbg)
ref = dasm.is_jmp()
print("是否是JMP: {}".format(ref))
dbg.close()
实现效果如下:
为了防止通用方法不够用,LyScriptTools中提供了自定义方法is_
它可以判断任何类型的指令前缀,此处必须传递两个参数没有缺省值。
from LyScript32 import MyDebug
from LyScriptTools32 import Module
from LyScriptTools32 import Disassemble
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("连接状态: {}".format(connect_flag))
# 反汇编类
dasm = Disassemble(dbg)
eip = dbg.get_register("eip")
ref = dasm.is_(eip,"cmp")
print("是否是CMP: {}".format(ref))
dbg.close()
验证效果如下:
详细反汇编API参数列表如下:
from LyScriptTools32 import Disassemble
如下API定义中,地址后面带有0说明可以指定缺省值,缺省值默认取当前EIP位置。
Disassemble 类内函数名 | 函数作用 |
---|---|
is_call(address=0) | 是否是跳转指令 |
is_jmp(address=0) | 是否是jmp |
is_ret(address=0) | 是否是ret |
is_nop(address=0 ) | 是否是nop |
is_cond(address=0) | 是否是条件跳转指令 |
is_cmp(address=0) | 是否cmp比较指令 |
is_test(address=0 ) | 是否是test比较指令 |
is_(address,cond) | 自定义判断条件 |
get_assembly(address=0) | 得到指定位置汇编指令,不填写默认获取EIP位置处 |
get_opcode(address=0) | 得到指定位置机器码 |
get_disasm_operand_size(address=0) | 获取反汇编代码长度 |
assemble_code_size(assemble) | 计算用户传入汇编指令长度 |
get_assemble_code(assemble) | 用户传入汇编指令返回机器码 |
write_assemble(address,assemble) | 将汇编指令写出到指定内存位置 |
get_disasm_code(address,size) | 反汇编指定行数 |
get_disasm_one_code(address = 0) | 向下反汇编一行 |
get_disasm_operand_code(address=0) | 得到当前内存地址反汇编代码的操作数 |
get_disasm_next(eip) | 获取当前EIP指令的下一条指令 |
get_disasm_prev(eip) | 获取当前EIP指令的上一条指令 |
我们来举一个使用案例,其实和模块调用原理是一样的,调用时先初始化,然后就可以使用内部的函数了。
from LyScript32 import MyDebug
from LyScriptTools32 import Module
from LyScriptTools32 import Disassemble
if __name__ == "__main__":
dbg = MyDebug()
connect_flag = dbg.connect()
print("连接状态: {}".format(connect_flag))
# 反汇编类
dasm = Disassemble(dbg)
ref = dasm.is_jmp()
print("是否是JMP: {}".format(ref))
dbg.close()
文章出处:https://www.cnblogs.com/LyShark/p/16552258.html
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!