首页 > 其他分享 >LyScriptTools 扩展Script类API手册

LyScriptTools 扩展Script类API手册

时间:2022-11-19 14:02:05浏览次数:63  
标签:返回 LyScriptTools addr Script 地址 API 指令 模块 读取

纯脚本类的功能实现都是调用的x64dbg命令,目前由于run_command_exec()命令无法返回参数,故通过中转eax寄存器实现了取值,目前只能取出整数类型的参数。

Script 类内函数名 函数作用
party(addr) 获取模块的模式编号, addr = 0则是用户模块,1则是系统模块
base(addr) 获取模块基址
size(addr) 返回模块大小
hash(addr) 返回模块hash
entry(addr) 返回模块入口
system(addr) 如果addr是系统模块则为true否则则是false
user(addr) 如果是用户模块则返回true 否则为false
main() 返回主模块基地址
rva(addr) 如果addr不在模块则返回0,否则返回addr所位于模块的RVA偏移
offset(addr) 获取地址所对应的文件偏移量,如果不在模块则返回0
isexport(addr) 判断该地址是否是从模块导出的函数
valid(addr) 判断addr是否有效,有效则返回True
base(addr) 或者当前addr的基址
size(addr) 获取当前addr内存的大小
iscode(addr) 判断当前 addr是否是可执行页面,成功返回TRUE
decodepointer(ptr) 解密指针,相当于调用了DecodePointer ptr
ReadByte(addr/eg) 从addr或者寄存器中读取一个字节内存并且返回
Byte(addr) 从addr或者寄存器中读取一个字节内存并且返回
ReadWord(addr) 读取两个字节
ReadDDword(addr) 读取四个字节
ReadQword(addr) 读取8个字节,但是只能是64位程序方可使用
ReadPtr(addr) 从地址中读取指针(4/8字节)并返回读取的指针值
ReadPointer(addr) 从地址中读取指针(4/8字节)并返回读取的指针值
len(addr) 获取addr处的指令长度
iscond(addr) 判断当前addr位置是否是条件指令
isbranch(addr) 判断当前地址是否是分支指令
isret(addr) 判断是否是ret指令
iscall(addr) 判断是否是call指令
ismem(addr) 判断是否是内存操作数
isnop(addr) 判断是否是nop
isunusual(addr) 判断当前地址是否指示为异常地址
branchdest(addr) 将指令的分支目标位于addr处
branchexec(addr) 如果分支要执行
imm(addr) 获取当前指令位置的立即数
brtrue(addr) 下一条指令的地址
next(addr) 获取addr的下一条地址
prev(addr) 获取addr上一条低地址
iscallsystem(addr) 判断当前指令是否是系统模块指令
get(index) 获取当前函数堆栈中的第index个参数
set(index,value) 设置的索引位置的值
firstchance() 最后一个异常是否为第一次机会异常
addr() 最后一个异常地址
code() 最后一个异常代码
flags() 最后一个异常标志
infocount() 上次异常信息计数
info(index) 最后一个异常信息

如上是一些常用的脚本命令的封装,他们的调用方式如下面代码中所示。

from LyScript32 import MyDebug
from LyScriptTools32 import DebugControl
from LyScriptTools32 import Script

# 有符号整数转无符号数
def long_to_ulong(inter, is_64=False):
    if is_64 == False:
        return inter & ((1 << 32) - 1)
    else:
        return inter & ((1 << 64) - 1)

# 无符号整数转有符号数
def ulong_to_long(inter, is_64=False):
    if is_64 == False:
        return (inter & ((1 << 31) - 1)) - (inter & (1 << 31))
    else:
        return (inter & ((1 << 63) - 1)) - (inter & (1 << 63))

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("连接状态: {}".format(connect_flag))

    # 定义堆栈类
    control = DebugControl(dbg)
    script = Script(dbg)

    # 得到EIP
    eip = control.get_eip()

    size = script.size(eip)
    print("当前模块大小: {}".format(hex(size)))

    entry = script.entry(eip)
    print("当前模块入口: {}".format(hex(entry)))

    # 得到hash值,默认有符号需要转换
    hash = script.hash(eip)
    print("有符号hash值: {}".format(hash))

    hash = long_to_ulong(script.hash(eip))
    print("无符号hash值: {}".format(hex(hash)))

    dbg.close()

标签:返回,LyScriptTools,addr,Script,地址,API,指令,模块,读取
From: https://blog.51cto.com/lyshark/5870397

相关文章

  • LyScript 获取上或下一条汇编指令
    LyScript插件默认并没有提供上一条与下一条汇编指令的获取功能,当然你可以使用LyScriptTools工具包直接调用内置命令得到,不过这种方式显然在效率上并不理想,我们需要在LyScri......
  • LyScript 插件实现自定义反汇编
    LyScript插件默认提供了一个get_disasm_code()方法可以直接获取到指定行数的反汇编代码,但如果需要自定义获取或者是需要自己封装一个反汇编方法,则你可以用如下两种方式来得......
  • LyScript 寻找ROP漏洞指令片段
    ROP绕过片段简单科普一下,你可以理解成一个可以关闭系统自身内存保护的一段机器指令,这段代码需要我们自己构造,这就涉及到在对端内存搜寻这样的指令,LyScript插件增强了指令片......
  • TypeScript 复习与进阶三部曲 (3) – TypeScript 类型体操
    前言在 第一部–把TypeScript当强类型语言使用 和 第二部– 把TypeScript当编程语言使用 后,我们几乎已经把TypeScript的招数学完了.第三部就要开始做练......
  • 通过 API 快速创建 AlertManager silence
    概述通常我们要silence某个AlertManager的alert时,需要通过UI界面操作,如下图:效率有点低,而且不够自动化,那么是否可以有一种办法快速创建AlertManagersilence呢?......
  • JavaScript语法_流程控制语句和JavaScript语法_流程控制语句
    JavaScript语法_流程控制语句://1.语句以;结尾,如果一行只有一条语句则;可以省略(不建议)//1.语句以;结尾,如果一行只有一条语句则可以省略(不建议)leta=3......
  • JavaScript_对象_Global与DOM简单学习
    JavaScript_对象_GlobalGlobal:全局对象1.特点:全局对象,这个Global中封装的方法不需要对象就可以直接调用。方法名();2.方法......
  • 通过 API 快速创建 AlertManager silence
    概述通常我们要silence某个AlertManager的alert时,需要通过UI界面操作,如下图:效率有点低,而且不够自动化,那么是否可以有一种办法快速创建AlertManagersilence呢......
  • 如何设置把vscode 左下角的 NPM脚本(NPM SCRIPT)显示出来
    一、如图按照步骤1,2进入设置二、如图设置,选择用户——>扩展——>Npm,4处默认的on,5处要勾选上  三、重启VScode,点开项目中的package.json,然后点击资源管理器旁边......
  • [Typescript] 110. Hard - Union to Tuple
    Implementatype, UnionToTuple,thatconvertsauniontoatuple.Asweknow,unionisanunorderedstructure,buttupleisanordered,whichimpliesthatwe......