Skip to main content

Python DLL injector for Windows.

Project description

PyDll-Injector

Python DLL injector for Windows. Supports various injection methods.

Features

PyDll-Injector comes with the following features:

  • DLL Injection on app start: Injects DLL(s) into a process when it starts;
  • Env variables support: Enables you to pass environmental variables to the injected DLL;
  • Multiple injection methods: Supports various injection methods;
  • Check if process is running: Checks if a process is running after injection;
  • Graceful process termination: Allows you to terminate the spawned process;
  • Ready to use CLI: Comes with a command line interface for easy usage.

Injection methods

The following injection methods are supported:

  • standard: Classic CreateRemoteThread + LoadLibraryA;
  • apc: QueueUserAPC + LoadLibraryA. Target thread must enter an alertable state;
  • nt: NtCreateThreadEx + LoadLibraryA (stealthier than CreateRemoteThread);
  • hook: SetWindowsHookExA(WH_CBT) injection. DLL must export HookProc.

Usage

You can use PyDll-Injector via the command line interface or as a library in your Python code.

CLI

Install the package on your system:

pip install pydll-injector[cli]

You can now use PyDll-Injector from the command line like this:

pydll-injector --executable-file "A:\Path\To\App.exe" --dll-list "B:\Path\To\Your.dll"

For the list of all available CLI options, run:

pydll-injector --help

This injector also allows you to pass configuration via a toml file. Here is a sample configuration file:

[launcher]
executable_file = "A:\\Path\\To\\App.exe"
cmd_line_args = "-arg1 -arg2"
dll_list = [
    "B:\\Path\\To\\Your.dll",
]
injection_method = "nt"

[environment]
vars = ["FOO=bar", "BAZ=qux"]
use_system_env = true
environment_append = false

Library

First, install the package. For example, using uv:

uv add pydll-injector

You can now import the library and use it in your Python code:

from pydll_injector.process import spawn_process, is_process_running
from pydll_injector.models import Launcher, Environment

def main() -> None:
    launcher = Launcher(
        executable_file= r"A:\Path\To\App.exe",
        cmd_line_args="",
        dll_list=[r"B:\\Path\\To\\Your.dll"],
        injection_method='apc',
    )
    env = Environment(
        vars=["FOO=bar"],
        use_system_env=True,
        environment_append=False
    )

    ctx = spawn_process(launcher, env)
    while is_process_running(ctx):
        pass

    print("Process has exited.")

if __name__ == "__main__":
    main()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pydll_injector-0.1.1.tar.gz (21.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pydll_injector-0.1.1-py3-none-any.whl (9.9 kB view details)

Uploaded Python 3

File details

Details for the file pydll_injector-0.1.1.tar.gz.

File metadata

  • Download URL: pydll_injector-0.1.1.tar.gz
  • Upload date:
  • Size: 21.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.6.14

File hashes

Hashes for pydll_injector-0.1.1.tar.gz
Algorithm Hash digest
SHA256 885e8aead15192cb028ef947a5be8d26a9ad8b4177fd3897875438aee351601b
MD5 97dbb87a27cf8fd50cd5d5861d790cec
BLAKE2b-256 8e1f93082f1a6cc854b2937b48c11183bc3b66f2fb7470840a5544da44385d7f

See more details on using hashes here.

File details

Details for the file pydll_injector-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for pydll_injector-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a1ecca9b271d003ab13499845733c5c06cc998186460dd8489cfcf179f26ec21
MD5 91b8a07b9ac8a94432d5fce939e71f5d
BLAKE2b-256 3716d605edc025cc3fa54eac850c51d9f5a6e5a2ed932156023a5887a4f08356

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page