https://discord.com/invite/Qw8jsPD99X
هذا المشروع مرخص بموجب GNU AGPLv3.0
(وليس الإصدارات الأحدث)
اقرأ LICENSE
لمزيد من المعلومات
ملاحظة: قد يكون للوحدات الفرعية والتبعيات الخارجية تراخيص خاصة بها! التحقق من تراخيصهم كذلك.
نظام التشغيل | x86 | x64 | ذراع | آرتش64 |
---|---|---|---|---|
ويندوز | ✅ | ✅ | ||
لينكس | ✅ | ✅ | ||
فري بي إس دي | ✔️ | ✔️ |
حالة | وصف |
---|---|
✅ | تعمل 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
. جميع واجهات برمجة التطبيقات موثقة وتحتوي على معلومات وصفية للغاية حول كل وظيفة ومعلماتها وقيمة الإرجاع. وهي موجودة في التعليقات القريبة، لذا من المفترض أن تكون قادرًا على رؤيتها من خلال تمرير مؤشر الماوس على محرر النصوص/IDE الخاص بك.
وبالمثل، يتم تضمين وثائق الارتباط مع حزمها، لذا يجب أن يكون محرر النصوص/IDE الخاص بك قادرًا على الوصول إلى الوثائق الخاصة بكل واجهة برمجة تطبيقات.
يتم إجراء هذه الارتباطات بواسطة المجتمع/الجهات الخارجية ولا تنتمي إلى مشروع 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
إلى أدلة التضمين الخاصة بمشروعك وربطها بالملف الثنائي الذي قمت بتنزيله.
قم بتثبيت 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 بأكمله.
تثبيت جيت باش
قم بتشغيل Developer Command Prompt
(أو 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 الخاص بك.
افتح المحطة
قم بتثبيت رؤوس GB و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
. قم بتشغيل الأمر التالي (كجذر):
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:
ويندوز : nmake
يشبه يونكس : make -j 4
تثبيت libmem (التشغيل كجذر أو كمسؤول):
ويندوز : nmake install
يشبه يونكس : make install
بعد التثبيت، اتبع قسم Usage
المناسب للغة البرمجة الخاصة بك
أضف #include
(C/C++) أو #include
(C++) إلى كود المصدر الخاص بك. قم بربط مكتبة libmem التي تم إنشاؤها بالملف الثنائي ( liblibmem.so
لنظام Unix أو libmem.dll
لنظام التشغيل Windows). بالنسبة للمترجمين المشابهين لدول مجلس التعاون الخليجي : أضف العلامة -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
في الدليل الجذر لهذا المستودع
مصنوع باستخدام ليبميم: