Simplify the code (use ctor for all targets) and add a readme
This commit is contained in:
parent
11ec2f401b
commit
a5880b5bed
@ -6,13 +6,11 @@ edition = "2021"
|
|||||||
[lib]
|
[lib]
|
||||||
crate-type = ["cdylib"]
|
crate-type = ["cdylib"]
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "standalone"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
frida = { version = "0.4.0", features = ["auto-download"] }
|
frida = { version = "0.4.0", features = ["auto-download"] }
|
||||||
frida-sys = { version = "0.4.0", features = ["auto-download", "frida-build"] }
|
frida-sys = { version = "0.4.0", features = ["auto-download", "frida-build"] }
|
||||||
lazy_static = "1.4.0"
|
lazy_static = "1.4.0"
|
||||||
|
|
||||||
# [target.'cfg(unix)'.dependencies]
|
|
||||||
ctor = "0.2.0"
|
ctor = "0.2.0"
|
||||||
|
|
||||||
# [target.'cfg(windows)'.dependencies]
|
|
||||||
# winapi = "0.3.9"
|
|
||||||
|
51
README.md
Normal file
51
README.md
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
# frida-deepfreeze-rs
|
||||||
|
|
||||||
|
Have you ever written a frida script this good, that you wanted to make it permanent?
|
||||||
|
Well, now you can!
|
||||||
|
|
||||||
|
frida-deepfreeze-rs is a tool that allows you to convert your frida scripts into
|
||||||
|
either a standalone executable that when called with a PID injects itself and runs
|
||||||
|
the script or a shared library that can be somehow injected to a process and runs
|
||||||
|
the script.
|
||||||
|
|
||||||
|
All desktop platforms are supported (Windows, Linux, macOS).
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
You're gonna have to compile the tool yourself as the frida script gets embedded
|
||||||
|
at compile time.
|
||||||
|
|
||||||
|
You only need a working cargo installation to compile it, it's quite simple.
|
||||||
|
|
||||||
|
You can feed your script either as a string using the `FRIDA_CODE` environment
|
||||||
|
variable or as a file using the `FRIDA_CODE_FILE` environment variable.
|
||||||
|
|
||||||
|
### Standalone executable
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/dzervas/frida-deepfreeze-rs
|
||||||
|
FRIDA_CODE='console.log("Hello world from frida-deepfreeze-rs!")' cargo run --bin standalone -- 1234
|
||||||
|
```
|
||||||
|
|
||||||
|
The binary is located at `target/debug/standalone` (`.exe` for windows).
|
||||||
|
|
||||||
|
### Shared library
|
||||||
|
|
||||||
|
```bash
|
||||||
|
git clone https://github.com/dzervas/frida-deepfreeze-rs
|
||||||
|
FRIDA_CODE='console.log("Hello world from frida-deepfreeze-rs!")' cargo build --lib
|
||||||
|
LD_PRELOAD=target/debug/libfrida_deepfreeze_rs.so cat
|
||||||
|
# rundll32.exe target/debug/frida_deepfreeze_rs.dll,inject_self 1234 (windows equivalent)
|
||||||
|
```
|
||||||
|
|
||||||
|
The resulting library is located at `target/debug/libfrida_deepfreeze_rs.so`
|
||||||
|
(`.dll` for windows). You can inject it using your favorite injector.
|
||||||
|
|
||||||
|
There are two exported functions:
|
||||||
|
|
||||||
|
```c
|
||||||
|
void inject(uint32_t pid); // Run the frida script in the process with the given pid
|
||||||
|
void inject_self(); // Run the frida script in the process that called the function
|
||||||
|
```
|
||||||
|
|
||||||
|
By default, on load the library will call `inject_self()`.
|
6
build.rs
6
build.rs
@ -6,11 +6,11 @@ fn main() {
|
|||||||
|
|
||||||
if let Ok(code_file) = env::var("FRIDA_CODE_FILE") {
|
if let Ok(code_file) = env::var("FRIDA_CODE_FILE") {
|
||||||
env::set_var("FRIDA_CODE", &std::fs::read_to_string(&code_file).unwrap());
|
env::set_var("FRIDA_CODE", &std::fs::read_to_string(&code_file).unwrap());
|
||||||
eprintln!("Using code from file: {}", &code_file);
|
println!("cargo:warning=Using code from file: {}", &code_file);
|
||||||
} else if env::var("FRIDA_CODE").is_ok() {
|
} else if env::var("FRIDA_CODE").is_ok() {
|
||||||
eprintln!("Using code from environment variable: FRIDA_CODE");
|
println!("cargo:warning=Using code from environment variable: FRIDA_CODE");
|
||||||
} else {
|
} else {
|
||||||
eprintln!("Please set FRIDA_CODE or FRIDA_CODE_FILE environment variable");
|
println!("cargo:error=Please set FRIDA_CODE or FRIDA_CODE_FILE environment variable");
|
||||||
std::process::exit(1);
|
std::process::exit(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
29
src/lib.rs
29
src/lib.rs
@ -2,39 +2,10 @@ pub mod injector;
|
|||||||
|
|
||||||
pub use injector::{inject, inject_self};
|
pub use injector::{inject, inject_self};
|
||||||
|
|
||||||
// #[cfg(unix)]
|
|
||||||
use ctor::ctor;
|
use ctor::ctor;
|
||||||
|
|
||||||
// #[cfg(unix)]
|
|
||||||
#[ctor]
|
#[ctor]
|
||||||
fn _start() {
|
fn _start() {
|
||||||
println!("[+] frida-deepfreeze-rs SO injected");
|
println!("[+] frida-deepfreeze-rs SO injected");
|
||||||
inject_self();
|
inject_self();
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
#[cfg(windows)]
|
|
||||||
use std::ptr;
|
|
||||||
#[cfg(windows)]
|
|
||||||
use std::ffi::c_void;
|
|
||||||
#[cfg(windows)]
|
|
||||||
use winapi::um::libloaderapi::{DllMain, DLL_PROCESS_ATTACH, DLL_PROCESS_DETACH, DLL_THREAD_ATTACH, DLL_THREAD_DETACH};
|
|
||||||
|
|
||||||
#[allow(non_snake_case)]
|
|
||||||
#[cfg(windows)]
|
|
||||||
#[no_mangle]
|
|
||||||
pub extern "system" fn DllMain(hinstDLL: *mut c_void, fdwReason: u32, _: *mut c_void) -> i32 {
|
|
||||||
match fdwReason {
|
|
||||||
DLL_PROCESS_ATTACH => {
|
|
||||||
println!("[+] frida-deepfreeze-rs DLL injected");
|
|
||||||
inject_self();
|
|
||||||
}
|
|
||||||
// DLL_PROCESS_DETACH => {}
|
|
||||||
// DLL_THREAD_ATTACH => {}
|
|
||||||
// DLL_THREAD_DETACH => {}
|
|
||||||
_ => {}
|
|
||||||
}
|
|
||||||
|
|
||||||
1
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user