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()
讀取效果如下:

這裡推薦一篇文章,裡面的内置指令都可執行:https://www.cnblogs.com/iBinary/p/16359195.html
文章作者:lyshark (王瑞)
文章出處:https://www.cnblogs.com/LyShark/p/16503660.html
版權聲明:本部落格文章與代碼均為學習時整理的筆記,文章
[均為原創]作品,轉載請
[添加出處],您添加出處是我創作的動力!
轉載文章,請遵守
《中華人民共和國著作權法》相關規定或遵守
《署名CC BY-ND 4.0國際》禁止演繹規範,合理合規,攜帶原創出處轉載。