https://discord.com/invite/Qw8jsPD99X
โครงการนี้ได้รับอนุญาตภายใต้ GNU AGPLv3.0
(ไม่มีรุ่นที่ใหม่กว่า)
อ่าน LICENSE
สำหรับข้อมูลเพิ่มเติม
หมายเหตุ: โมดูลย่อยและการพึ่งพาภายนอกอาจมีใบอนุญาตของตัวเอง! ตรวจสอบใบอนุญาตของพวกเขาด้วย
ระบบปฏิบัติการ | x86 | x64 | แขน | อาร์ค64 |
---|---|---|---|---|
หน้าต่าง | ||||
ลินุกซ์ | ||||
ฟรีBSD |
สถานะ | คำอธิบาย |
---|---|
ทำงานได้ 100% | |
ส่วนใหญ่ทำงาน | |
ยังไม่ทดลอง |
และอีกมากมาย!
/* 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 )
เอกสารหลักสำหรับ libmem สามารถพบได้ใน include/libmem.h
API ทั้งหมดได้รับการจัดทำเป็นเอกสารและมีข้อมูลที่อธิบายอย่างมากเกี่ยวกับแต่ละฟังก์ชัน พารามิเตอร์ และค่าที่ส่งคืน สิ่งเหล่านี้อยู่ในความคิดเห็นใกล้เคียง ดังนั้นคุณควรมองเห็นได้โดยการวางเมาส์เหนือโปรแกรมแก้ไขข้อความ/IDE
ในทำนองเดียวกัน เอกสารประกอบการผูกจะฝังอยู่กับแพ็คเกจ ดังนั้นโปรแกรมแก้ไขข้อความ/IDE ของคุณควรสามารถเข้าถึงเอกสารประกอบสำหรับ API แต่ละรายการได้
การเชื่อมโยงเหล่านี้ดำเนินการโดยชุมชน/บุคคลที่สาม และไม่มีส่วนเกี่ยวข้องกับโครงการ libmem หรือผู้เขียน
รหัสของพวกเขาสามารถมีลิขสิทธิ์ของตัวเองได้เช่นกัน โดยแยกจาก libmem
เพิ่มคำสั่งต่อไปนี้ใน CMakeLists.txt
ของคุณ
พวกเขาจะดึงข้อมูล libmem-config.cmake
จากรากของที่เก็บนี้ ซึ่งจะดาวน์โหลดไบนารี libmem สำหรับระบบของคุณและรวม libmem ในโปรเจ็กต์ 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)
ใช้สิ่งต่อไปนี้เพื่อเชื่อมโยงกับ libmem (หมายเหตุ: อาจจำเป็นต้องเชื่อมโยงกับการขึ้นต่อกันอื่น ๆ - ไปที่ส่วน Dependencies
เพื่อดูข้อมูลเพิ่มเติม):
# Link against libmem
target_link_libraries ( PRIVATE libmem::libmem)
หมายเหตุ : หากคุณดาวน์โหลด libmem เวอร์ชันไบนารีในรุ่น GitHub คุณจะต้องติดตั้ง Windows SDK เท่านั้น ไม่จำเป็นต้องสร้าง เพียงเพิ่ม libmem/include
ให้กับไดเร็กทอรี include ของโปรเจ็กต์ของคุณ และเชื่อมโยงกับไบนารี่ที่คุณดาวน์โหลด
ติดตั้ง Windows SDK: Windows 7 - Windows 10/11
ติดตั้ง Python 3 (เลือกตัวเลือกเพื่อเพิ่ม Python ให้กับ PATH) (ใช้ Python 3.8.9 สำหรับ Windows 7)
ติดตั้ง Visual Studio 2022 หรือใหม่กว่า (พร้อมรองรับ C++ และ CMake) (เวอร์ชันเก่าอาจใช้งานได้ แต่ไม่ได้ทดสอบ) หมายเหตุ: คุณสามารถติดตั้งได้เฉพาะเครื่องมือสร้าง Visual Studio หากคุณไม่ต้องการ IDE ทั้งหมด
ติดตั้ง Git ทุบตี
เรียกใช้ Developer Command Prompt
Visual Studio (หรือ x64 Native Tools Command Prompt for VS 2022
สำหรับ 64 บิต) ในฐานะผู้ดูแลระบบ
รันคำสั่งต่อไปนี้เพื่อผนวกไดเร็กทอรีปลายทางของ libmem เข้ากับตัวแปรผู้ใช้ %PATH%
ของคุณ ( คำเตือน - ดูขีดจำกัดขนาด %PATH%
ของคุณ!):
setx PATH "%PATH%;%ProgramFiles%libmeminclude;%ProgramFiles%libmemlib"
อ่านต่อได้ที่ Build and Install
หมายเหตุ : คำสั่งต่อไปนี้ใช้สำหรับการแจกแจงแบบ Debian/Ubuntu ตรวจสอบให้แน่ใจว่าได้ค้นหาคำสั่งที่เหมาะสมสำหรับการแจกจ่าย Linux ของคุณ
เปิดเทอร์มินัล
ติดตั้ง GCC, G++, Git, CMake, Make, Python 3 และส่วนหัวของ Linux:
sudo apt install gcc g++ git cmake make python3 linux-headers
อ่านต่อได้ที่ Build and Install
เพิ่มจุดเมานท์สำหรับระบบไฟล์ procfs
ใน /etc/fstab
ของคุณโดยต่อท้ายบรรทัดต่อไปนี้:
proc /proc procfs rw 0 0
ติดตั้ง procfs
ด้วยตนเอง สิ่งนี้จะจำเป็นเฉพาะในกรณีที่คุณไม่รีบูท หากคุณรีบูต มันจะถูกเมาท์โดยอัตโนมัติเนื่องจากมีบรรทัดที่ /etc/fstab
รันคำสั่งต่อไปนี้ (ในฐานะ root):
mount -t procfs proc /proc
ติดตั้ง Git, CMake และ Python3 (รันในฐานะรูท) (clang, clang++ และ make ควรติดตั้งไว้แล้ว):
pkg install git cmake python3
อ่านต่อได้ที่ Build and Install
หมายเหตุ : รันคำสั่งต่อไปนี้บน Git Bash (Windows) หรือเทอร์มินัล (Linux/FreeBSD)
โคลนที่เก็บ:
git clone --recursive --depth 1 https://github.com/rdbo/libmem
สร้างแคช CMake:
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
คอมไพล์ libmem:
Windows : nmake
คล้าย Unix : make -j 4
ติดตั้ง libmem (รันในฐานะรูทหรือในฐานะผู้ดูแลระบบ):
Windows : nmake install
Unix-like : make install
หลังจากติดตั้งแล้ว ให้ปฏิบัติตามส่วน Usage
ที่เหมาะสมสำหรับภาษาการเขียนโปรแกรมของคุณ
เพิ่ม #include
(C/C++) หรือ #include
(C++) ให้กับซอร์สโค้ดของคุณ เชื่อมโยงไลบรารี libmem ที่สร้างขึ้นกับไบนารีของคุณ ( liblibmem.so
สำหรับ Unix-like หรือ libmem.dll
สำหรับ Windows) สำหรับคอมไพเลอร์ที่คล้ายกับ GCC : เพิ่มแฟล็ก -llibmem
ให้กับคอมไพเลอร์ของคุณและควรเชื่อมโยง
#include /* C/C++ */
#include /* Force C++ */
หมายเหตุ : คุณไม่จำเป็นต้องติดตั้ง libmem เพื่อใช้กับ Rust อีกต่อไป ตราบใดที่คุณสมบัติ fetch
ถูกเปิดใช้งานบนลัง libmem (ค่าเริ่มต้น) หากคุณปิดใช้งานคุณลักษณะนั้น คุณลักษณะนั้นจะค้นหา libmem ในระบบของคุณ และคุณสามารถทำให้เส้นทาง libmem ชัดเจนได้โดยใช้สภาพแวดล้อม var LIBMEM_DIR=
เพิ่มบรรทัดต่อไปนี้ใน Cargo.toml
ของคุณภายใต้ [dependencies]
:
libmem = " 5 "
นำเข้า libmem ในซอร์สโค้ด Rust ของคุณ:
use libmem :: * ;
หมายเหตุ : คุณไม่จำเป็นต้องติดตั้ง libmem เพื่อใช้กับ Python อีกต่อไป หากไม่พบการติดตั้ง แพ็คเกจจะดึงข้อมูลและลิงก์ libmem ให้คุณอย่างราบรื่น คุณสามารถใช้ตัวแปรสภาพแวดล้อม LIBDIR=
เพื่อบอกแพ็คเกจ libmem ว่าจะค้นหาการติดตั้งของคุณได้ที่ไหน (หากคุณติดตั้งไว้)
ตรวจสอบให้แน่ใจว่า Python >= 3.6 ทำงานอยู่
ติดตั้งแพ็คเกจ libmem
จาก PyPi โดยรันคำสั่งต่อไปนี้:
pip install --upgrade libmem
หรือสร้างและติดตั้งด้วยตนเองโดยใช้คำสั่งต่อไปนี้:
cd libmem-py
python configure.py
python setup.py install
ตอนนี้หากต้องการนำเข้า libmem เพียงทำสิ่งต่อไปนี้ในโค้ด Python ของคุณ:
from libmem import *
ทั้งหมด:
หน้าต่าง:
ลินุกซ์/แอนดรอยด์:
บีเอสดี:
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
อ่านไฟล์ CONTRIBUTING.md
ในไดเร็กทอรีรากของที่เก็บนี้
ทำด้วย libmem: