https://discord.com/invite/Qw8jsPD99X
이 프로젝트는 GNU AGPLv3.0
(최신 버전 없음)에 따라 라이센스가 부여되었습니다.
자세한 내용은 LICENSE
읽어보세요.
참고: 하위 모듈과 외부 종속성은 자체 라이센스를 가질 수 있습니다! 라이센스도 확인하십시오.
운영체제 | x86 | x64 | 팔 | 아크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 바이너리를 다운로드하고 CMake 프로젝트에 libmem을 포함합니다.
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 설치(PATH에 Python을 추가하는 옵션 확인)(Windows 7의 경우 Python 3.8.9 사용)
Visual Studio 2022 이상(C++ 지원 및 CMake 포함)을 설치합니다(이전 버전은 작동할 수 있지만 테스트되지 않았습니다). 참고: 전체 IDE를 원하지 않는 경우 Visual Studio Build Tools만 설치할 수 있습니다.
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
라인 때문에 자동으로 마운트됩니다. 다음 명령을 실행합니다(루트로):
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 라이브러리를 바이너리(Unix 계열의 경우 liblibmem.so
또는 Windows의 경우 libmem.dll
)에 연결합니다. GCC와 유사한 컴파일러의 경우 : -llibmem
플래그를 컴파일러에 추가하면 링크되어야 합니다.
#include /* C/C++ */
#include /* Force C++ */
참고 : libmem 크레이트(기본값)에서 fetch
기능이 활성화되어 있는 한, Rust와 함께 사용하기 위해 더 이상 libmem을 설치할 필요가 없습니다. 해당 기능을 비활성화하면 시스템에서 libmem을 찾고 var LIBMEM_DIR=
환경을 사용하여 libmem 경로를 명시적으로 만들 수 있습니다.
[dependencies]
아래 Cargo.toml
에 다음 줄을 추가합니다.
libmem = " 5 "
Rust 소스 코드에서 libmem을 가져옵니다.
use libmem :: * ;
참고 : 더 이상 Python과 함께 사용하기 위해 libmem을 설치할 필요가 없습니다. 설치가 발견되지 않으면 패키지가 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 *
모두:
윈도우:
리눅스/안드로이드:
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으로 제작: