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()
读取效果如下:
这里推荐一篇文章,里面的内置命令都可执行:https://www.cnblogs.com/iBinary/p/16359195.html
文章出处:https://www.cnblogs.com/LyShark/p/16503660.html
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
合集:
x64dbg 自动化从入门到精通
标签:
x64dbg
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2019-07-21 植物大战僵尸:寻找召唤僵尸关键CALL