https://discord.com/invite/Qw8jsPD99X
このプロジェクトはGNU AGPLv3.0
に基づいてライセンスされています (それ以降のバージョンはありません)
詳細についてはLICENSE
参照してください
注:サブモジュールと外部依存関係には独自のライセンスがある場合があります。ライセンスも確認してください。
OS | x86 | x64 | アーム | アーアーチ64 |
---|---|---|---|---|
窓 | ✅ | ✅ | ||
Linux | ✅ | ✅ | ||
FreeBSD | ✔️ | ✔️ |
状態 | 説明 |
---|---|
✅ | 100%稼働中 |
✔️ | ほとんど働いています |
未テスト |
さらにもっと!
/* C++20 or higher */
# include < libmem/libmem.hpp >
# include < iostream >
using namespace libmem ;
int main ()
{
Address disas_addr = reinterpret_cast <Address>(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 <libmem/libmem.h>
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 (<YOUR_TARGET_NAME> 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 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
の行により自動的にマウントされます。次のコマンドを (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 <libmem/libmem.h>
(C/C++) または#include <libmem/libmem.hpp>
(C++) をソース コードに追加します。生成された libmem ライブラリをバイナリ (Unix 系の場合はliblibmem.so
、Windows の場合はlibmem.dll
) にリンクします。 GCC のようなコンパイラの場合: フラグ-llibmem
コンパイラに追加すると、コンパイラがリンクされます。
#include <libmem/libmem.h> /* C/C++ */
#include <libmem/libmem.hpp> /* Force C++ */
注: libmem クレート (デフォルト) でfetch
機能が有効になっている限り、Rust で使用するために libmem をインストールする必要はなくなりました。この機能を無効にすると、システム内で libmem が検索され、環境変数LIBMEM_DIR=<path to libmem's directory>
を使用して libmem パスを明示的にすることができます。
Cargo.toml
の[dependencies]
の下に次の行を追加します。
libmem = " 5 "
Rust ソースコードに libmem をインポートします。
use libmem :: * ;
注: Python で使用するために libmem をインストールする必要はなくなりました。インストールが見つからない場合は、パッケージが libmem を取得してシームレスにリンクします。 LIBDIR=<path to libmem's directory>
環境変数を使用して、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 *
全て:
Windows:
Linux/Android:
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 で作成: