acidicoala/Koaloader
GitHub: acidicoala/Koaloader
一个利用DLL搜索顺序劫持机制实现自动注入指定DLL的工具集合,支持多种常见Windows系统DLL作为代理。
Stars: 402 | Forks: 41
= 🐨 Koaloader 📥
一个使用搜索顺序劫持来自动注入指定 DLL 的 DLL 集合。
== 🔗 链接
https://cs.rin.ru/forum/viewtopic.php?p=2536753#p2536753[官方论坛主题]
== 🚀 使用方法
只需将其中一个代理 DLL 放置在进程尝试加载它的位置,并设置配置文件以加载您希望注入的 DLL。
=== 📚 支持的代理
注意:➕ 如果您希望看到其他代理 DLL 得到支持,欢迎在官方论坛主题中请求,请注明 DLL 名称并描述其用例。
# .点击查看所有代理
[%collapsible]
* [x] *audioses.dll*
* [x] *d3d9.dll*
* [x] *d3d10.dll*
* [x] *d3d11.dll*
* [x] *dinput8.dll*
* [x] *dwmapi.dll*
* [x] *dxgi.dll*
* [x] *glu32.dll*
* [x] *hid.dll*
* [x] *iphlpapi.dll*
* [x] *msasn1.dll*
* [x] *msimg32.dll*
* [x] *mswsock.dll*
* [x] *opengl32.dll*
* [x] *profapi.dll*
* [x] *propsys.dll*
* [x] *textshaping.dll*
* [x] *version.dll*
* [x] *winhttp.dll*
* [x] *wldp.dll*
* [x] *winmm.dll*
* [x] *xinput9_1_0.dll*
====
== ⚙ 配置
:fn-search-dirs: 搜索目录脚注:fn-search-dirs[搜索目录包括 Koaloader DLL 所在的目录以及目标进程的工作目录。]
Koaloader 附带一个配置文件 `Koaloader.config.json`,该文件适用于任何代理 DLL。
配置文件符合标准 JSON 格式。
下面介绍每个可用选项的描述:
`logging`::
启用或禁用写入 `Koaloader.log` 文件的日志记录。
可能的值:`true`、`false`(默认)。
`enabled`::
完全启用或禁用 Koaloader 注入。
可用于快速禁用 Koaloader 而无需修改磁盘上的文件。
可能的值:`true`(默认)、`false`。
`auto_load`:: 启用或禁用自动加载已知 DLL。
这可用于在无需 `Koaloader.config.json` 配置文件的情况下自动注入 DLL。
启用后,Koaloader 将首先在 {fn-search-dirs} 的父目录中查找已知 DLL。
如果找不到,它将递归遍历 {fn-search-dirs} 目录中的所有文件,并搜索具有已知文件名的文件。
默认:`true`。
已知文件名列表(以 32 和 64 结尾的名称分别仅由 32 位和 64 位二进制文件加载):
* `Unlocker.dll`、`Unlocker32.dll`、`Unlocker64.dll`
* `Lyptus.dll`、`Lyptus32.dll`、`Lyptus64.dll`
* `ScreamAPI.dll`、`ScreamAPI32.dll`、`ScreamAPI64.dll`
* `SmokeAPI.dll`、`SmokeAPI32.dll`、`SmokeAPI64.dll`
* `smoke_api.dll`、`smoke_api32.dll`、`smoke_api64.dll`
* `UplayR1Unlocker.dll`、`UplayR1Unlocker32.dll`、`UplayR1Unlocker64.dll`
* `UplayR2Unlocker.dll`、`UplayR2Unlocker32.dll`、`UplayR2Unlocker64.dll`
`targets`::
指定目标可执行文件的字符串列表。
这可用于防止被无关可执行文件意外加载。
Koaloader 将仅在以下情况下注入模块:
* 目标列表为空,**或者**
* 目标列表包含已加载 Koaloader 的可执行文件。
`modules`:: 描述将按定义顺序加载的模块的对象列表。
每个对象具有以下属性:
+
[horizontal]
`path`::: 指定 DLL 绝对或相对路径的字符串。
相对路径是相对于工作目录的,可能与可执行文件目录不同。
`required`::: 标记模块为加载所必需的布尔值。
这可用于指定 Koaloader 加载给定模块失败时的行为。
加载必需模块失败将导致崩溃并弹出消息框,而对于非必需模块,Koaloader 只会将错误打印到日志文件中。
默认:`true`。
您可以参考以下配置作为示例。
[sidebar]
--
这里我们定义了 2 个要加载的 DLL:
* `target.dll` - 通过相对于可执行文件当前工作目录的路径
* `eucalyptus.dll` - 通过绝对路径。
## [source,json]
## {
"logging": true,
"enabled": true,
"auto_load": false,
"targets": [
"program32.exe",
"program64.exe"
],
"modules": [
{
"path": "target.dll",
"required": true
},
{
"path": "C:/users/acidicoala/eucalyptus.dll",
"required": false
}
]
}
--
== 🏗️ 从源代码构建
=== 🚦 前提条件
:fn-lower-ver: 脚注:lower-versions[也可能支持旧版本。]
* CMake v3.24(确保 cmake 可从 powershell 使用)
* Visual Studio 2022{fn-lower-ver}。
* 已在 Windows 11 SDK (10.0.22621.0) 上测试{fn-lower-ver}。
=== 👨💻 命令
使用子模块克隆项目:
## [source,powershell]
## git clone --recurse-submodules https://github.com/acidicoala/Koaloader.git
使用所需参数运行构建脚本:
## [source,powershell]
## ./build.ps1 $Arch $Config $Proxy
其中
[horizontal]
`$Arch`:: 程序架构。
有效值:
* `32`
* `64`
`$Config`:: 构建配置。
有效值:
* `Debug`
* `Release`
* `RelWithDebInfo`
`$Proxy`:: 要构建的代理 DLL。
任何来自 `C:/Windows/System32` 且仅包含命名导出的 DLL 都有效。
示例:
## [source,powershell]
## ./build.ps1 64 Release d3d11
最终 DLL 位于
`build\$Arch\$Proxy\$Config`
=== 可能的改进
* [ ] 具有未命名导出(按序号)的 DLL
* [ ] 缺少 System32 目录中的 DLL
=== 其他说明
* 版本在 link:CMakeLists.txt[CMakeLists.txt] 中定义
* 更改 link:res[res] 目录中的文件后,可能需要重新加载 CMake 项目。
* GitHub actions 会在每次推送到 `master` 时构建项目,但仅当最后一次提交被标记时才会准备草稿发布。
* CI 发布的代理 DLL 需要在 link:.github/workflows/ci.yml[ci.yml] 中定义
== 👋 致谢
请参阅 https://github.com/acidicoala/Koalabox?tab=readme-ov-file#-acknowledgments[KoalaBox Readme] 中该项目使用的开源库列表。
== 📄 许可证
本软件根据 https://unlicense.org/[Unlicense] 获得许可,其条款可在 link:UNLICENSE.txt[UNLICENSE.txt] 中获取。
标签:API接口, Bash脚本, d3d11, d3d9, dinput8, DLL劫持, DLL注入, DNS 反向解析, Homebrew安装, opengl32, Payload投递, Search Order Hijacking, Windows, Windows逆向工程, xinput, 代理DLL, 作弊工具, 后门注入, 搜索顺序劫持, 流量审计, 游戏作弊