LyScript 插件命令返回封装

LyShark 发表于 2022/11/20 16:46:39 2022/11/20
【摘要】 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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区),文章链接,文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:cloudbbs@huaweicloud.com进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。