https://discord.com/invite/Qw8jsPD99X
Proyek ini dilisensikan di bawah GNU AGPLv3.0
(tidak ada versi yang lebih baru)
Baca LICENSE
untuk informasi lebih lanjut
CATATAN: Submodul dan dependensi eksternal mungkin memiliki lisensinya sendiri! Periksa juga lisensi mereka.
sistem operasi | x86 | x64 | LENGAN | Aarch64 |
---|---|---|---|---|
jendela | ✅ | ✅ | ||
Linux | ✅ | ✅ | ||
FreeBSD | ✔️ | ✔️ |
Status | Keterangan |
---|---|
✅ | 100% bekerja |
✔️ | Sebagian besar bekerja |
Belum dicoba |
Dan masih banyak lagi!
/* 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 )
Dokumentasi utama untuk libmem dapat ditemukan di include/libmem.h
. Semua API didokumentasikan dan berisi informasi yang sangat deskriptif tentang setiap fungsi, parameternya, dan nilai kembaliannya. Mereka terletak di komentar terdekat, jadi Anda seharusnya dapat melihatnya dengan mengarahkan kursor ke editor teks/IDE Anda.
Demikian pula, dokumentasi pengikatan tertanam dalam paketnya, sehingga editor teks/IDE Anda harus dapat mengakses dokumentasi untuk setiap API.
Pengikatan ini dilakukan oleh komunitas/pihak ketiga dan tidak berafiliasi dengan proyek libmem atau pembuatnya.
Kode mereka juga dapat memiliki lisensinya sendiri, berbeda dari lisensi libmem.
Tambahkan perintah berikut ke CMakeLists.txt
Anda.
Mereka akan mengambil libmem-config.cmake
dari root repositori ini, yang akan mengunduh binari libmem untuk sistem Anda dan menyertakan libmem dalam proyek CMake Anda.
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)
Gunakan yang berikut ini untuk menautkan ke libmem (CATATAN: mungkin perlu menautkan ke dependensi lain - buka bagian Dependencies
untuk informasi lebih lanjut):
# Link against libmem
target_link_libraries ( PRIVATE libmem::libmem)
Catatan : Jika Anda mengunduh libmem versi biner di rilis GitHub, Anda hanya perlu menginstal Windows SDK. Membangun tidak perlu, cukup tambahkan libmem/include
ke direktori include proyek Anda dan tautkan dengan biner yang Anda unduh.
Instal SDK Windows: Windows 7 - Windows 10/11
Instal Python 3 (Centang opsi untuk menambahkan Python ke PATH) (Gunakan Python 3.8.9 untuk Windows 7)
Instal Visual Studio 2022 atau yang lebih baru (dengan dukungan C++ dan CMake) (versi yang lebih lama mungkin berfungsi, tetapi belum diuji). CATATAN: Anda hanya dapat menginstal Visual Studio Build Tools jika Anda tidak menginginkan keseluruhan IDE.
Instal Git Bash
Jalankan Developer Command Prompt
Visual Studio (atau x64 Native Tools Command Prompt for VS 2022
untuk 64 bit) sebagai Administrator
Jalankan perintah berikut untuk menambahkan direktori tujuan libmem ke variabel pengguna %PATH%
Anda ( PERINGATAN - perhatikan batas ukuran %PATH%
Anda!):
setx PATH "%PATH%;%ProgramFiles%libmeminclude;%ProgramFiles%libmemlib"
Lanjutkan membaca di Build and Install
Catatan : Perintah berikut ditujukan untuk distribusi berbasis Debian/Ubuntu. Pastikan untuk menemukan perintah yang sesuai untuk distribusi Linux Anda.
Buka terminal
Instal GCC, G++, Git, CMake, Make, Python 3, dan header Linux:
sudo apt install gcc g++ git cmake make python3 linux-headers
Lanjutkan membaca di Build and Install
Tambahkan titik mount untuk sistem file procfs
di /etc/fstab
Anda dengan menambahkan baris berikut:
proc /proc procfs rw 0 0
Pasang procfs
secara manual. Ini hanya diperlukan jika Anda tidak melakukan boot ulang. Jika Anda reboot, maka akan otomatis dipasang karena baris di /etc/fstab
. Jalankan perintah berikut (sebagai root):
mount -t procfs proc /proc
Instal Git, CMake dan Python3 (dijalankan sebagai root) (clang, clang++ dan make seharusnya sudah diinstal):
pkg install git cmake python3
Lanjutkan membaca di Build and Install
Catatan : Jalankan perintah berikut di Git Bash (Windows) atau terminal (Linux/FreeBSD).
Kloning repositori:
git clone --recursive --depth 1 https://github.com/rdbo/libmem
Hasilkan cache CMake:
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
Kompilasi libmem:
Windows : nmake
Seperti Unix : make -j 4
Instal libmem (jalankan sebagai root atau sebagai Administrator):
Windows : nmake install
Seperti Unix : make install
Setelah menginstal, ikuti bagian Usage
yang sesuai untuk bahasa pemrograman Anda
Tambahkan #include
(C/C++) atau #include
(C++) ke kode sumber Anda. Tautkan perpustakaan libmem yang dihasilkan dengan biner Anda ( liblibmem.so
untuk mirip Unix atau libmem.dll
untuk Windows). Untuk kompiler mirip GCC : tambahkan flag -llibmem
ke kompiler Anda dan kompiler tersebut harus menghubungkannya.
#include /* C/C++ */
#include /* Force C++ */
CATATAN : Anda tidak perlu lagi menginstal libmem untuk digunakan dengan Rust, selama fitur fetch
diaktifkan pada peti libmem (default). Jika Anda menonaktifkan fitur tersebut, fitur tersebut akan mencari libmem di sistem Anda, dan Anda dapat membuat jalur libmem menjadi eksplisit dengan menggunakan lingkungan var LIBMEM_DIR=
.
Tambahkan baris berikut ke Cargo.toml
Anda di bawah [dependencies]
:
libmem = " 5 "
Impor libmem dalam kode sumber Rust Anda:
use libmem :: * ;
CATATAN : Anda tidak lagi harus menginstal libmem untuk digunakan dengan Python. Jika tidak ada instalasi yang ditemukan, paket akan mengambil dan menghubungkan libmem untuk Anda dengan lancar. Anda dapat menggunakan variabel lingkungan LIBDIR=
untuk memberi tahu paket libmem di mana mencari instalasi Anda (jika Anda menginstalnya).
Pastikan Python >= 3.6 aktif
Instal paket libmem
dari PyPi dengan menjalankan perintah berikut:
pip install --upgrade libmem
Atau buat dan instal sendiri dengan menjalankan perintah berikut:
cd libmem-py
python configure.py
python setup.py install
Sekarang untuk mengimpor libmem, lakukan saja hal berikut dalam kode Python Anda:
from libmem import *
Semua:
jendela:
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
Baca file CONTRIBUTING.md
di direktori root repositori ini
Dibuat dengan libmem: