ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

LyScriptTools 模块类API接口封装

2022-08-04 18:33:30  阅读:165  来源: 互联网

标签:封装 name get module 地址 API 模块 LyScriptTools local


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) 根据地址得到节名称

标签:封装,name,get,module,地址,API,模块,LyScriptTools,local
来源: https://www.cnblogs.com/LyShark/p/16551083.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有