天天看點

x64dbg 遠端調試插件API手冊

x64dbg 遠端調試插件API手冊

簡體中文 | 繁體中文(中國) | ENGLISH | русский язык 

一款 x64dbg 自動化控制插件,通過Python控制x64dbg的行為,實作遠端動态調試,解決了逆向工作者分析程式,反病毒人員脫殼,漏洞分析者尋找指令片段,原生腳本不夠強大的問題,通過與Python相結合利用Python文法的靈活性以及其豐富的第三方庫,加速漏洞利用程式的開發,輔助漏洞挖掘以及惡意軟體分析。

Python 包請安裝與插件一緻的版本,在cmd指令行下執行pip指令即可安裝,推薦兩個包全部安裝。

  • 安裝标準包:

    pip install LyScript32

    或者

    pip install LyScript64

  • 安裝擴充包:

    pip install LyScriptTools32

    或者

    pip install LyScriptTools64

其次您需要手動下載下傳對應

x64dbg

版本的驅動檔案,并放入指定的

plugins

目錄下。

  • 調試器下載下傳:snapshot_2022-09-11_15-59.zip
  • 插件下載下傳:LyScript32-1.0.13 (32位插件) 或者 LyScript64-1.0.13 (64位插件)

插件下載下傳好以後,請将該插件複制到x64dbg的plugins目錄下,程式運作後會自動加載插件。

x64dbg 遠端調試插件API手冊

當插件加載成功後,會在日志位置看到具體的綁定資訊以及輸出調試,該插件并不會在插件欄顯示。

x64dbg 遠端調試插件API手冊

如果需要遠端調試,則隻需要在初始化

MyDebug()

類時傳入對端IP位址即可,如果不填寫參數則預設使用

127.0.0.1

位址,請確定對端放行了

6589

端口,否則無法連接配接。

x64dbg 遠端調試插件API手冊

運作x64dbg程式并手動載入需要分析的可執行檔案,然後我們可以通過

connect()

方法連接配接到調試器,連接配接後會建立一個持久會話直到python腳本結束則連接配接會被強制斷開,在此期間可調用

is_connect()

檢查該連結是否還存在,具體代碼如下所示。

from LyScript32 import MyDebug

if __name__ == "__main__":
    # 初始化
    dbg = MyDebug()

    # 連接配接到調試器
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    # 檢測套接字是否還在
    ref = dbg.is_connect()
    print("是否在連接配接: ", ref)

    dbg.close()
           

寄存器系列函數

get_register() 函數: 該函數主要用于實作,對特定寄存器的擷取操作,使用者需傳入需要擷取的寄存器名字即可。

  • 參數1:傳入寄存器字元串

可用範圍:"DR0", "DR1", "DR2", "DR3", "DR6", "DR7", "EAX", "AX", "AH", "AL", "EBX", "BX", "BH", "BL", "ECX", "CX", "CH", "CL", "EDX", "DX", "DH", "DL", "EDI", "DI","ESI", "SI", "EBP", "BP", "ESP", "SP", "EIP", "CIP", "CSP", "CAX", "CBX", "CCX", "CDX", "CDI", "CSI", "CBP", "CFLAGS"

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eax = dbg.get_register("eax")
    ebx = dbg.get_register("ebx")

    print("eax = {}".format(hex(eax)))
    print("ebx = {}".format(hex(ebx)))

    dbg.close()
           

如果您使用的是64位插件,則寄存器的支援範圍将變為E系列加R系列。

可用範圍擴充: "DR0", "DR1", "DR2", "DR3", "DR6", "DR7", "EAX", "AX", "AH", "AL", "EBX", "BX", "BH", "BL", "ECX", "CX", "CH", "CL", "EDX", "DX", "DH", "DL", "EDI", "DI", "ESI", "SI", "EBP", "BP", "ESP", "SP", "EIP", "RAX", "RBX", "RCX", "RDX", "RSI", "SIL", "RDI", "DIL", "RBP", "BPL", "RSP", "SPL", "RIP", "R8", "R8D", "R8W", "R8B", "R9", "R9D", "R9W", "R9B", "R10", "R10D", "R10W", "R10B", "R11", "R11D", "R11W", "R11B", "R12", "R12D", "R12W", "R12B", "R13", "R13D", "R13W", "R13B", "R14", "R14D", "R14W", "R14B", "R15", "R15D", "R15W", "R15B"

from LyScript64 import MyDebug

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

    rax = dbg.get_register("rax")
    eax = dbg.get_register("eax")
    ax = dbg.get_register("ax")

    print("rax = {} eax = {} ax ={}".format(hex(rax),hex(eax),hex(ax)))

    r8 = dbg.get_register("r8")
    print("擷取R系列寄存器: {}".format(hex(r8)))

    dbg.close()
           

set_register() 函數: 該函數實作設定指定寄存器參數,同理64位将支援更多寄存器的參數修改。

  • 參數1:傳入寄存器字元串
  • 參數2:十進制數值

可用範圍:"DR0", "DR1", "DR2", "DR3", "DR6", "DR7", "EAX", "AX", "AH", "AL", "EBX", "BX", "BH", "BL", "ECX", "CX", "CH", "CL", "EDX", "DX", "DH", "DL", "EDI", "DI", "ESI", "SI", "EBP", "BP", "ESP", "SP", "EIP"

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eax = dbg.get_register("eax")
    
    dbg.set_register("eax",100)

    print("eax = {}".format(hex(eax)))

    dbg.close()
           

get_flag_register() 函數: 用于擷取某個标志位參數,傳回值隻有真或者假。

  • 參數1:寄存器字元串

可用寄存器範圍:"ZF", "OF", "CF", "PF", "SF", "TF", "AF", "DF", "IF"

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    cf = dbg.get_flag_register("cf")
    print("标志: {}".format(cf))
    
    dbg.close()
           

set_flag_register() 函數: 用于設定某個标志位參數,傳回值隻有真或者假。

  • 參數1:寄存器字元串
  • 參數2:[ 設定為真 True] / [設定為假 False]

可用寄存器範圍:"ZF", "OF", "CF", "PF", "SF", "TF", "AF", "DF", "IF"

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    zf = dbg.get_flag_register("zf")
    print(zf)

    dbg.set_flag_register("zf",False)

    zf = dbg.get_flag_register("zf")
    print(zf)

    dbg.close()
           

調試系列函數

set_debug() 函數: 用于影響調試器,例如前進一次,後退一次,暫停調試,終止等。

  • 參數1: 傳入需要執行的動作

可用動作範圍:[暫停 Pause] [運作 Run] [步入 StepIn] [步過 StepOut] [到結束 StepOver] [停止 Stop] [等待 Wait]

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    while True:
        dbg.set_debug("StepIn")
        
        eax = dbg.get_register("eax")
        
        if eax == 0:
            print("找到了")
            break
        
    dbg.close()
           

set_debug_count() 函數: 該函數是

set_debug()

函數的延續,目的是執行自動步過次數。

  • 參數1:傳入需要執行的動作
  • 參數2:執行重複次數

可用動作範圍:[暫停 Pause] [運作 Run] [步入 StepIn] [步過 StepOut] [到結束 StepOver] [停止 Stop] [等待 Wait]

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    dbg.set_debug_count("StepIn",10)

    dbg.close()
           

is_debugger() /is_running()/is_run_locked() 函數: 函數

is_debugger

可用于驗證目前調試器是否處于調試狀态,

is_running

則用于驗證是否在運作,

is_run_locked()

用于檢查調試器是否被鎖定(暫停)。

  • 無參數傳遞
from LyScript32 import MyDebug

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

    ref = dbg.is_debugger()
    print(ref)

    ref = dbg.is_running()
    print(ref)

    ref = dbg.is_run_locked()
    print(ref)

    dbg.close()
           

set_breakpoint() 函數: 設定斷點與取消斷點進行了分離,設定斷點隻需要傳入十進制記憶體位址。

  • 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")
    ref = dbg.set_breakpoint(eip)

    print("設定狀态: {}".format(ref))
    dbg.close()
           

delete_breakpoint() 函數: 該函數傳入一個記憶體位址,可取消一個記憶體斷點。

  • 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")
    ref = dbg.set_breakpoint(eip)
    print("設定狀态: {}".format(ref))

    del_ref = dbg.delete_breakpoint(eip)
    print("取消狀态: {}".format(del_ref))

    dbg.close()
           

check_breakpoint() 函數: 用于檢查下過的斷點是否被命中,命中傳回True否則傳回False。

  • 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")
    ref = dbg.set_breakpoint(eip)
    print("設定狀态: {}".format(ref))

    is_check = dbg.check_breakpoint(4134331)
    print("是否命中: {}".format(is_check))

    dbg.close()
           

get_all_breakpoint() 函數: 用于擷取目前調試程式中,所有下過的斷點資訊,包括是否開啟,命中次數等。

  • 無參數傳遞
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    ref = dbg.get_all_breakpoint()
    print(ref)
    dbg.close()
           

set_hardware_breakpoint() 函數: 用于設定一個硬體斷點,硬體斷點在32位系統中最多設定4個。

  • 參數1:記憶體位址(十進制)
  • 參數2:斷點類型

斷點類型可用範圍:[類型 0 = HardwareAccess / 1 = HardwareWrite / 2 = HardwareExecute]

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug(address="127.0.0.1",port=6666)
    connect_flag = dbg.connect()

    eip = dbg.get_register("eip")

    ref = dbg.set_hardware_breakpoint(eip,2)
    print(ref)

    dbg.close()
           

delete_hardware_breakpoint() 函數: 用于删除一個硬體斷點,隻需要傳入位址即可,無需傳入類型。

  • 參數1:記憶體位址(十進制)

斷點類型可用範圍:[類型 0 = HardwareAccess / 1 = HardwareWrite / 2 = HardwareExecute]

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug(address="127.0.0.1",port=6666)
    connect_flag = dbg.connect()

    eip = dbg.get_register("eip")

    ref = dbg.set_hardware_breakpoint(eip,2)
    print(ref)

    # 删除斷點
    ref = dbg.delete_hardware_breakpoint(eip)
    print(ref)

    dbg.close()
           

is_bp_disable() 函數: 該函數用于驗證指定位址處BP斷點是否被禁用。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    is_false = dbg.is_bp_disable(eip)
    print("bp斷點狀态: {}".format(is_false))

    dbg.close()
           

get_xref_count_at() 函數: 擷取指定記憶體位址位置處交叉引用計數。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    types = dbg.get_xref_count_at(eip)
    print("引用計數: {}".format(types))

    dbg.close()
           

get_function_type_at() 函數: 擷取指定記憶體位址位置處函數類型,函數

FUNCTYPE

枚舉類型。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    types = dbg.get_function_type_at(eip)
    print("函數類型: {}".format(types))

    if(types == 0):
        print("FUNC_NONE")
    elif(types == 1):
        print("FUNC_BEGIN")
    elif(types == 2):
        print("FUNC_MIDDLE")
    elif(types == 3):
        print("FUNC_END")
    elif(types == 4):
        print("FUNC_SINGLE")
    else:
        print("error")

    dbg.close()
           

get_bpx_type_at() 函數: 擷取指定位址處BP斷點類型,類型

BPXTYPE

枚舉。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    types = dbg.get_bpx_type_at(eip)
    print("BPX類型: {}".format(types))

    if(types == 0):
        print("bp_none")
    elif(types == 1):
        print("bp_normal")
    elif(types == 2):
        print("bp_hardware")
    elif(types == 4):
        print("bp_memory")
    elif(types == 8):
        print("bp_dll")
    elif(types == 16):
        print("bp_exception")
    else:
        print("error")

    dbg.close()
           

get_xref_type_at() 函數: 得到指定記憶體位址位置處交叉引用類型,枚舉

XREFTYPE

類型。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    types = dbg.get_xref_type_at(eip)
    print("引用類型: {}".format(types))

    if(types == 0):
        print("XREF_NONE")
    elif(types == 1):
        print("XREF_DATA")
    elif(types == 2):
        print("XREF_JMP")
    elif(types == 3):
        print("XREF_CALL")
    else:
        print("error")

    dbg.close()
           

子產品系列函數

get_module_base() 函數: 該函數可用于擷取程式載入的指定一個子產品的基位址。

  • 參數1:子產品名字元串
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    
    user32_base = dbg.get_module_base("user32.dll")
    print(user32_base)

    dbg.close()
           

get_all_module() 函數: 用于輸出目前加載程式的所有子產品資訊,以字典的形式傳回。

  • 參數:無參數
from LyScript32 import MyDebug

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

    ref = dbg.get_all_module()

    for i in ref:
        print(i)

    print(ref[0])
    print(ref[1].get("name"))
    print(ref[1].get("path"))

    dbg.close()
           

get_local_() 系列函數: 擷取目前EIP所在子產品基位址,長度,以及記憶體屬性,此功能無參數傳遞,擷取的是目前EIP所指向子產品的資料。

  • dbg.get_local_base() 擷取子產品基位址
  • dbg.get_local_size() 擷取子產品長度
  • dbg.get_local_protect() 擷取子產品保護屬性
from LyScript32 import MyDebug

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

    ref = dbg.get_local_base()
    print(hex(ref))

    ref2 = dbg.get_local_size()
    print(hex(ref2))

    ref3 = dbg.get_local_protect()
    print(ref3)

    dbg.close()
           

get_module_from_function() 函數: 擷取指定子產品中指定函數的記憶體位址,可用于驗證目前程式在記憶體中指定函數的虛拟位址。

  • 參數1:子產品名
  • 參數2:函數名

成功傳回位址,失敗傳回false

from LyScript32 import MyDebug

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

    ref = dbg.get_module_from_function("user32.dll","MessageBoxW")
    print(hex(ref))

    ref2 = dbg.get_module_from_function("kernel32.dll","test")
    print(ref2)

    dbg.close()
           

get_module_from_import() 函數: 擷取目前程式中指定子產品的導入表資訊,輸出為清單嵌套字典。

  • 參數1:傳入子產品名稱
from LyScript32 import MyDebug

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

    ref = dbg.get_module_from_import("ucrtbase.dll")
    print(ref)

    ref1 = dbg.get_module_from_import("win32project1.exe")

    for i in ref1:
        print(i.get("name"))

    dbg.close()
           

get_module_from_export() 函數: 該函數用于擷取目前加載程式中的導出表資訊。

  • 參數1:傳入子產品名
from LyScript32 import MyDebug

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

    ref = dbg.get_module_from_export("msvcr120d.dll")

    for i in ref:
        print(i.get("name"), hex(i.get("va")))

    dbg.close()
           

get_section() 函數: 該函數用于輸出主程式中的節表資訊。

  • 無參數傳遞
from LyScript32 import MyDebug

if __name__ == "__main__":
   dbg = MyDebug(address="127.0.0.1",port=6666)
   connect_flag = dbg.connect()

   ref = dbg.get_section()
   print(ref)

   dbg.close()
           

get_base_from_address() 函數: 根據傳入的記憶體位址得到該子產品首位址。

  • 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug

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

    ref = dbg.get_base_from_address(eip)
    print("子產品首位址: {}".format(hex(ref)))
           

get_base_from_name() 函數: 根據傳入的子產品名得到該子產品所在記憶體首位址。

  • 參數1:傳入子產品名
from LyScript32 import MyDebug

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

    ref_base = dbg.get_base_from_name("win32project.exe")
    print("子產品首位址: {}".format(hex(ref_base)))

    dbg.close()
           

get_oep_from_name() 函數: 根據傳入的子產品名,擷取該子產品實際裝載OEP位置。

  • 參數1:傳入子產品名
from LyScript32 import MyDebug

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

    oep = dbg.get_oep_from_name("win32project.exe")
    print(hex(oep))

    dbg.close()
           

get_oep_from_address() 函數: 根據傳入記憶體位址,得到該位址子產品的OEP位置。

  • 參數1:傳入記憶體位址
from LyScript32 import MyDebug

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

    oep = dbg.get_oep_from_address(eip)
    print(hex(oep))

    dbg.close()
           

get_section_from_module_name() 函數: 使用者可傳入目前載入的子產品名,即可直接取出指定子產品的節表資訊。

  • 參數1:子產品名(字元串)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    section_user32 = dbg.get_section_from_module_name("user32.dll")
    print(section_user32)

    section_ntdll = dbg.get_section_from_module_name("ntdll.dll")
    print(section_ntdll)

    dbg.close()
           

size_from_address() 函數: 傳入一個子產品的基位址得到該子產品占用總大小。

  • 參數1:子產品位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    base = dbg.get_local_base()
    print("子產品基位址: {}".format(hex(base)))

    size = dbg.size_from_address(base)
    print("子產品長度: {}".format(size))

    dbg.close()
           

size_from_name() 函數: 傳入子產品名稱得到子產品占用總大小。

  • 參數1:子產品名(字元串)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    size = dbg.size_from_name("win32.exe")
    print("長度: {}".format(size))

    dbg.close()
           

section_count_from_name() 函數: 傳入子產品名稱得到子產品有多少個節區。

  • 參數1:子產品名(字元串)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    size = dbg.section_count_from_name("win32.exe")
    print("節區個數: {}".format(size))

    dbg.close()
           

section_count_from_address() 函數: 傳入子產品基址得到子產品有多少個節區。

  • 參數1:子產品位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    base = dbg.get_local_base()
    print("子產品基位址: {}".format(hex(base)))

    size = dbg.section_count_from_address(base)
    print("節個數: {}".format(size))

    dbg.close()
           

path_from_name() 函數: 傳入子產品名稱得到子產品路徑。

  • 參數1:子產品名(字元串)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    size = dbg.path_from_name("win32.exe")
    print("子產品路徑: {}".format(size))

    dbg.close()
           

path_from_address() 函數: 傳入子產品位址得到子產品路徑。

  • 參數1:子產品位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    base = dbg.get_local_base()
    print("子產品基位址: {}".format(hex(base)))

    path = dbg.path_from_address(base)
    print("子產品路徑: {}".format(path))

    dbg.close()
           

name_from_address() 函數: 傳入子產品位址得到子產品名稱。

  • 參數1:子產品位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    base = dbg.get_local_base()
    print("子產品基位址: {}".format(hex(base)))

    path = dbg.name_from_address(base)
    print("子產品名: {}".format(path))

    dbg.close()
           

get_window_handle() 函數: 取出自身程序子產品句柄。

  • 參數:無參數傳遞
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    base = dbg.get_window_handle()
    print("程序句柄: {}".format(base))

    dbg.close()
           

get_module_at() 函數: 擷取指定記憶體位址處子產品名,此處得到的子產品名無字尾。

  • 參數1:子產品位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    ref = dbg.get_module_at(eip)
    print("子產品名: {}".format(ref))

    dbg.close()
           

get_local_module() 函數: 該系列函數可用于得到目前載入程式停留EIP位置的子產品詳細資訊。

  • get_local_module_size() 擷取目前程式的大小
  • get_local_module_section_Count() 擷取自身節數量
  • get_local_module_path() 擷取被調試程式完整路徑
  • get_local_module_name() 擷取自身子產品名
  • get_local_module_entry() 擷取自身子產品入口
  • get_local_module_base() 擷取自身子產品基位址
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    print("程式大小: {}".format( dbg.get_local_module_size()))
    print("節個數: {}".format(dbg.get_local_module_section_Count()))
    print("完整路徑: {}".format(dbg.get_local_module_path()))
    print("子產品名: {}".format(dbg.get_local_module_name()))
    print("子產品入口: {}".format(dbg.get_local_module_entry()))
    print("子產品基位址: {}".format(dbg.get_local_module_base()))

    dbg.close()
           

記憶體系列函數

read_memory_() 系列函數: 讀記憶體系列函數,包括 ReadByte,ReadWord,ReadDword 三種格式,在64位下才支援Qword

  • 參數1:需要讀取的記憶體位址(十進制)

目前支援:

  • read_memory_byte() 讀位元組
  • read_memory_word() 讀word
  • read_memory_dword() 讀dword
  • read_memory_qword() 讀qword (僅支援64位)
  • read_memory_ptr() 讀指針
from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")

    ref = dbg.read_memory_byte(eip)
    print(hex(ref))

    ref2 = dbg.read_memory_word(eip)
    print(hex(ref2))

    ref3 = dbg.read_memory_dword(eip)
    print(hex(ref3))

    ref4 = dbg.read_memory_ptr(eip)
    print(hex(ref4))

    dbg.close()
           

write_memory_() 系列函數: 寫記憶體系列函數,WriteByte,WriteWord,WriteDWORD,WriteQword

  • 參數1:需要寫入的記憶體
  • 參數2:需要寫入的byte位元組

目前支援:

  • write_memory_byte() 寫位元組
  • write_memory_word() 寫word
  • write_memory_dword() 寫dword
  • write_memory_qword() 寫qword (僅支援64位)
  • write_memory_ptr() 寫指針
from LyScript32 import MyDebug

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

    addr = dbg.create_alloc(1024)
    print(hex(addr))

    ref = dbg.write_memory_byte(addr,10)

    print(ref)

    dbg.close()
           

scan_memory_one() 函數: 實作了記憶體掃描,當掃描到第一個符合條件的特征時,自動輸出。

  • 參數1:特征碼字段

這個函數需要注意,如果我們的x64dbg工具停在系統領空,則會預設搜尋系統領空下的特征,如果想要搜尋程式領空裡面的資料,需要先将EIP切過去在操作。

from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    ref = dbg.scan_memory_one("ff 25")
    print(ref)
    dbg.close()
           

scan_memory_all() 函數: 實作了掃描所有符合條件的特征字段,找到後傳回一個清單。

  • 參數1:特征碼字段
from LyScript32 import MyDebug

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

    ref = dbg.scan_memory_all("ff 25")

    for index in ref:
        print(hex(index))

    dbg.close()
           

scan_memory_any() 函數: 該函數可實作對特定位置,向下掃描特定長度的特征字段。

  • 參數1:掃描起始位址(十進制)
  • 參數2:掃描長度(十進制)
  • 參數3:特征碼字段
from LyScript32 import MyDebug

if __name__ == "__main__":
    # 初始化
    dbg = MyDebug()

    # 連接配接到調試器
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    # 任意位址掃描
    eip = dbg.get_register("eip")
    ref = dbg.scan_memory_any(eip,1024,"8b 50 04 8b fe")
    print("得到掃描結果: {}".format(hex(ref)))

    dbg.close()
           

get_local_protect() 函數: 擷取記憶體屬性傳值,該函數進行更新,取消了隻能得到EIP所指的位置的記憶體屬性,使用者可随意檢測。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")
    print(eip)

    ref = dbg.get_local_protect(eip)
    print(ref)
           

set_local_protect() 函數: 新增設定記憶體屬性函數,傳入eip記憶體位址,設定屬性32,以及設定記憶體長度1024即可。

  • 參數1:記憶體位址(十進制)
  • 參數2:權限類型(32=執行/讀取 30=執行 2=讀取/寫入)
  • 參數3:屬性長度(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    
    eip = dbg.get_register("eip")
    print(eip)

    b = dbg.set_local_protect(eip,32,1024)
    print("設定屬性狀态: {}".format(b))

    dbg.close()
           

get_local_page_size() 函數: 用于擷取目前EIP所指領空下,記憶體pagesize分頁大小。

  • 無參數傳遞
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    size = dbg.get_local_page_size()
    print("pagesize = {}".format(size))

    dbg.close()
           

get_memory_section() 函數: 該函數主要用于擷取記憶體映像中,目前調試程式的記憶體節表資料。

  • 無參數傳遞
from LyScript32 import MyDebug

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

    ref = dbg.get_memory_section()
    print(ref)
    dbg.close()
           

is_jmp_going_to_execute() 函數: 判斷記憶體位址是否跳轉到可執行記憶體塊。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    flag = dbg.is_jmp_going_to_execute(eip)
    print("是否是跳轉(是否可執行): {}".format(flag))

    dbg.close()
           

mem_find_base_addr() 函數: 傳回特定位置處記憶體子產品基位址和大小,以字典形式傳回。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    dic = dbg.mem_find_base_addr(eip)

    print("記憶體基位址: {}".format(hex(dic.get("base"))))
    print("記憶體大小: {}".format(dic.get("size")))

    dbg.close()
           

mem_get_page_size() 函數: 得到指定位置處記憶體頁面長度。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    addr = dbg.mem_get_page_size(eip)

    print("記憶體頁面長度: {}".format(hex(addr)))

    dbg.close()
           

mem_is_valid() 函數: 驗證指定位置處記憶體位址是否可讀取。

  • 參數1:記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    is_read = dbg.mem_is_valid(eip)
    print("記憶體位址屬性: {}".format(is_read))

    dbg.close()
           

堆棧系列函數

create_alloc() 函數: 函數

create_alloc()

可在遠端開辟一段堆空間,成功傳回記憶體首位址。

  • 參數1:開辟的堆長度(十進制)
from LyScript32 import MyDebug

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

    ref = dbg.create_alloc(1024)
    print("開辟位址: ", hex(ref))

    dbg.close()
           

delete_alloc() 函數: 函數

delete_alloc()

用于登出一個遠端堆空間。

  • 參數1:傳入需要删除的堆空間記憶體位址。
from LyScript32 import MyDebug

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

    ref = dbg.create_alloc(1024)
    print("開辟位址: ", hex(ref))

    flag = dbg.delete_alloc(ref)
    print("删除狀态: ",flag)

    dbg.close()
           

push_stack() 函數: 将一個十進制數壓入堆棧中,預設在堆棧棧頂。

  • 參數1:十進制資料
from LyScript32 import MyDebug

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

    ref = dbg.push_stack(10)

    print(ref)

    dbg.close()
           

pop_stack() 函數: pop函數用于從堆棧中推出一個元素,預設從棧頂彈出。

  • 無參數傳遞
from LyScript32 import MyDebug

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

    tt = dbg.pop_stack()
    print(tt)

    dbg.close()
           

peek_stack() 函數: peek則用于檢查堆棧内的參數,可設定偏移值,不設定則預設檢查第一個也就是棧頂。

  • 參數1:十進制偏移
from LyScript32 import MyDebug

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

    # 無參數檢查
    check = dbg.peek_stack()
    print(check)

    # 攜帶參數檢查
    check_1 = dbg.peek_stack(2)
    print(check_1)

    dbg.close()
           

程序線程系列函數

get_thread_list() 函數: 該函數可輸出目前程序所有在運作的線程資訊。

  • 無參數傳遞
from LyScript32 import MyDebug

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

    ref = dbg.get_thread_list()
    print(ref[0])
    print(ref[1])

    dbg.close()
           

get_process_handle() 函數: 用于擷取目前程序句柄資訊。

  • 無參數傳遞
from LyScript32 import MyDebug

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

    ref = dbg.get_process_handle()
    print(ref)

    dbg.close()
           

get_process_id() 函數: 用于擷取目前加載程式的PID

  • 無參數傳遞
from LyScript32 import MyDebug

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

    ref = dbg.get_process_id()
    print(ref)

    dbg.close()
           

get_teb_address() / get_peb_address() 系列函數: 用于擷取目前程序環境塊,和線程環境快。

  • get_teb_address() 傳入參數是線程ID
  • get_peb_address() 傳入參數是程序ID
from LyScript32 import MyDebug

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

    ref = dbg.get_teb_address(6128)
    print(ref)

    ref = dbg.get_peb_address(9012)
    print(ref)

    dbg.close()
           

反彙編系列函數

get_disasm_code() 函數: 該函數主要用于對特定記憶體位址進行反彙編,傳入兩個參數。

  • 參數1:需要反彙編的位址(十進制)
  • 參數2:需要向下反彙編的長度
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    # 得到EIP位置
    eip = dbg.get_register("eip")

    # 反彙編前100行
    disasm_dict = dbg.get_disasm_code(eip,100)

    for ds in disasm_dict:
        print("位址: {} 反彙編: {}".format(hex(ds.get("addr")),ds.get("opcode")))

    dbg.close()
           

get_disasm_one_code() 函數: 在使用者指定的位置讀入一條彙編指令,使用者可根據需要對其進行判斷。

from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")
    print("EIP = {}".format(eip))

    disasm = dbg.get_disasm_one_code(eip)
    print("反彙編一條: {}".format(disasm))

    dbg.close()
           

get_disasm_operand_code() 函數: 用于擷取彙編指令中的操作數,例如

jmp 0x0401000

其操作數就是

0x0401000

  • 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")
    print("EIP = {}".format(eip))

    opcode = dbg.get_disasm_operand_code(eip)
    print("操作數: {}".format(hex(opcode)))

    dbg.close()
           

get_disasm_operand_size() 函數: 用于得目前記憶體位址下彙編代碼的機器碼長度。

  • 參數1:傳入記憶體位址(十進制)
from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")
    print("EIP = {}".format(eip))

    opcode = dbg.get_disasm_operand_size(eip)

    print("機器碼長度: {}".format(hex(opcode)))

    dbg.close()
           

assemble_write_memory() 函數: 實作了使用者傳入一段正确的彙編指令,程式自動将該指令轉為機器碼,并寫入到指定位置。

  • 參數1:寫出記憶體位址(十進制)
  • 參數2:寫出彙編指令
from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")
    print(eip)

    ref = dbg.assemble_write_memory(eip,"mov eax,1")
    print("是否寫出: {}".format(ref))

    dbg.close()
           

assemble_code_size() 函數: 該函數實作了使用者傳入一個彙編指令,自動計算出該指令占多少個位元組。

  • 參數1:彙編指令字元串
from LyScript32 import MyDebug

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

    ref = dbg.assemble_code_size("sub esp, 0x324")
    print(ref)

    dbg.close()
           

get_branch_destination() 函數: 擷取call或者是jx跳轉指令的跳轉位址。

  • 參數1:擷取記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    print("目前EIP位址: {}".format(hex(eip)))

    value = dbg.get_branch_destination(eip)
    print("操作數: {}".format(hex(value)))

    dbg.close()
           

get_disassembly() 函數: 反彙編一條指令,此函數直接輸出調試其中看到的,包括符号。

  • 參數1:擷取記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    print("目前EIP位址: {}".format(hex(eip)))

    dasm = dbg.get_disassembly(eip)
    print("反彙編一條: {}".format(dasm))

    dbg.close()
           

assemble_at() 函數: 彙編系列函數,傳入一條彙編指令,直接将指令寫出到記憶體。

  • 參數1:擷取記憶體位址(十進制)
  • 參數2:彙編指令(字元串)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    print("目前EIP位址: {}".format(hex(eip)))

    ref = dbg.assemble_at(eip,"nop")
    print("寫出狀态: {}".format(ref))

    dbg.close()
           

disasm_fast_at() 函數: 該函數同樣是反彙編一行并傳回字典,但它可以擷取到更多有效參數。

  • 參數1:擷取記憶體位址(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    print("目前EIP位址: {}".format(hex(eip)))

    dasm = dbg.disasm_fast_at(eip)
    print("位址: {}".format(hex(dasm.get("addr"))))
    print("彙編指令: {}".format(dasm.get("disasm")))
    print("彙編長度: {}".format(dasm.get("size")))
    print("是否分支: {}".format(dasm.get("is_branch")))
    print("是否call: {}".format(dasm.get("is_call")))
    print("類型: {}".format(dasm.get("type")))

    dbg.close()
           

其他系列函數

set_comment_notes() 函數: 給指定位置代碼增加一段注釋,如下示範在eip位置增加注釋。

  • 參數1:注釋記憶體位址
  • 參數2:注釋内容
from LyScript32 import MyDebug

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

    eip = dbg.get_register("eip")
    ref = dbg.set_comment_notes(eip,"hello lyshark")
    print(ref)

    dbg.close()
           

run_command_exec() 函數: 執行内置指令,例如bp,dump等。

  • 參數1:指令語句
from LyScript32 import MyDebug

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

    ref = dbg.run_command_exec("bp MessageBoxA")
    print(ref)

    dbg.close()
           

set_loger_output() 函數: 日志的輸出尤為重要,該子產品提供了自定義日志輸出功能,可将指定日志輸出到x64dbg日志位置。

  • 參數1:日志内容
from LyScript32 import MyDebug

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

    for i in range(0,100):
        ref = dbg.set_loger_output("hello lyshark -> {} \n".format(i))
        print(ref)

    dbg.close()
           

run_command_exe_ref() 函數: 該函數是

run_command_exec()

的延申,其主要增加了傳出參數的功能,目前可傳出整數類型。

  • 參數1:指令語句
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    ref = dbg.run_command_exe_ref("mod.base(eip)")
    print("傳回參數: {}".format(hex(ref)))

    dbg.close()
           

set_status_bar_message() 函數: 該函數可實作在x64dbg底部狀态欄上面輸出一個使用者傳入的字元串。

  • 參數1:輸出字元串
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    dbg.set_status_bar_message("EIP => {}".format(hex(eip)))

    dbg.close()
           

script_loader() 函數: 該函數接收使用者傳入的内置腳本所在路徑,并将該腳本加載到x64dbg中。

  • 參數1:腳本路徑
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    flag = dbg.script_loader("d://x64dbg_script.txt")
    print("傳回值: {}".format(flag))

    dbg.close()
           

script_unloader() 函數: 該函數用于關閉x64dbg中打開的腳本。

  • 參數:無參數傳遞
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    flag = dbg.script_loader("d://x64dbg_script.txt")
    print("傳回值: {}".format(flag))
    
    dbg.script_unloader()

    dbg.close()
           

script_run() 函數: 該函數用于運作一個已經載入到x64dbg中的腳本。

  • 參數1:運作條數(可空)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    flag = dbg.script_loader("d://x64dbg_script.txt")
    print("傳回值: {}".format(flag))

    dbg.script_run()

    dbg.close()
           

script_set_ip() 函數: 該函數用于指定從第幾行開始運作腳本。

  • 參數1:運作下标
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    flag = dbg.script_loader("d://x64dbg_script.txt")
    print("傳回值: {}".format(flag))

    dbg.script_set_ip(3)

    dbg.close()
           

open_debug() 函數: 該函數用于打開磁盤中的一個被調試程式。

  • 參數1:被打開程式完整路徑
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    flag = dbg.open_debug("d://win32.exe")

    dbg.close()
           

close_debug() 函數: 該函數用于關閉目前打開的調試程式,之關閉程式不關閉調試器。

  • 參數:無參數傳遞
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    flag = dbg.open_debug("d://win32.exe")
    
    if flag == True:
        dbg.close_debug()
    
    dbg.close()
           

detach_debug() 函數: 該函數用于讓調試器脫離程序,程序會被運作起來。

  • 參數:無參數傳遞
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    flag = dbg.open_debug("d://win32.exe")

    if flag == True:
        dbg.detach_debug()

    dbg.close()
           

message_box() 函數: 此功能提供了三種對話框,一種可輸入文本,一種判斷是否選中,另一種則是普通彈窗。

  • 參數1:彈出的提示資訊
from LyScript32 import MyDebug

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

    # 彈出輸入框
    flag = dbg.input_string_box("請輸入反彙編入口位址?")
    print("使用者的輸入: {}".format(flag))

    # 彈出是否框
    flag = dbg.message_box_yes_no("是否繼續執行脫殼操作?")
    if flag == True:
        print("脫殼")
    else:
        print("退出")

    # 提示框
    flag = dbg.message_box("這是第 {} 次,異常了".format(1))
    print("狀态: {}".format(flag))

    dbg.close()
           

set_argument_brackets() 函數: 該函數可在

注釋

處增加括号。

  • 參數1:開始位置(十進制)
  • 參數2:結束位置(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    ref = dbg.set_argument_brackets(eip, eip +100)
    print("是否增加注釋: {}".format(ref))
    
    dbg.close()
           

del_argument_brackets() 函數: 該函數可清除通過

set_argument_brackets

設定的括号。

  • 參數1:開始位置(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    
    dbg.del_argument_brackets(eip)

    dbg.close()
           

set_function_brackets() 函數: 該函數可實作在

機器碼

位置增加括号。

  • 參數1:開始位置(十進制)
  • 參數2:結束位置(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    flag = dbg.set_function_brackets(eip,eip+10)

    dbg.close()
           

del_function_brackets() 函數: 該函數可清除通過

del_function_brackets

設定的括号。

  • 參數1:開始位置(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    
    dbg.del_function_brackets(eip)

    dbg.close()
           

set_loop_brackets() 函數: 該函數可實作在

反彙編

位置增加括号。

  • 參數1:開始位置(十進制)
  • 參數2:結束位置(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    ref = dbg.set_loop_brackets(eip,eip + 10)
    print("設定狀态: {}".format(ref))

    dbg.close()
           

del_loop_brackets() 函數: 該函數可清除通過

set_loop_brackets

設定的括号。

  • 參數1:清除層級(預設1)
  • 參數2:開始位置(十進制)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")

    ref = dbg.del_loop_brackets(1,eip)
    print("清除狀态: {}".format(ref))

    dbg.close()
           

set_label_at() 函數: 該函數可在特定位置設定一個标簽。

  • 參數1:設定标簽的位址(十進制)
  • 參數2:标簽名(字元串)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    
    dbg.set_label_at(eip,"test1")
    dbg.set_label_at(eip+10,"test2")

    dbg.close()
           

location_label_at() 函數: 該函數可通過已有的标簽定位到所在位置,并傳回記憶體位址。

  • 參數1:标簽名(字元串)
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    eip = dbg.get_register("eip")
    
    lab_addr = dbg.location_label_at("test2")
    print("标簽所在記憶體: {}".format(hex(lab_addr)))

    dbg.close()
           

clear_label() 函數: 該函數用于清除目前程式内所有的标簽。

  • 參數:無參數傳遞
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    ref = dbg.clear_label()

    dbg.close()
           

update_all_view() 函數: 重新整理試圖函數,與切換CPU位置。

  • 參數:無參數傳遞
from LyScript32 import MyDebug

if __name__ == "__main__":
    dbg = MyDebug()
    connect_flag = dbg.connect()
    print("連接配接狀态: {}".format(connect_flag))

    # 重新整理試圖
    dbg.update_all_view()
    
    # 切換到CPU視窗
    dbg.switch_cpu()
    
    # 清除所有日志
    dbg.clear_log()

    dbg.close()
           
文章作者:

lyshark (王瑞)

文章出處:

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

版權聲明:

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

[均為原創]

作品,轉載請

[添加出處]

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

轉載文章,請遵守

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

相關規定或遵守

《署名CC BY-ND 4.0國際》

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