AtomLdr具有高级规避功能的 DLL 加载程序

admin 2023年3月17日10:48:49评论57 views字数 1284阅读4分16秒阅读模式

AtomLdr:具有规避功能的DLL加载器

免责声明


特征:

  • 独立于 CRT 库。

  • 最终的 DLL 文件可以通过加载 DLL(执行其入口点)或通过命令行执行导出的函数来运行有效负载。"Atom"

  • DLL 从 KnwonDlls 目录中解钩,没有 RWX 部分。

  • 加密的有效负载保存在资源部分中,并通过自定义代码检索。

  • AES256-CBC 有效负载加密,使用使用 ctaes 的自定义无表/数据依赖分支;这是我遇到过的最好的自定义AES实现之一。

  • Aes Key & Iv Encryption.

  • 间接系统调用,利用带有 ROP 小工具的地狱大厅(用于解钩部分)。

  • 使用 APC 调用的有效负载注入 - 可警报线程。

  • 使用 APC 执行有效负载 - 可警报线程。

  • 使用字符串哈希算法的两种不同实现的 API 哈希。CRC32

  • 总大小为 17kb + 有效负载大小(16 的倍数)。


解钩部分如何工作

AtomLdr的解钩方法如下所示

AtomLdr--具有高级规避功能的 DLL 加载程序

该计划 从 KnwonDlls 目录取消钩子并不是绕过用户土地钩子的新方法。但是,此加载程序在执行此操作时会尽量避免分配 RWX 内存。例如,在 KnownDllUnhook 中必须这样做,其中需要 RWX 权限来替换挂钩模块的文本部分,同时允许在这些文本部分中执行函数。

在此加载器中对此进行了更改,它暂停正在运行的线程,以尝试阻止从目标文本部分中调用任何函数,从而消除了在解钩之前将它们标记为 RWX 部分的需要,使 RW 权限成为可能的选择。

然而,这种方法产生了另一个问题。解钩时,Syscall和其他人使用NTDLL模块内部的syscall指令.dll作为间接系统调用方法。尽管如此,如上所述,解钩的模块将被标记为 RW 部分,因此无法执行间接系统调用,因为我们跳转到的系统调用指令现在无法执行,所以我们不得不跳转到另一个可执行文件位置,这是使用的地方。NtProtectVirtualMemorywin32u.dll

win32u.dll包含一些与 GUI 相关的功能系统调用,使其适合跳转到而不是 ntdll.dll。Win32U.dll 被加载(静态),但不包含在解钩例程中,这样做是为了确保 Win32U.dll 仍然可以执行我们正在跳转到的系统调用指令。

之后挂起的线程将恢复。

值得一提的是,这种方法可能效率不高,并且可能不稳定,这是由于使用了螺纹悬挂技巧。但是,它已经过多个过程的测试,并取得了积极的结果,同时,如果您遇到任何问题,请随时提出问题。


用法

  • PayloadBuilder 使用指定的有效负载编译和执行,它将输出一个文件,其中包含加密的有效负载及其加密密钥和 iv。PayloadConfig.pc

  • 然后,生成的文件将在项目中替换它。PayloadConfig.pcAtomLdr

  • 将项目编译为 x64 版本。AtomLdr

  • 要启用调试模式,请在此处取消注释。


演示 (1)

  • 使用 rundll32.exe 执行,运行 Havoc 有效负载并捕获屏幕截图AtomLdr.dll

AtomLdr--具有高级规避功能的 DLL 加载程序

项目地址:

https://github.com/NUL0x4C/AtomLdr

原文始发于微信公众号(蓝猫Sec):AtomLdr--具有高级规避功能的 DLL 加载程序

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年3月17日10:48:49
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   AtomLdr具有高级规避功能的 DLL 加载程序http://cn-sec.com/archives/1608298.html

发表评论

匿名网友 填写信息