https://discord.com/invite/Qw8jsPD99X
Ce projet est sous licence GNU AGPLv3.0
(pas de versions ultérieures)
Lisez LICENSE
pour plus d’informations
REMARQUE : les sous-modules et les dépendances externes peuvent avoir leurs propres licences ! Vérifiez également leurs licences.
Système d'exploitation | x86 | x64 | BRAS | Aarch64 |
---|---|---|---|---|
Fenêtres | ✅ | ✅ | ||
Linux | ✅ | ✅ | ||
GratuitBSD | ✔️ | ✔️ |
Statut | Description |
---|---|
✅ | 100% fonctionnel |
✔️ | Travaille principalement |
Non testé |
Et bien plus encore !
/* 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 )
La documentation principale de libmem se trouve dans include/libmem.h
. Toutes les API sont documentées et contiennent des informations très descriptives sur chaque fonction, leurs paramètres et leur valeur de retour. Ils se trouvent dans les commentaires à proximité, vous devriez donc pouvoir les voir en survolant votre éditeur de texte/IDE.
De même, la documentation des liaisons est intégrée à leurs packages, votre éditeur de texte/IDE devrait donc pouvoir accéder à la documentation de chaque API.
Ces liaisons sont effectuées par la communauté/des tiers et ne sont pas affiliées au projet libmem ou à son auteur.
Leur code peut également avoir leurs propres licences, différentes de celles de libmem.
Ajoutez les commandes suivantes à votre CMakeLists.txt
.
Ils récupéreront libmem-config.cmake
à la racine de ce référentiel, qui téléchargera les binaires libmem pour votre système et inclura libmem dans votre projet CMake.
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)
Utilisez ce qui suit pour établir un lien avec libmem (REMARQUE : il peut être nécessaire d'établir un lien avec d'autres dépendances - accédez à la section Dependencies
pour plus d'informations) :
# Link against libmem
target_link_libraries ( PRIVATE libmem::libmem)
Remarque : Si vous téléchargez une version binaire de libmem dans les versions GitHub, il vous suffit d'installer le SDK Windows. La construction n'est pas nécessaire, ajoutez simplement libmem/include
aux répertoires d'inclusion de votre projet et liez-le au binaire que vous avez téléchargé.
Installez le SDK Windows : Windows 7 - Windows 10/11
Installez Python 3 (cochez l'option pour ajouter Python à PATH) (utilisez Python 3.8.9 pour Windows 7)
Installez Visual Studio 2022 ou une version plus récente (avec prise en charge C++ et CMake) (les anciennes versions peuvent fonctionner, mais elles n'ont pas été testées). REMARQUE : vous pouvez installer uniquement Visual Studio Build Tools si vous ne souhaitez pas l'intégralité de l'EDI.
Installer Git Bash
Exécutez une Developer Command Prompt
(ou x64 Native Tools Command Prompt for VS 2022
pour 64 bits) en tant qu'administrateur
Exécutez la commande suivante pour ajouter le répertoire de destination de libmem à votre variable utilisateur %PATH%
( AVERTISSEMENT - surveillez votre limite de taille %PATH%
!) :
setx PATH "%PATH%;%ProgramFiles%libmeminclude;%ProgramFiles%libmemlib"
Continuer la lecture sur Build and Install
Remarque : les commandes suivantes concernent les distributions basées sur Debian/Ubuntu. Assurez-vous de trouver les commandes appropriées pour votre distribution Linux.
Ouvrir un terminal
Installez GCC, G++, Git, CMake, Make, Python 3 et les en-têtes Linux :
sudo apt install gcc g++ git cmake make python3 linux-headers
Continuer la lecture sur Build and Install
Ajoutez un point de montage pour le système de fichiers procfs
dans votre /etc/fstab
en ajoutant la ligne suivante :
proc /proc procfs rw 0 0
Montez manuellement le procfs
. Cela ne sera nécessaire que si vous ne redémarrez pas. Si vous redémarrez, il sera automatiquement monté à cause de la ligne /etc/fstab
. Exécutez la commande suivante (en tant que root) :
mount -t procfs proc /proc
Installez Git, CMake et Python3 (exécutés en tant que root) (clang, clang++ et make devraient déjà être installés) :
pkg install git cmake python3
Continuer la lecture sur Build and Install
Remarque : Exécutez les commandes suivantes sur Git Bash (Windows) ou un terminal (Linux/FreeBSD).
Clonez le dépôt :
git clone --recursive --depth 1 https://github.com/rdbo/libmem
Générez le cache CMake :
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
Compilez la bibliothèque :
Windows : nmake
Comme Unix : make -j 4
Installez libmem (exécuté en tant que root ou en tant qu'administrateur) :
Windows : nmake install
Comme Unix : make install
Après l'installation, suivez la section Usage
appropriée pour votre langage de programmation.
Ajoutez #include
(C/C++) ou #include
(C++) à votre code source. Liez la bibliothèque libmem générée à votre binaire ( liblibmem.so
pour Unix ou libmem.dll
pour Windows). Pour les compilateurs de type GCC : ajoutez l'indicateur -llibmem
à votre compilateur et il devrait le lier.
#include /* C/C++ */
#include /* Force C++ */
REMARQUE : vous n'avez plus besoin d'installer libmem pour l'utiliser avec Rust, tant que la fonction fetch
est activée sur la caisse libmem (par défaut). Si vous désactivez cette fonctionnalité, il recherchera libmem dans votre système et vous pourrez rendre le chemin de libmem explicite en utilisant l'environnement var LIBMEM_DIR=
.
Ajoutez la ligne suivante à votre Cargo.toml
sous [dependencies]
:
libmem = " 5 "
Importez libmem dans votre code source Rust :
use libmem :: * ;
REMARQUE : Vous n'avez plus besoin d'installer libmem pour l'utiliser avec Python. Si aucune installation n'est trouvée, le package récupérera et liera libmem pour vous de manière transparente. Vous pouvez utiliser la variable d'environnement LIBDIR=
pour indiquer au package libmem où rechercher votre installation (si vous l'avez installée).
Assurez-vous d'avoir Python >= 3.6 actif
Soit installez le package libmem
depuis PyPi en exécutant la commande suivante :
pip install --upgrade libmem
Ou créez-le et installez-le vous-même en exécutant les commandes suivantes :
cd libmem-py
python configure.py
python setup.py install
Maintenant, pour importer libmem, procédez simplement comme suit dans votre code Python :
from libmem import *
Tous:
Fenêtres :
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
Lisez le fichier CONTRIBUTING.md
dans le répertoire racine de ce référentiel
Réalisé avec libmem :