内存风险检测与辅助加固工具

查看 llm.txt

最后一次编辑于 2026-07-22

JS小游戏内存风险检测与辅助加固工具

《小游戏内存风险检测与辅助加固工具》是一个基于代码静态分析的内存篡改风险识别与辅助加固的工具,帮助开发者更全面地识别风险点,提升加固效率。由开发者指定加解密函数,对风险点的数值做内存隐藏,最终提升内存篡改挂成本。

本工具提供了两项功能:

  • 检测提效:自动发现内存数值篡改风险点,呈现给使用者。
  • 辅助加固:提供web交互,让开发者逐个确认风险点是否加固。

运行环境

chrome 浏览器。

安装流程

请点击下载链接,获得安装包,安装后即可

使用流程

step1. 在浏览器中打开 index.html。

step2. 上传待保护的 js 文件,点击 “一键检测”。如果文件较大,耗时较多,耐心等待。

step3. 工具会对所有内存篡改风险点打上 getProxied 标记(使用 getProxied 包裹起来)。默认会加固这个保护点,如果需要取消这个保护点,那么点击 “取消加固”;否则确认下一个。

step4. 选择左侧,点击自定义加解密函数->启用函数编辑,开发者需实现数据加解密函数,否则代码将抛出异常,无法正常运行。

stpe5. 确认完毕后,点击 “下载参考代码”,若提示【你还未自定义加解密函数,是否确认下载】,则需要检查第四步是否有正确实现数据加解密函数。

加固验证

如果有条件,可以对加固效果做验证。在PC上推荐使用 Cheat Engine 工具。验证方法:

step1: 确认游戏外显数值,如分数、金币等。

step2: 打开Cheat Engine,选择进程,切换到进程显示页面。

step3: 选择进程页面的 WeChatAppEx.exe,可能会有多个,需逐个测试确认选择的游戏进程。

step4: 搜索游戏外显数值的两倍(或原值),未加固的游戏通过多次搜索可以定位到,已加固的则无法搜索到。

注意事项

  • 为简化操作,开发者点击"取消加固"表示放弃某个风险点的加固,不点击表示确认加固。(全部不点击则表示对全部风险点做加固)
  • 为安全考虑,开发者需要自行指定数值加解密函数(encode/decode),注意数值计算溢出与精度问题。
  • 为安全考虑,最终生成代码,推荐使用《游戏深度保护插件》对代码保护,防止攻击者识别加解密函数做对抗。

常见问题排查

生成代码运行异常

若抛出异常:"You must implement this function",则提示开发者需自行实现 encode/decode 函数。

工具异常

以下偶发情况:

  • 检测时间过长:往往是原代码体积较大引起,可以等待1分钟,如果不能解决问题,选择重新启动工具,或者点击咨询小助手。
  • 检测弹窗报错:往往是原代码语法问题,请根据提示信息去修复语法问题。

unity小游戏内存加固工具

《unity小游戏内存加固工具》可以保护unity小游戏的关键数值,防止被外挂修改,提升游戏安全性。加固工具目前已集成至unity小游戏转换工具中,开发者按照文档中的步骤做代码微调,即可实现unity小游戏的内存加固。

接入步骤

按照如下步骤接入使用,接入后务必做好充分测试再上线。

引入命名空间

using WeChatWASM.GameProtect.Monitor;

基础用法

// 存储数据
WXDataPlugin.Instance.Set("coins", 1000);
WXDataPlugin.Instance.Set("playerName", "Player1");
 
// 读取数据
int coins = WXDataPlugin.Instance.Get<int>("coins");
string name = WXDataPlugin.Instance.Get<string>("playerName");

安全读取(推荐)

// 安全读取,避免异常
if (WXDataPlugin.Instance.TryGet<int>("coins", out int coins))
{
    Debug.Log($"金币: {coins}");
}
else
{
    Debug.LogWarning("读取金币失败,可能被篡改");
}

订阅篡改事件

using WeChatWASM.GameProtect.Monitor;
 
private void Start()
{
    // 订阅数据篡改事件
    WXDataPlugin.Instance.DataTampered += OnDataTampered;
}
 
private void OnDataTampered(object sender, WXDataProtectionEventArgs e)
{
    Debug.LogError($"检测到数据篡改!Key: {e.Key}");
    
    // 实现反作弊逻辑
    HandleTampering(e);
}

API 参考

核心方法

方法 描述
Set(string key, object value) 存储数据
Get<T>(string key) 获取指定类型的数据
Get(string key) 获取数据(返回object)
TryGet<T>(string key, out T value) 安全获取数据
HasKey(string key) 检查key是否存在
Remove(string key) 删除指定数据
Clear() 清空所有数据

事件

事件 描述
DataTampered 数据被篡改时触发

事件参数 (WXDataProtectionEventArgs)

属性 类型 描述
Key string 被篡改的数据key
ExpectedValue object 期望的原始值
ActualValue object 实际检测到的值
ValueType Type 数据类型
DetectedTime DateTime 检测到篡改的时间
TamperDescription string 篡改描述信息

最佳实践

数据分类保护

// 重要货币数据
WXDataPlugin.Instance.Set("coins", playerCoins);
WXDataPlugin.Instance.Set("diamonds", playerDiamonds);
 
// 游戏进度数据
WXDataPlugin.Instance.Set("level", playerLevel);
WXDataPlugin.Instance.Set("experience", playerExp);
 
// 配置数据
WXDataPlugin.Instance.Set("settings", gameSettings);

封装常用操作

using WeChatWASM.GameProtect.Monitor;
 
public static class CurrencyManager
{
    public static void AddCoins(int amount)
    {
        int current = WXDataPlugin.Instance.Get<int>("coins");
        WXDataPlugin.Instance.Set("coins", current + amount);
    }
    
    public static bool SpendCoins(int amount)
    {
        int current = WXDataPlugin.Instance.Get<int>("coins");
        if (current >= amount)
        {
            WXDataPlugin.Instance.Set("coins", current - amount);
            return true;
        }
        return false;
    }
}

篡改应对策略

private void HandleDataTampering(WXDataProtectionEventArgs e)
{
    switch (e.Key)
    {
        case "coins":
        case "diamonds":
            // 货币被篡改:重置为0或从服务器同步
            ResetCurrency(e.Key);
            break;
            
        case "level":
            // 等级被篡改:从服务器重新获取
            SyncLevelFromServer();
            break;
            
        default:
            // 记录日志并上报
            LogTamperAttempt(e);
            break;
    }
}