天天看點

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()
           

讀取效果如下:

LyScript 插件指令傳回封裝

這裡推薦一篇文章,裡面的内置指令都可執行:https://www.cnblogs.com/iBinary/p/16359195.html

文章作者:

lyshark (王瑞)

文章出處:

https://www.cnblogs.com/LyShark/p/16503660.html

版權聲明:

本部落格文章與代碼均為學習時整理的筆記,文章

[均為原創]

作品,轉載請

[添加出處]

,您添加出處是我創作的動力!

轉載文章,請遵守

《中華人民共和國著作權法》

相關規定或遵守

《署名CC BY-ND 4.0國際》

禁止演繹規範,合理合規,攜帶原創出處轉載。