موقع Squalr الرسمي
انضم إلينا على قناة Discord
Squalr هو برنامج تحرير الذاكرة يتيح للمستخدمين إنشاء ومشاركة الغش في ألعاب سطح المكتب Windows. ويشمل ذلك مسح الذاكرة ، مؤشرات ، حقن التجميع x86/x64 ، وهلم جرا.
يحقق Squalr فحوصات سريعة من خلال متعدد الخيوط مع تعليمات SIMD. انظر هذا المقال: SIMD في .NET. للاستفادة من هذه المكاسب ، تحتاج وحدة المعالجة المركزية الخاصة بك إلى دعم SSE أو AVX أو AVX-512.

يمكنك العثور على وثائق مفصلة على الويكي. هناك ثلاث طرق لاستخدام Squalr:
فيما يلي بعض الوثائق الموجزة على واجهات برمجة واجهات برمجة تطبيقات Nuget
إذا كنت تستخدم حزم 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 واجهة برمجة تطبيقات لإجراء مسح ذاكرة عالية الأداء:
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 | Stylecop لفرض اتفاقيات الكود. لاحظ أننا ننحرف عن بعض الاتفاقيات القياسية. نستخدم اسم النوع الكامل للمتغيرات (ex int32 بدلاً من int). المنطق هو أن هذا محرر ذاكرة ، لذلك نفضل استخدام اسم النوع الأكثر وضوحًا لتجنب أخطاء الترميز. |
من أجل تجميع Squalr ، يجب أن تحتاج فقط إلى Visual Studio 2017 . يجب أن يكون هذا محدثًا ، في كثير من الأحيان نقوم بتحديث Squalr لاستخدام أحدث إصدار من إطار .NET. فيما يلي مكتبات الطرف الثالث المهمة التي يستخدمها هذا المشروع:
| مكتبة | وصف |
|---|---|
| easyhook | أدار/غير المدير API التثبيط |
| Sharpdisasm | تم نقل UDIS86 Assembler إلى C# |
| CSScript | C# مكتبة البرمجة النصية |
| Avalonedit | مكتبة تحرير التعليمات البرمجية |
| Sharpdx | غلاف directx |
| CLRMD | .NET مكتبة تفتيش التطبيق |
| أفالوندوك | مكتبة الإرساء |
| Livecharts | مخططات WPF |
| مكتبة | وصف | غاية |
|---|---|---|
| asmjit | X86/X64 Assembler | استبدل Fasm ، وتحسين البرمجة النصية بشكل كبير |
| asmjit | X86/X64 Assembler | مشروع C ++ الأصلي. قد يكون المنفذ/interop هذا إذا لم ينجح الإصدار أعلاه (لا يجوز أن يعمل بشكل كامل ، وقد تكون هناك حاجة إلى شيء مخصص) |
| WPFHexEditorControl | محرر عرافة | محرر سداسي عشري / محرر سداسي عشري |
| Opentk | غلاف OpenGL | حقن الرسومات |
| Sharpdx | غلاف directx | حقن الرسومات (يستخدم حاليًا SharpDX فقط للإدخال) |
| SharppCap | التقاط الحزمة | محرر الحزمة |
| Packet.net | التقاط الحزمة | محرر الحزمة |