[HERRAMIENTA] Squalr Editor de Memoria

  • Hola Invitado ¿Quieres conversar con todos los usuarios de GamerzHacking?, No esperes mas y entra al canal de Discord dando clic AQUI
  • Hola Invitado ¿Tienes una Web y quieres ser partner de GamerzHacking?, No esperes mas y entra al siguiente enlace AQUI
  • Hola Invitado ¿Quieres formar parte del Staff de GamerzHacking?, No esperes mas y entra al siguiente enlace AQUI
  • Hola Invitado ¿Eres programador y quieres pertenercer GamerzHacking?, No esperes mas y entra a postular aqui AQUI
1 dAmerica/Bogota Noviembre dAmerica/Bogota 2015
1.063
175
63
27
Lima
gamerzhacking.com
Featured Thread #1

Sitio web oficial de Squalr

Únase a nosotros en nuestro canal de discordia

Squalr es un software de edición de memoria que permite a los usuarios crear y compartir trucos en sus juegos de escritorio de Windows. Esto incluye escaneo de memoria, punteros, inyección de ensamblaje x86 / x64, etc.

¿Cómo logra Squalr realizar exploraciones de memoria rápidas en .NET? Multi-threading combinado con paralelismo de un solo núcleo a través de instrucciones SIMD. Ver este artículo: SIMD en .NET . Para aprovechar estas ventajas, su CPU necesita tener soporte para SSE, AVX o AVX-512.

Documentación

Puedes encontrar documentación detallada en la wiki . Hay tres formas de usar Squalr:
  • Interfaz de usuario frontal
  • API de scripting
  • Back-end de los paquetes NuGet
A continuación hay una breve documentación sobre las API de paquetes de NuGet

Receiving Engine Output:

Si utiliza los paquetes de NuGet, es importante conectarlos a la salida del motor para recibir registros de eventos. Estos son invaluables para el diagnóstico de problemas.

C#:
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);
    }
}
Attaching The Engine

C#:
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;
Manipulating Memory:

C#:
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();
Assembling/Disassembling:

Squalr puede ensamblar y desensamblar instrucciones x86 / x64, aprovechando NASM.

C#:
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);
Scanning:

Squalr tiene una API para realizar escaneo de memoria de alto rendimiento:

C#:
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;
}
Debugging:

Código:
// 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);
}
Saludos.
 
Me gusta: zDey