Squalr Официальный сайт
Присоединяйтесь к нам на нашем канале Discord
Squalr - это программное обеспечение для редактирования памяти, которое позволяет пользователям создавать и обмениваться читами в своих настольных играх Windows. Это включает в себя сканирование памяти, указатели, инъекцию сборки x86/x64 и так далее.
Squalr достигает быстрого сканирования с помощью многопоточного в сочетании с инструкциями SIMD. Смотрите эту статью: SIMD в .NET. Чтобы воспользоваться этими выгодами, ваш процессор должен иметь поддержку SSE, AVX или AVX-512.

Вы можете найти подробную документацию на вики. Есть три способа использовать Squalr:
Ниже приведена некоторая краткая документация по API пакета Nuget Package
При использовании пакетов Nuget важно зацепить выход двигателя, чтобы получить журналы событий. Они неоценимы для диагностики проблем.
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 ( ) ;Squalr может собирать и разобрать инструкции x86/x64, используя 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 ) ;Squalr имеет API для выполнения высокопроизводительного сканирования памяти:
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 ) ;
} | Ссылка | Описание |
|---|---|
| XAML FORMATTER | XAML следует пройти через этот формат |
| Стилекоп | StyleCop для обеспечения соблюдения кодовых конвенций. Обратите внимание, что мы отклоняемся от некоторых стандартных конвенций. Мы используем полное имя типа для переменных (ex int32, а не Int). Причина заключается в том, что это редактор памяти, поэтому мы предпочитаем использовать имя типа, которое наиболее ясно, чтобы избежать ошибок кодирования. |
Чтобы скомпилировать Squalr, вам нужно только Visual Studio 2017 . Это должно быть в курсе, мы часто обновляем Squalr, чтобы использовать последнюю версию .NET Framework. Вот важные сторонние библиотеки, которые использует этот проект:
| Библиотека | Описание |
|---|---|
| EasyHook | Управляемый/неуправляемый API -подсуд |
| Sharpdisasm | UDIS86 Ассемблер перенесен в C# |
| Csscript | C# Библиотека сценариев |
| Авалонедит | Библиотека редактирования кода |
| Sharpdx | DirectX Wrapper |
| Clrmd | Библиотека проверки приложений .NET |
| Авалонд | Библиотека стыковки |
| LiveCharts | WPF -диаграммы |
| Библиотека | Описание | Цель |
|---|---|---|
| Asmjit | x86/x64 ассемблер | Заменить FASM, резко улучшить сценарии |
| Asmjit | x86/x64 ассемблер | Оригинальный проект C ++. Может порт/взаимосвязь это, если вышеуказанная версия не работает (ни один из них не может полностью работать, и может потребоваться что -то пользовательское). |
| WpfHexeditorControl | Гекс редактор | Редактор HEX / Редактор Hex Memory Hex |
| Opentk | Opengl Wrapper | Графическая инъекция |
| Sharpdx | DirectX Wrapper | Внедрение графики (в настоящее время используется Sharpdx только для ввода) |
| Sharppcap | Захват пакета | Редактор пакетов |
| Packet.net | Захват пакета | Редактор пакетов |