freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Squalr:用C#编写的游戏黑客工具
2021-07-14 23:51:27

关于Squalr

Squalr是一款功能强大的高性能内存编辑工具,同时它也是一款采用C#编写的游戏黑客工具。它允许用户在windows桌面游戏中创建和分享作弊方案,其中的功能包括内存扫描、指针、x86/x64程序集注入等等。

Squalr通过多线程结合SIMD指令的方式实现快速扫描。为了利用这些优势,您的CPU需要支持SSE、AVX或AVX-512。

我们有以下三种方式来使用SqualrL:

前端GUI

脚本API

后端NuGet包

接下来,我们将详细介绍NuGet包提供的API接口。

NuGet包提供的API接口

接收引擎输出

如果使用的是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);

}

推荐使用的Visual Studio扩展

1、XAML Formatter:XAML需要通过这个格式工具运行;

2、StyleCop:StyleCop负责执行代码风格约定,以避免编码错误的情况出现;

代码构建

如需编译Squalr源码,我们首先需要安装好Visual Studio 2017,我们会持续更新Squalr并使用最新版本的.NET框架,下面给出的是本项目所使用的第三方代码库:

代码库

介绍

EasyHook

管理API钩子

SharpDisasm

Udis86转换为C#

CsScript

C#脚本库

AvalonEdit

代码编辑库

SharpDX

DirectX封装器

CLRMD

.NET应用程序审查库

AvalonDock

Dock库

LiveCharts

WPF图标库

工具运行截图

项目地址

Squalr:GitHub传送门

参考资料

https://www.squalr.com/

https://squalr.github.io/SqualrDocs/

# Squalr # 汇编反汇编
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录