19 releases (9 stable)

1.2.1 May 4, 2024
1.1.7 Mar 10, 2024
1.0.4 Nov 13, 2023
0.4.0 Mar 15, 2023
0.1.1-dev2 Oct 21, 2022

#48 in FFI

Download history 385/week @ 2024-02-24 10/week @ 2024-03-02 188/week @ 2024-03-09 82/week @ 2024-03-16 4/week @ 2024-03-23 17/week @ 2024-03-30 167/week @ 2024-04-06 28/week @ 2024-04-13 152/week @ 2024-05-04 1/week @ 2024-05-11 9/week @ 2024-05-18 1/week @ 2024-05-25

163 downloads per month

GPL-2.0 license

81KB
2K SLoC

Poggers

A library for interacting with memory, processes, and similar tools for primarily game cheating purposes.

With poggers you're able to achieve the following things:

  • Easily create an entrypoint for your DLL with panic unwrapping already handled for you
  • Effortlessly read and write into an external process' memory
  • Use IDA signatures to scan for instructions in processes.
  • Use CreateToolhelp32Snapshot in a sane fashion with first class support for iterating over processes and modules
  • Cross compatibility for Windows and Linux with minimal code changes

Documentation | Crates.io | Repository

Add into your project

[dependencies]
poggers = "1"
# if you need to use the entrypoint macro
poggers_derive = "0.1.5"

External Example

a simple example of how you can find a process and write into it's memory

use poggers::structures::process::Process;
use poggers::traits::Mem;
fn main() {
    let process = Process::find_name("csgo.exe").unwrap();
    unsafe {
        process.write(0x1000,&1).unwrap()
    }
}

Internal Example

If you're making an internal program, you may wish to create an entry point and do stuff with the current process.

use poggers::structures::process::implement::utils::ProcessUtils;
use poggers::structures::process::Process;
use poggers::traits::Mem;
// automatically create an entry point for your dll! (crate type must be cdylib)
// you also do not need to worry about panic unwinding yourself as it is already done.
#[poggers_derive::create_entry]
fn entry() {
    let this_proc = Process::this_process();
    unsafe {
        let bleh : i32 = this_proc.read(0x1000).unwrap();
        println!("{}",bleh);
        let base_mod_name = this_proc.get_base_module().unwrap().get_name();
        println!("{}",base_mod_name);
    }
}

LICENSE

this project / library is licensed under GNU General Public License v2.0

Dependencies

~0.6–37MB
~525K SLoC