LyScriptTools 模塊類API接口封裝

LyScriptTools工具包是在LyScript模塊基礎上封裝的工具包,其主要是二次封裝LyScript插件實現的一些新功能,或者將特定功能組件拆分開形成的獨立模塊,此類模塊可實現更加精細化的功能控制,在實際開發中推薦使用此種方式調用。

LyScript項目地址:https://github.com/lyshark/LyScript

獲取被調試進程信息: 得到當前被調試進程詳細參數,包括路徑,名稱,入口地址,基地址,長度等。

from LyScript32 import MyDebug
from LyScriptTools32 import Module

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

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

    # 類定義,並傳入調試器對象
    module = Module(dbg)

    # 得到當前被調試程序完整路徑
    full_path = module.get_local_full_path()
    print("完整路徑: {}".format(full_path))

    # 得到進程名字
    local_name = module.get_local_program_name()
    print("調試名稱: {}".format(local_name))

    # 得到長度
    local_size = module.get_local_program_size()
    print("程序長度: {}".format(local_size))

    # 得到基地址
    local_base = module.get_local_program_base()
    print("基地址: {}".format(hex(local_base)))

    # 得到入口地址
    local_oep = module.get_local_program_entry()
    print("入口地址: {}".format(hex(local_oep)))

    dbg.close()

得到當前被調試進程基本信息:

根據模塊地址或名稱得到基地址: 根據模塊名或者模塊地址互相獲取指定模塊的入口地址,基地址,名稱等。

from LyScript32 import MyDebug
from LyScriptTools32 import Module

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

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

    # 類定義,並傳入調試器對象
    module = Module(dbg)

    # 驗證是否導入了user32.dll
    is_import = module.check_module_imported("user32.dll")
    print("是否導入: {}".format(is_import))

    # 根據基地址得到模塊名
    module_name = module.get_name_from_module("1985413120")
    print("根據基地址得到模塊名: {}".format(module_name))

    # 根據模塊名得到基地址
    module_base = module.get_base_from_module("kernelbase.dll")
    print("根據模塊名得到基地址: {}".format(hex(module_base)))

    # 根據模塊名得到OEP基地址
    module_oep = module.get_oep_from_module("win32project1.exe")
    print("OEP: {}".format(hex(module_oep)))

    dbg.close()

運行效果如下:

如上只是兩個最基本的演示,LySctiptTools中關於模塊的封裝函數有很多,具體可歸納爲如下表:

Module類內函數名 函數作用
get_local_full_path() 得到程序自身完整路徑
get_local_program_name() 獲得加載程序的文件名
get_local_program_size() 得到被加載程序的大小
get_local_program_base() 得到基地址
get_local_program_entry() 得到入口地址
check_module_imported(module_name) 驗證程序是否導入了指定模塊
get_name_from_module(address) 根據基地址得到模塊名
get_base_from_module(module_name) 根據模塊名得到基地址
get_oep_from_module(module_name) 根據模塊名得到模塊OEP入口
get_all_module_information() 得到所有模塊信息
get_module_base(module_name) 得到特定模塊基地址
get_local_base() 得到當前OEP位置處模塊基地址
get_local_size() 獲取當前OEP位置長度
get_local_protect() 獲取當前OEP位置保護屬性
get_module_from_function(module,function) 獲取指定模塊中指定函數內存地址
get_base_from_address(address) 根據傳入地址得到模塊首地址,開頭4D 5A
get_base_address() 得到當前.text節基地址
get_base_from_name(module_name) 根據名字得到模塊基地址
get_oep_from_name(module_name) 傳入模塊名得到OEP位置
get_oep_from_address(address) 傳入模塊地址得到OEP位置
get_module_from_import(module_name) 得到指定模塊的導入表
get_import_inside_function(module_name,function_name) 檢查指定模塊內是否存在特定導入函數
get_import_iatva(module_name,function_name) 根據導入函數名得到函數iat_va地址
get_import_iatrva(module_name,function_name) 根據導入函數名得到函數iat_rva地址
get_module_from_export(module_name) 傳入模塊名,獲取模塊導出表
get_module_export_va(module_name,function_name) 傳入模塊名以及導出函數名,得到va地址
get_module_export_rva(module_name,function_name) 傳入模塊名以及導出函數,得到rva地址
get_local_section() 得到程序節表信息
get_local_address_from_section(section_name) 根據節名稱得到地址
get_local_size_from_section(section_name) 根據節名稱得到節大小
get_local_section_from_address(address) 根據地址得到節名稱
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章