https://discord.com/invite/Qw8jsPD99X
Этот проект распространяется под лицензией GNU AGPLv3.0
(без более поздних версий).
Прочтите LICENSE
для получения дополнительной информации.
ПРИМЕЧАНИЕ. Подмодули и внешние зависимости могут иметь собственные лицензии! Проверьте также их лицензии.
ОС | х86 | х64 | РУКА | Аарх64 |
---|---|---|---|---|
Окна | ✅ | ✅ | ||
Линукс | ✅ | ✅ | ||
FreeBSD | ✔️ | ✔️ |
Статус | Описание |
---|---|
✅ | 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.
Установите Git Bash
Запустите 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 (запускайте от имени пользователя root) (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 (запускайте от имени пользователя root или администратора):
Windows : nmake install
Unix-подобный : make install
После установки следуйте разделу Usage
соответствующему вашему языку программирования.
Добавьте #include
(C/C++) или #include
(C++) в исходный код. Свяжите сгенерированную библиотеку libmem с вашим двоичным файлом ( liblibmem.so
для Unix-подобных или libmem.dll
для Windows). Для GCC-подобных компиляторов : добавьте флаг -llibmem
в ваш компилятор, и он должен связать его.
#include /* C/C++ */
#include /* Force C++ */
ПРИМЕЧАНИЕ . Вам больше не нужно устанавливать libmem для использования с Rust, если в крейте libmem включена функция fetch
(по умолчанию). Если вы отключите эту функцию, она будет искать libmem в вашей системе, и вы можете явно указать путь к libmem, используя среду var 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: