https://discord.com/invite/Qw8jsPD99X
Este projeto está licenciado sob GNU AGPLv3.0
(sem versões posteriores)
Leia LICENSE
para mais informações
NOTA: Submódulos e dependências externas podem ter suas próprias licenças! Verifique suas licenças também.
SO | x86 | x64 | BRAÇO | Aarch64 |
---|---|---|---|---|
Windows | ✅ | ✅ | ||
Linux | ✅ | ✅ | ||
FreeBSD | ✔️ | ✔️ |
Status | Descrição |
---|---|
✅ | 100% funcionando |
✔️ | Principalmente trabalhando |
Não testado |
E muito mais!
/* 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 )
A documentação principal do libmem pode ser encontrada em include/libmem.h
. Todas as APIs são documentadas e contêm informações bastante descritivas sobre cada função, seus parâmetros e valor de retorno. Eles estão localizados em comentários próximos, então você poderá vê-los passando o mouse sobre seu editor de texto/IDE.
Da mesma forma, a documentação das ligações está incorporada em seus pacotes, portanto, seu editor de texto/IDE deve ser capaz de acessar a documentação de cada API.
Essas ligações são feitas pela comunidade/terceiros e não são afiliadas ao projeto libmem ou ao seu autor.
Seu código também pode ter licenças próprias, divergindo das da libmem.
Adicione os seguintes comandos ao seu CMakeLists.txt
.
Eles buscarão libmem-config.cmake
na raiz deste repositório, que baixará binários libmem para o seu sistema e incluirá libmem em seu projeto 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)
Use o seguinte para vincular ao libmem (NOTA: pode ser necessário vincular a outras dependências - vá para a seção Dependencies
para obter mais informações):
# Link against libmem
target_link_libraries ( PRIVATE libmem::libmem)
Nota : Se você baixar uma versão binária do libmem nas versões do GitHub, você só precisará instalar o SDK do Windows. A construção não é necessária, basta adicionar libmem/include
aos diretórios de inclusão do seu projeto e vinculá-lo ao binário que você baixou.
Instale o SDK do Windows: Windows 7 - Windows 10/11
Instale o Python 3 (marque a opção de adicionar Python ao PATH) (use Python 3.8.9 para Windows 7)
Instale o Visual Studio 2022 ou mais recente (com suporte a C++ e CMake) (versões mais antigas podem funcionar, mas não foram testadas). NOTA: Você pode instalar apenas as ferramentas de compilação do Visual Studio se não quiser o IDE inteiro.
Instale o Git Bash
Execute um Developer Command Prompt
do Visual Studio (ou x64 Native Tools Command Prompt for VS 2022
para 64 bits) como administrador
Execute o seguinte comando para anexar o diretório de destino da libmem à sua variável de usuário %PATH%
( AVISO - observe o limite de tamanho de %PATH%
!):
setx PATH "%PATH%;%ProgramFiles%libmeminclude;%ProgramFiles%libmemlib"
Continue lendo em Build and Install
Nota : Os comandos a seguir são para distribuições baseadas em Debian/Ubuntu. Certifique-se de encontrar os comandos apropriados para sua distribuição Linux.
Abra um terminal
Instale GCC, G++, Git, CMake, Make, Python 3 e os cabeçalhos do Linux:
sudo apt install gcc g++ git cmake make python3 linux-headers
Continue lendo em Build and Install
Adicione um ponto de montagem para o sistema de arquivos procfs
em seu /etc/fstab
anexando a seguinte linha:
proc /proc procfs rw 0 0
Monte manualmente o procfs
. Isso só será necessário se você não reiniciar. Se você reinicializar, ele será montado automaticamente por causa da linha em /etc/fstab
. Execute o seguinte comando (como root):
mount -t procfs proc /proc
Instale Git, CMake e Python3 (executar como root) (clang, clang++ e make já devem estar instalados):
pkg install git cmake python3
Continue lendo em Build and Install
Nota : Execute os seguintes comandos no Git Bash (Windows) ou em um terminal (Linux/FreeBSD).
Clone o repositório:
git clone --recursive --depth 1 https://github.com/rdbo/libmem
Gere o cache do CMake:
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
Compilar libmem:
Windows : nmake
Tipo Unix : make -j 4
Instale o libmem (execute como root ou como administrador):
Windows : nmake install
Tipo Unix : make install
Após a instalação, siga a seção Usage
adequada para sua linguagem de programação
Adicione #include
(C/C++) ou #include
(C++) ao seu código-fonte. Vincule a biblioteca libmem gerada ao seu binário ( liblibmem.so
para Unix-like ou libmem.dll
para Windows). Para compiladores do tipo GCC : adicione o sinalizador -llibmem
ao seu compilador e ele deverá vinculá-lo.
#include /* C/C++ */
#include /* Force C++ */
NOTA : Você não precisa mais instalar o libmem para usar com Rust, desde que o recurso fetch
esteja habilitado na caixa do libmem (padrão). Se você desabilitar esse recurso, ele procurará por libmem em seu sistema, e você poderá tornar o caminho do libmem explícito usando o ambiente var LIBMEM_DIR=
.
Adicione a seguinte linha ao seu Cargo.toml
em [dependencies]
:
libmem = " 5 "
Importe libmem em seu código-fonte Rust:
use libmem :: * ;
NOTA : Você não precisa mais instalar o libmem para usar com Python. Se nenhuma instalação for encontrada, o pacote irá buscar e vincular o libmem para você perfeitamente. Você pode usar a variável de ambiente LIBDIR=
para informar ao pacote libmem onde procurar sua instalação (se você a instalou).
Certifique-se de ter o Python >= 3.6 ativo
Instale o pacote libmem
do PyPi executando o seguinte comando:
pip install --upgrade libmem
Ou crie e instale você mesmo executando os seguintes comandos:
cd libmem-py
python configure.py
python setup.py install
Agora, para importar o libmem, basta fazer o seguinte no seu código Python:
from libmem import *
Todos:
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
Leia o arquivo CONTRIBUTING.md
no diretório raiz deste repositório
Feito com libmem: