https://discord.com/invite/Qw8jsPD99X
该项目已获得GNU AGPLv3.0
许可(无更高版本)
阅读LICENSE
以获取更多信息
注意:子模块和外部依赖项可能有自己的许可证!还要检查他们的许可证。
操作系统 | x86 | x64 | 手臂 | 阿尔克64 |
---|---|---|---|---|
视窗 | ✅ | ✅ | ||
Linux | ✅ | ✅ | ||
自由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)
注意:如果您在 GitHub 版本中下载 libmem 的二进制版本,则只需安装 Windows SDK。构建不是必需的,只需将libmem/include
添加到项目的包含目录中并将其链接到您下载的二进制文件即可。
安装 Windows SDK:Windows 7 - Windows 10/11
安装Python 3(选中将Python添加到PATH的选项)(对于Windows 7使用Python 3.8.9)
安装 Visual Studio 2022 或更高版本(支持 C++ 和 CMake)(旧版本可能有效,但未经测试)。注意:如果您不需要整个 IDE,则可以仅安装 Visual Studio 构建工具。
安装 Git Bash
以管理员身份运行 Visual Studio Developer Command Prompt
(或 64 位x64 Native Tools Command Prompt for VS 2022
)
运行以下命令将 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
通过附加以下行,在/etc/fstab
中添加procfs
文件系统的挂载点:
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 库链接到您的二进制文件(对于类 Unix 系统为liblibmem.so
,对于 Windows 系统为libmem.dll
)。对于类似 GCC 的编译器:将标志-llibmem
添加到您的编译器中,它应该链接它。
#include /* C/C++ */
#include /* Force C++ */
注意:只要在 libmem 箱上启用了fetch
功能(默认),您就不再需要安装 libmem 来与 Rust 一起使用。如果禁用该功能,它将在系统中查找 libmem,并且您可以使用环境变量LIBMEM_DIR=
显式显示 libmem 路径。
将以下行添加到Cargo.toml
的[dependencies]
下:
libmem = " 5 "
在 Rust 源代码中导入 libmem:
use libmem :: * ;
注意:您不再需要安装 libmem 即可与 Python 一起使用。如果未找到安装,该软件包将为您无缝获取并链接 libmem。您可以使用LIBDIR=
环境变量来告诉 libmem 包在哪里查找您的安装(如果您安装了它)。
确保 Python >= 3.6 处于活动状态
通过运行以下命令从 PyPi 安装libmem
包:
pip install --upgrade libmem
或者通过运行以下命令自行构建并安装它:
cd libmem-py
python configure.py
python setup.py install
现在要导入 libmem,只需在 Python 代码中执行以下操作:
from libmem import *
全部:
视窗:
Linux/安卓:
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
读取此存储库根目录中的文件CONTRIBUTING.md
用 libmem 制作: