https://discord.com/invite/Qw8jsPD99X
Dieses Projekt ist unter der GNU AGPLv3.0
lizenziert (keine späteren Versionen).
Weitere Informationen finden Sie unter LICENSE
HINWEIS: Submodule und externe Abhängigkeiten können eigene Lizenzen haben! Überprüfen Sie auch deren Lizenzen.
Betriebssystem | x86 | x64 | ARM | Aarch64 |
---|---|---|---|---|
Windows | ✅ | ✅ | ||
Linux | ✅ | ✅ | ||
FreeBSD | ✔️ | ✔️ |
Status | Beschreibung |
---|---|
✅ | 100 % funktionsfähig |
✔️ | Meistens funktionsfähig |
Ungetestet |
Und noch viel mehr!
/* C++20 or higher */
# include < libmem/libmem.hpp >
# include < iostream >
using namespace libmem ;
int main ()
{
Address disas_addr = reinterpret_cast (main);
// Disassemble function 'main' until a 'ret' is found
for (;;) {
auto inst = Disassemble (disas_addr). value ();
std::cout << inst. to_string () << std::endl;
if (inst. mnemonic == " ret " )
break ;
disas_addr += inst. bytes . size ();
}
return 0 ;
}
/*
Output:
0x55b1a3259275: push rbp -> [ 55 ]
0x55b1a3259276: mov rbp, rsp -> [ 48 89 e5 ]
...
0x55b1a325941a: leave -> [ c9 ]
0x55b1a325941b: ret -> [ c3 ]
*/
#include
void hk_take_damage ( int amount )
{
printf ( "hooked take_damage! no damage will be takenn" );
return ;
}
int main ()
{
lm_module_t game_mod ;
lm_address_t fn_take_damage ;
LM_FindModule ( "game.dll" , & game_mod );
printf ( "[*] Base address of 'game.dll': %pn" , game_mod . base );
fn_take_damage = LM_FindSymbolAddress ( & game_mod , "take_damage" );
printf ( "[*] Found 'take_damage' function: %pn" , fn_take_damage );
LM_HookCode ( fn_take_damage , hk_take_damage , LM_NULLPTR );
printf ( "[*] 'take_damage' hooked, player will no longer receive damagen" );
return 0 ;
}
use libmem :: * ;
fn godmode ( ) -> Option < ( ) > {
let game_process = find_process ( "game_linux64" ) ? ;
let client_module = find_module_ex ( & game_process , "libclient.so" ) ? ;
let fn_update_health = sig_scan_ex (
& game_process ,
"55 48 89 E5 66 B8 ?? ?? 48 8B 5D FC" ,
client_module . base ,
client_module . size ,
) ? ;
println ! (
"[*] Signature scan result for 'update_health' function: {}" ,
fn_update_health
) ;
let shellcode = assemble_ex ( "mov rbx, 1337; mov [rdi], rbx; ret" , Arch :: X64 , 0 ) ? ;
write_memory_ex ( & game_process , fn_update_health + 8 , & shellcode . as_slice ( ) ) ? ;
println ! ( "[*] Patched 'update_health' function to always set health to 1337!" ) ;
Some ( ( ) )
}
fn main ( ) {
godmode ( ) ;
}
from libmem import *
import time
process = find_process ( "game.exe" )
game_mod = find_module_ex ( process , process . name )
# Resolve a Cheat Engine pointer scan
health_pointer = deep_pointer_ex ( process , game_mod . base + 0xdeadbeef , [ 0xA0 , 0x04 , 0x10 , 0xF0 , 0x0 ])
# Set player health to 1337 forever
while True :
write_memory_ex ( process , health_pointer , bytearray ( int ( 1337 ). to_bytes ( 4 )))
time . sleep ( 0.2 )
Die Hauptdokumentation für libmem finden Sie in include/libmem.h
. Alle APIs sind dokumentiert und enthalten sehr beschreibende Informationen zu jeder Funktion, ihren Parametern und ihrem Rückgabewert. Sie befinden sich in Kommentaren in der Nähe, Sie sollten sie also sehen können, wenn Sie mit der Maus über Ihren Texteditor/Ihre IDE fahren.
Ebenso ist die Bindungsdokumentation in ihre Pakete eingebettet, sodass Ihr Texteditor/Ihre IDE auf die Dokumentation für jede API zugreifen können sollte.
Diese Bindungen werden von der Community/Dritten vorgenommen und stehen in keiner Verbindung zum libmem-Projekt oder seinem Autor.
Ihr Code kann auch eigene Lizenzen haben, die von denen von libmem abweichen.
Fügen Sie die folgenden Befehle zu Ihrer CMakeLists.txt
hinzu.
Sie rufen libmem-config.cmake
aus dem Stammverzeichnis dieses Repositorys ab, wodurch libmem-Binärdateien für Ihr System heruntergeladen und libmem in Ihr CMake-Projekt aufgenommen werden.
include (FetchContent)
# Download and set up libmem
FetchContent_Declare(libmem-config URL "https://raw.githubusercontent.com/rdbo/libmem/config-v1/libmem-config.cmake" DOWNLOAD_NO_EXTRACT TRUE )
FetchContent_MakeAvailable(libmem-config)
set ( CMAKE_PREFIX_PATH "${libmem-config_SOURCE_DIR}" " ${CMAKE_PREFIX_PATH} " )
set (LIBMEM_DOWNLOAD_VERSION "5.0.2" )
# Find libmem package
find_package (libmem CONFIG REQUIRED)
Verwenden Sie Folgendes, um eine Verknüpfung mit libmem herzustellen (HINWEIS: Möglicherweise ist eine Verknüpfung mit anderen Abhängigkeiten erforderlich – weitere Informationen finden Sie im Abschnitt Dependencies
):
# Link against libmem
target_link_libraries ( PRIVATE libmem::libmem)
Hinweis : Wenn Sie eine Binärversion von libmem in den GitHub-Versionen herunterladen, müssen Sie nur das Windows SDK installieren. Das Erstellen ist nicht erforderlich. Fügen Sie einfach libmem/include
zu den Include-Verzeichnissen Ihres Projekts hinzu und verknüpfen Sie es mit der heruntergeladenen Binärdatei.
Installieren Sie das Windows SDK: Windows 7 – Windows 10/11
Installieren Sie Python 3 (aktivieren Sie die Option zum Hinzufügen von Python zu PATH) (Verwenden Sie Python 3.8.9 für Windows 7)
Installieren Sie Visual Studio 2022 oder neuer (mit C++-Unterstützung und CMake) (ältere Versionen funktionieren möglicherweise, wurden aber nicht getestet). HINWEIS: Sie können nur die Visual Studio Build Tools installieren, wenn Sie nicht die gesamte IDE benötigen.
Installieren Sie Git Bash
Führen Sie als Administrator eine Visual Studio Developer Command Prompt
(oder x64 Native Tools Command Prompt for VS 2022
für 64 Bit) aus
Führen Sie den folgenden Befehl aus, um das Zielverzeichnis von libmem an Ihre %PATH%
-Benutzervariable anzuhängen ( WARNUNG – achten Sie auf Ihre %PATH%
-Größenbeschränkung!):
setx PATH "%PATH%;%ProgramFiles%libmeminclude;%ProgramFiles%libmemlib"
Lesen Sie weiter unter Build and Install
Hinweis : Die folgenden Befehle gelten für Debian/Ubuntu-basierte Distributionen. Stellen Sie sicher, dass Sie die passenden Befehle für Ihre Linux-Distribution finden.
Öffnen Sie ein Terminal
Installieren Sie GCC, G++, Git, CMake, Make, Python 3 und die Linux-Header:
sudo apt install gcc g++ git cmake make python3 linux-headers
Lesen Sie weiter unter Build and Install
Fügen Sie einen Mountpoint für das procfs
Dateisystem in Ihrer /etc/fstab
hinzu, indem Sie die folgende Zeile anhängen:
proc /proc procfs rw 0 0
Mounten Sie die procfs
manuell. Dies ist nur erforderlich, wenn Sie keinen Neustart durchführen. Wenn Sie neu starten, wird es aufgrund der Zeile unter /etc/fstab
automatisch gemountet. Führen Sie den folgenden Befehl aus (als Root):
mount -t procfs proc /proc
Installieren Sie Git, CMake und Python3 (als Root ausführen) (clang, clang++ und make sollten bereits installiert sein):
pkg install git cmake python3
Lesen Sie weiter unter Build and Install
Hinweis : Führen Sie die folgenden Befehle auf Git Bash (Windows) oder einem Terminal (Linux/FreeBSD) aus.
Klonen Sie das Repository:
git clone --recursive --depth 1 https://github.com/rdbo/libmem
Generieren Sie den CMake-Cache:
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
Kompilieren Sie libmem:
Windows : nmake
Unix-ähnlich : make -j 4
Installieren Sie libmem (als Root oder als Administrator ausführen):
Windows : nmake install
Unix-ähnlich : make install
Befolgen Sie nach der Installation den Abschnitt zur richtigen Usage
für Ihre Programmiersprache
Fügen Sie #include
(C/C++) oder #include
(C++) zu Ihrem Quellcode hinzu. Verknüpfen Sie die generierte libmem-Bibliothek mit Ihrer Binärdatei ( liblibmem.so
für Unix-ähnliche oder libmem.dll
für Windows). Für GCC-ähnliche Compiler : Fügen Sie das Flag -llibmem
zu Ihrem Compiler hinzu und er sollte ihn verknüpfen.
#include /* C/C++ */
#include /* Force C++ */
HINWEIS : Sie müssen libmem nicht mehr installieren, um es mit Rust zu verwenden, solange die fetch
auf der libmem-Kiste aktiviert ist (Standard). Wenn Sie diese Funktion deaktivieren, wird in Ihrem System nach libmem gesucht, und Sie können den libmem-Pfad explizit festlegen, indem Sie die Umgebungsvariable LIBMEM_DIR=
verwenden.
Fügen Sie die folgende Zeile zu Ihrer Cargo.toml
unter [dependencies]
hinzu:
libmem = " 5 "
Importieren Sie libmem in Ihren Rust-Quellcode:
use libmem :: * ;
HINWEIS : Sie müssen libmem nicht mehr installieren, um es mit Python zu verwenden. Wenn keine Installation gefunden wird, holt und verknüpft das Paket libmem nahtlos für Sie. Sie können die Umgebungsvariable LIBDIR=
verwenden, um dem libmem-Paket mitzuteilen, wo es nach Ihrer Installation suchen soll (sofern Sie sie installiert haben).
Stellen Sie sicher, dass Python >= 3.6 aktiv ist
Installieren Sie entweder das libmem
Paket von PyPi, indem Sie den folgenden Befehl ausführen:
pip install --upgrade libmem
Oder erstellen und installieren Sie es selbst, indem Sie die folgenden Befehle ausführen:
cd libmem-py
python configure.py
python setup.py install
Um nun libmem zu importieren, führen Sie einfach Folgendes in Ihrem Python-Code aus:
from libmem import *
Alle:
Windows:
Linux/Android:
BSD:
LM_EnumProcesses
LM_GetProcess
LM_GetProcessEx
LM_FindProcess
LM_IsProcessAlive
LM_GetBits
LM_GetSystemBits
LM_EnumThreads
LM_EnumThreadsEx
LM_GetThread
LM_GetThreadEx
LM_GetThreadProcess
LM_EnumModules
LM_EnumModulesEx
LM_FindModule
LM_FindModuleEx
LM_LoadModule
LM_LoadModuleEx
LM_UnloadModule
LM_UnloadModuleEx
LM_EnumSymbols
LM_FindSymbolAddress
LM_DemangleSymbol
LM_FreeDemangledSymbol
LM_EnumSymbolsDemangled
LM_FindSymbolAddressDemangled
LM_EnumSegments
LM_EnumSegmentsEx
LM_FindSegment
LM_FindSegmentEx
LM_ReadMemory
LM_ReadMemoryEx
LM_WriteMemory
LM_WriteMemoryEx
LM_SetMemory
LM_SetMemoryEx
LM_ProtMemory
LM_ProtMemoryEx
LM_AllocMemory
LM_AllocMemoryEx
LM_FreeMemory
LM_FreeMemoryEx
LM_DeepPointer
LM_DeepPointerEx
LM_DataScan
LM_DataScanEx
LM_PatternScan
LM_PatternScanEx
LM_SigScan
LM_SigScanEx
LM_GetArchitecture
LM_Assemble
LM_AssembleEx
LM_FreePayload
LM_Disassemble
LM_DisassembleEx
LM_FreeInstructions
LM_CodeLength
LM_CodeLengthEx
LM_HookCode
LM_HookCodeEx
LM_UnhookCode
LM_UnhookCodeEx
LM_VmtNew
LM_VmtHook
LM_VmtUnhook
LM_VmtGetOriginal
LM_VmtReset
LM_VmtFree
Lesen Sie die Datei CONTRIBUTING.md
im Stammverzeichnis dieses Repositorys
Erstellt mit libmem: