pub struct Injector<'a> {
    pub dll: &'a str,
    pub pid: u32,
}
Expand description

This Crate Provides functionality, for injecting dlls into other processes. Most of the crate is right now accessible through the Injector class.

You will need to provide a pid, and a dll to inject. This crate will do the rest for you.

The main focus will always be on performing the injection reliable.

If you have any suggestions, on improving the outfacing api of this crate create an issue, or pr. I am not sure yet, if I like this design.

Linux support will probably not come. It is insanely hard and platform specific, because

  1. we would need to write raw machinecode/shellcode to the target process.
  2. which then has the necessary code to load the .so
  3. we need to somehow redirect the target program’s execution, to execute our code
  4. we need to do that, without somehow disrupting ANY of the program’s code
  5. we need to return the EXACT state before we did anything, because the other program may need that

If this library is supposed to be helpful I’d want to not require to run it as root. Unfortunately some steps involve calling ptrace. Access to the command is restricted, if you are not the parent process of the process you are trying to trace. These requirements would mean, that we can only inject so files to processes, that the program this library itself created. This struct will expose certain module private functions, to actually use the api.

Fields

dll: &'a str

The path to a dll. This may be in any format, that rust understands

pid: u32

The pid the dll should be injected into

Implementations

This Function will find all currently processes, with a given name. Even if no processes are found, an empty Vector should return.

This function will attempt, to eject a dll from another process. Notice:This implementation blocks, and waits, until the library is ejected?, or the ejection failed.

Inject a DLL into another process Notice:This implementation blocks, and waits, until the library is injected, or the injection failed.

Find a PID, where the process-name matches some user defined selector

This function will return, whether a dll is x64, or x86. The Return value will be Ok(true), if the dll is x64(64bit), and Ok(false), if the dll is x86(32bit).

Create a new Injector object.

Sets the dll

Sets the pid

Trait Implementations

Returns a copy of the value. Read more

Performs copy-assignment from source. Read more

Formats the value using the given formatter. Read more

Returns the “default value” for a type. Read more

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more

Immutably borrows from an owned value. Read more

Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The resulting type after obtaining ownership.

Creates owned data from borrowed data, usually by cloning. Read more

🔬 This is a nightly-only experimental API. (toowned_clone_into)

Uses borrowed data to replace owned data, usually by cloning. Read more

The type returned in the event of a conversion error.

Performs the conversion.

The type returned in the event of a conversion error.

Performs the conversion.