เว็บไซต์ทางการ Squalr
เข้าร่วมกับเราในช่อง Discord ของเรา
Squalr เป็นซอฟต์แวร์แก้ไขหน่วยความจำที่ช่วยให้ผู้ใช้สามารถสร้างและแบ่งปันกลโกงในเกมเดสก์ท็อป Windows ของพวกเขา ซึ่งรวมถึงการสแกนหน่วยความจำพอยน์เตอร์การฉีดแอสเซมบลี x86/x64 และอื่น ๆ
Squalr ประสบความสำเร็จในการสแกนอย่างรวดเร็วผ่านมัลติเธรดรวมกับคำแนะนำ SIMD ดูบทความนี้: SIMD ใน. NET เพื่อใช้ประโยชน์จากผลกำไรเหล่านี้ CPU ของคุณจำเป็นต้องได้รับการสนับสนุนสำหรับ 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 | StyleCop เพื่อบังคับใช้การประชุมรหัส โปรดทราบว่าเราเบี่ยงเบนไปตามอนุสัญญามาตรฐานบางอย่าง เราใช้ชื่อแบบเต็มสำหรับตัวแปร (ex int32 มากกว่า int) เหตุผลคือนี่คือตัวแก้ไขหน่วยความจำดังนั้นเราจึงต้องการใช้ชื่อประเภทที่ชัดเจนที่สุดเพื่อหลีกเลี่ยงการเข้ารหัสข้อผิดพลาด |
ในการรวบรวม Squalr คุณควรต้องใช้ Visual Studio 2017 เท่านั้น สิ่งนี้ควรเป็นข้อมูลล่าสุดเรามักจะอัปเดต Squalr เพื่อใช้. NET Framework เวอร์ชันล่าสุด นี่คือห้องสมุดบุคคลที่สามที่สำคัญที่โครงการนี้ใช้:
| ห้องสมุด | คำอธิบาย |
|---|---|
| Easyhook | การจัดการ API ที่มีการจัดการ/ไม่มีการจัดการ |
| ความคมชัด | UDIS86 Assembler พอร์ตไป C# |
| CSScript | C# สคริปต์ไลบรารี |
| AvalonEdit | ไลบรารีการแก้ไขรหัส |
| คมชัด | directx wrapper |
| clrmd | . NET Application Application Library |
| อวาลอนค์ | ห้องสมุดเชื่อมต่อ |
| LiveCharts | แผนภูมิ WPF |
| ห้องสมุด | คำอธิบาย | วัตถุประสงค์ |
|---|---|---|
| asmjit | แอสเซมเบลอร์ x86/x64 | แทนที่ FASM ปรับปรุงสคริปต์อย่างมาก |
| asmjit | แอสเซมเบลอร์ x86/x64 | โครงการ C ++ ดั้งเดิม อาจพอร์ต/ระหว่างนี้หากเวอร์ชันข้างต้นใช้งานไม่ได้ (อาจใช้งานได้อย่างสมบูรณ์และอาจจำเป็นต้องมีสิ่งที่กำหนดเอง) |
| wpfhexeditorControl | hex editor | hex editor / หน่วยความจำ hex editor |
| opentk | เสื้อคลุม OpenGL | การฉีดกราฟิก |
| คมชัด | directx wrapper | การฉีดกราฟิก (ปัจจุบันใช้ sharpdx สำหรับอินพุต) |
| Sharppcap | การจับแพ็คเก็ต | ตัวแก้ไขแพ็คเก็ต |
| packet.net | การจับแพ็คเก็ต | ตัวแก้ไขแพ็คเก็ต |