LyScript 插件命令返回封装

简介: LyScript 自动化插件增加命令行回传参数的封装,由于x64dbg开发文档中提供的命令执行功能无法实现参数回传,导致LyScript插件无法得到内置命令执行后的返回参数,故本人想了一段时间,找到了这个解决方案。

LyScript 自动化插件增加命令行回传参数的封装,由于x64dbg开发文档中提供的命令执行功能无法实现参数回传,导致LyScript插件无法得到内置命令执行后的返回参数,故本人想了一段时间,找到了这个解决方案。

其实我们完全可以通过一个寄存器进行中转操作,例如在使用寄存器之前对其进行压栈操作,并将内置脚本执行结果放入到寄存器内,最后使用get_register函数直接得到寄存器内的参数即可,录入下面这种写法就可以。

from LyScript32 import MyDebug

dbg = MyDebug()
conn = dbg.connect()

# 首先定义一个脚本变量
ref = dbg.run_command_exec("$addr=1024")

# 将脚本返回值放到eax寄存器,或者开辟一个堆放到堆里
dbg.run_command_exec("eax=$addr")

# 最后拿到寄存器的值
hex(dbg.get_register("eax"))

然后将其封装成GetScriptValue()函数,只需要传入一个内置命令例如teb()字符串即可。

from LyScript32 import MyDebug

# 得到脚本返回值
def GetScriptValue(dbg,script):
    try:
        ref = dbg.run_command_exec("push eax")
        if ref != True:
            return None
        ref = dbg.run_command_exec(f"eax={script}")
        if ref != True:
            return None
        reg = dbg.get_register("eax")
        ref = dbg.run_command_exec("pop eax")
        if ref != True:
            return None
        return reg
    except Exception:
        return None
    return None

if __name__ == "__main__":
    dbg = MyDebug()
    dbg.connect()

    ref = GetScriptValue(dbg,"teb()")
    print(hex(ref))

    ref = GetScriptValue(dbg,"peb()")
    print(hex(ref))

    eax = dbg.get_register("eax")
    kbase = GetScriptValue(dbg,f"mod.base({eax})")
    print("模块及地址: {}".format(hex(kbase)))

    dbg.close()

读取效果如下:

image.png

目录
相关文章
|
1月前
vscode点击通过import引入方法名或模块名跳转其定义的文件
window点击ctrl(MAC点击command)+通过import引入的文件、方法等到,跳转到其定义的页面
117 0
|
3月前
|
开发者 Python
使用 TypeVar 创建 Self 类型变量,方便用户在 Pycharm 编辑器中链式调用校验方法
使用 TypeVar 创建 Self 类型变量,方便用户在 Pycharm 编辑器中链式调用校验方法
30 0
|
9月前
|
小程序 UED 开发者
小程序的基本用法
小程序的基本用法
|
10月前
|
编译器 Linux Go
Golang减小体积包的方法和c语言调用go封装的动态库步骤
Golang减小体积包的方法和c语言调用go封装的动态库步骤
|
数据可视化 测试技术 Go
golang 单测运行单个函数、文件、跳过文件命令
golang 单测运行单个函数、文件、跳过文件命令
|
存储 IDE Java
命令行下的Java包结构编译与执行
本文介绍命令行下的Java包结构编译与执行方法
124 0
命令行下的Java包结构编译与执行
|
数据管理 测试技术 API
python接口自动化(三十七)-封装与调用--读取excel 数据(详解)
在进行软件接口测试或设计自动化测试框架时,一个不比可避免的过程就是: 参数化,在利用python进行自动化测试开发时,通常会使用excel来做数据管理,利用xlrd、xlwt开源包来读写excel。例如:当我们登录的账号有多个的时候,我们一般用 excel 存放测试数据,本篇文章介绍,python 读取excel 方法,并保存为字典格式。
325 0
python接口自动化(三十七)-封装与调用--读取excel 数据(详解)
|
编译器 API C++
python 外部传参程序编写并打包exe及其调用方式
每种编程语言相互联系又相互独立,为此使用某种编程语言编写的程序都能够独立封装和生成自己的运行程序exe或者其他的API接口。而对于这样的运行程序目的往往不是用于双击使其运行的,而是通过外部传入的参数运行其中的内核函数达到某种目的的。所以在此研究python如何编写外部传参的程序,并将其封装未exe便于外部使用。
605 0
python 外部传参程序编写并打包exe及其调用方式
LyScript 插件实现自定义反汇编
LyScript 插件默认提供了一个`get_disasm_code()`方法可以直接获取到指定行数的反汇编代码,但如果需要自定义获取或者是需要自己封装一个反汇编方法,则你可以用如下两种方式来得到。
196 0
LyScript 插件实现自定义反汇编
|
Java Linux Go
知识分享之Golang——在Goland中增加保存格式化插件
知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。 知识分享系列目前包含Java、Golang、Linux、Docker等等。
399 0
知识分享之Golang——在Goland中增加保存格式化插件