🐨 Koaloader 📥

A collection of DLLs that use search order hijacking to automatically inject specified DLLs.

🚀 Usage

Simply place one of the proxy dlls where a process is attempting to load it and setup the config file to load the DLLs
that you wish to inject.

📚 Supported proxies

  • dinput8.dll
  • version.dll
  • xinput9_1_0.dll

⚙ Configuration

Koaloader comes with a configuration file Koaloader.json, which will be the same for any proxy dll. The config file
conforms to the standard JSON format. The description of each available option is presented below:

  • logging: Enables or disables logging into a Koaloader.log file. Possible values: true, false (default).
  • targets: A list of strings that specify targeted executables. Koaloader will inject modules if, and only if:
    • The list of targets is empty
    • The list of targets includes the executable that has loaded Koaloader.
  • modules: A list of objects that describe modules that will be loaded in the order they were defined. Each object has
    the following properties:

    • path: A string that specifies absolute or relative path to a DLL. The relative path is with respect to the working directory, which may be different from the executable directory.

You can refer to the following config as an example.

Here we have defined 2 DLLs to load:

  • target.dll – via a path that is relative to the current working directory of the executable
  • eucalyptus.dll – via an absolute path.

{
  "logging": true,
  "targets": [ "program32.exe", "program64.exe" ],
  "modules": [
    {
      "path": "target.dll"
    },
    {
      "path": "C:/users/acidicoala/eucalyptus.dll"
    }
  ]
}

🛠 Development

🚥 Prerequisites

  • Git v2.13 or newer
  • CMake 3.21 or newer
  • VS 2019 Build Tools/IDE with Desktop Development with C++ installed.

Clone the project with its submodules:

git clone --recurse-submodules https://github.com/acidicoala/Koaloader.git

Run the build script with desired parameters:

./build.ps1 $Arch $Proxy $Config
  • $Arch – Program architecture. Valid values:
    • 32
    • 64
  • $Proxy – Proxy DLL to build. Valid values:
    • dinput8
    • version
    • xinput9_1_0
  • $Config – Build configuration. Valid values:
    • Debug
    • Release
    • RelWithDebInfo

Example:

./build.ps1 64 xinput9_1_0 Release

The final DLL will be located at
build\$Arch\$Proxy\$Config

🔡 Commands

Update all submodules:

git submodule foreach git pull

Miscellaneous notes

  • Version is defined in version.txt
  • CMake project likely needs to be reloaded after changing files in the res directory.
  • GitHub actions will build the project on every push to master, but will prepare a draft release only if the last
    commit was tagged.
  • Proxy dll checklist:

👋 Acknowledgements

This project makes use of the following open source projects:

📄 License

This software is licensed under BSD Zero Clause License, terms of which are available in LICENSE.txt

GitHub

View Github