Site oficial da Squalr
Junte -se a nós em nosso canal Discord
O Squalr é um software de edição de memória de desempenho que permite que os usuários criem e compartilhem truques em seus jogos de desktop do Windows. Isso inclui digitalização de memória, ponteiros, injeção de montagem x86/x64 e assim por diante.
O Squalr alcança varreduras rápidas através de multi-threading combinadas com instruções SIMD. Veja este artigo: SIMD in .Net. Para aproveitar esses ganhos, sua CPU precisa ter suporte para SSE, AVX ou AVX-512.

Você pode encontrar documentação detalhada no wiki. Existem três maneiras de usar o Squalr:
Abaixo está uma breve documentação sobre as APIs do Nuget Package
Se estiver usando os pacotes Nuget, é importante conectar -se à saída do motor para receber toras de eventos. Estes são inestimáveis para o diagnóstico de problemas.
using Squalr . Engine . Logging ;
.. .
// Receive logs from the engine
Logger . Subscribe ( new EngineLogEvents ( ) ) ;
.. .
class EngineLogEvents : ILoggerObserver
{
public void OnLogEvent ( LogLevel logLevel , string message , string innerMessage )
{
Console . WriteLine ( message ) ;
Console . WriteLine ( innerMessage ) ;
}
} using Squalr . Engine . OS ;
.. .
IEnumerable < Process > processes = Processes . Default . GetProcesses ( ) ;
// Pick a process. For this example, we are just grabbing the first one.
Process process = processes . FirstOrDefault ( ) ;
Processes . Default . OpenedProcess = process ; using Squalr . Engine . Memory ;
.. .
Reader . Default . Read < Int32 > ( address ) ;
Writer . Default . Write < Int32 > ( address ) ;
Allocator . Alloc ( address , 256 ) ;
IEnumerable < NormalizedRegion > regions = Query . GetVirtualPages ( requiredProtection , excludedProtection , allowedTypes , startAddress , endAddress ) ;
IEnumerable < NormalizedModule > modules = Query . GetModules ( ) ;O Squalr pode montar e desmontar as instruções x86/x64, alavancando o NASM.
using Squalr . Engine . Architecture ;
using Squalr . Engine . Architecture . Assemblers ;
.. .
// Perform assembly
AssemblerResult result = Assembler . Default . Assemble ( assembly : "mov eax, 5" , isProcess32Bit : true , baseAddress : 0x10000 ) ;
Console . WriteLine ( BitConverter . ToString ( result . Bytes ) . Replace ( "-" , " " ) ) ;
// Disassemble the result (we will get the same instructions back)
Instruction [ ] instructions = Disassembler . Default . Disassemble ( bytes : result . Bytes , isProcess32Bit : true , baseAddress : 0x10000 ) ;
Console . WriteLine ( instructions [ 0 ] . Mnemonic ) ;O Squalr tem uma API para realizar digitalização de memória de alto desempenho:
using Squalr . Engine . Scanning ;
using Squalr . Engine . Scanning . Scanners ;
using Squalr . Engine . Scanning . Scanners . Constraints ;
using Squalr . Engine . Scanning . Snapshots ;
.. .
DataType dataType = DataType . Int32 ;
// Collect values
TrackableTask < Snapshot > valueCollectorTask = ValueCollector . CollectValues (
SnapshotManager . GetSnapshot ( Snapshot . SnapshotRetrievalMode . FromActiveSnapshotOrPrefilter , dataType ) ) ;
// Perform manual scan on value collection complete
valueCollectorTask . CompletedCallback += ( ( completedValueCollection ) =>
{
Snapshot snapshot = completedValueCollection . Result ;
// Constraints
ScanConstraintCollection scanConstraints = new ScanConstraintCollection ( ) ;
scanConstraints . AddConstraint ( new ScanConstraint ( ScanConstraint . ConstraintType . Equal , 25 ) ) ;
TrackableTask < Snapshot > scanTask = ManualScanner . Scan (
snapshot ,
allScanConstraints ) ;
SnapshotManager . SaveSnapshot ( scanTask . Result ) ;
} ) ;
for ( UInt64 index = 0 ; index < snapshot . ElementCount ; index ++ )
{
SnapshotElementIndexer element = snapshot [ index ] ;
Object currentValue = element . HasCurrentValue ( ) ? element . LoadCurrentValue ( ) : null ;
Object previousValue = element . HasPreviousValue ( ) ? element . LoadPreviousValue ( ) : null ;
} // Example: Tracing write events on a float
BreakpointSize size = Debugger . Default . SizeToBreakpointSize ( sizeof ( float ) ) ;
CancellationTokenSource cancellationTokenSource = Debugger . Default . FindWhatWrites ( 0x10000 , size , this . CodeTraceEvent ) ;
.. .
// When finished, cancel the instruction collection
cancellationTokenSource . cancel ( ) ;
.. .
private void CodeTraceEvent ( CodeTraceInfo codeTraceInfo )
{
Console . WriteLine ( codeTraceInfo . Instruction . Address . ToString ( "X" ) ) ;
Console . WriteLine ( codeTraceInfo . Instruction . Mnemonic ) ;
} | Referência | Descrição |
|---|---|
| Xaml Formatter | Xaml deve ser executado através deste formatador |
| Stylecop | Stylecop para aplicar convenções de código. Observe que nos desviamos de algumas convenções padrão. Usamos o nome completo do tipo para variáveis (ex int32 em vez de int). O raciocínio é que este é um editor de memória, por isso preferimos usar o nome do tipo que é mais explícito para evitar erros de codificação. |
Para compilar o Squalr, você deve precisar apenas do Visual Studio 2017 . Isso deve estar atualizado, atualizamos frequentemente o Squalr para usar a versão mais recente da estrutura .NET. Aqui estão as importantes bibliotecas de terceiros que este projeto usa:
| Biblioteca | Descrição |
|---|---|
| Easyhook | API gerenciada/não gerenciada |
| DISSASM SHOT | Assembler UDIS86 portadas para C# |
| Csscript | C# Biblioteca de script |
| Avalonedit | Biblioteca de edição de código |
| SharpDx | Wrapper DirectX |
| Clrmd | .NET Biblioteca de inspeção de aplicativos |
| Avalondock | Biblioteca de encaixe |
| LiveCharts | Gráficos WPF |
| Biblioteca | Descrição | Propósito |
|---|---|---|
| Asmjit | Assembler x86/x64 | Substitua o FASM, melhore drasticamente os scripts |
| Asmjit | Assembler x86/x64 | Projeto C ++ original. Pode portar/interopitar se a versão acima não funcionar (nem pode funcionar completamente, e algo personalizado pode ser necessário) |
| WpfhexeditorControl | Editor Hex | Editor Hex / Editor de Memória |
| OPENTK | Wrapper OpenGL | Injeção de gráficos |
| SharpDx | Wrapper DirectX | Injeção gráfica (atualmente usando o SharpDX apenas para entrada) |
| SharppCap | Captura de pacotes | Editor de pacotes |
| Packet.net | Captura de pacotes | Editor de pacotes |