R3nzSkin反检测技术全解析LOL换肤器如何用线程隐藏与XOR加密对抗反作弊【免费下载链接】R3nzSkin-For-China-ServerSkin changer for League of Legends (LOL)项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-ServerR3nzSkin 是一款专为英雄联盟国服打造的内置换肤器LOL Skin Changer可以让你在游戏内随时给自己的英雄、队友、敌人、眼位、防御塔甚至小兵野怪更换皮肤。由于国际服启用了 Vanguard 反作弊该项目只支持国服。作为一款运行在游戏进程内部的工具它必须面对反作弊系统的扫描——本文将带你用大白话拆解它的两大招牌反检测技术线程隐藏与XOR加密看看这个换肤器是如何隐身的 一、先搞清楚为什么换肤器需要反检测R3nzSkin 的原理是把一个 DLL 注入到《英雄联盟》游戏进程中通过VMT Hook虚函数表挂钩接管游戏渲染相关函数从而修改角色的模型与皮肤。但一旦有第三方 DLL 驻留在游戏进程里就可能被反作弊系统通过以下手段发现检测手段目标线程枚举找出 DLL 注入后产生的新线程内存扫描查找特征字符串如进程名、模块名导入表扫描检查 DLL 引用了哪些可疑 API数据比对校验游戏内存中皮肤 ID 等数值是否合法R3nzSkin 正是针对这四类检测逐一设计了隐蔽手段。下面逐个拆解。二、线程隐藏让注入线程查无此人DLL 被注入游戏后必须启动一个工作线程来执行挂钩、内存搜索等核心逻辑。而新线程恰恰是反作弊最容易发现的特征之一——只要遍历进程线程列表多出来的线程就暴露了。R3nzSkin 的解法在 R3nzSkin/R3nzSkin.cpp 的HideThread函数中它调用 Windows 系统调用NtSetInformationThread传入信息类别0x11ThreadHideFromDebugger。这个参数的本意是让调试器看不到该线程但副作用是线程枚举接口如 CreateToolhelp32Snapshot将直接看不到这条线程。关键细节藏在 R3nzSkin/R3nzSkin.cpp 的启动流程里DLL 加载时DllMain先用DllMain自身的句柄尝试隐藏再通过_beginthreadex创建主工作线程DllAttach工作线程启动后的第一件事就是调用HideThread(GetCurrentThread())把自己藏起来隐藏成功后日志会打印Thread Hidden!。这意味着后续所有的内存搜索、挂钩安装、ImGui 菜单逻辑都在一条对线程枚举不可见的线程上运行。配合 R3nzSkin/Hooks.cpp 中的 VMT 挂钩即使别人扫到被修改的虚函数表也找不到背后活动的线程线索。三、XOR加密皮肤数据也面目全非换肤器最核心的动作是往游戏内存里写入新的皮肤 IDSkinId。如果这个数值以明文形式躺在内存中任何基于数值范围的校验都可能把它抓出来。R3nzSkin 在 R3nzSkin/encryption.hpp 实现了一个精巧的xor_valueT模板思路是内存中永远只存密文用的时候才解密。 密钥从哪来——CPU 时间戳看 R3nzSkin/encryption.hpp 的encrypt函数首次加密时它调用__rdtsc()读取CPU 时间戳计数器作为密钥素材。这个值每时每刻都在变化天然随机且每次运行都不同——反作弊无法预置一份固定密文特征库去比对不依赖内存中的静态密钥——没有可扫描的密钥常量。 四格轮换表xor_value内部维护了一个4 格的轮换表values_table每次encrypt都会把新密文写入下一个格子并轮转索引。这样同一块内存地址上的密文会不断自我更新静态快照式的扫描很难抓到稳定特征。 换肤时如何使用实际调用点在 R3nzSkin/SDK/AIBaseCommon.cpp 的change_skin方法将目标对象内存中SkinId偏移处的位置当作密文容器写入encrypt(skin)的加密结果真正读取该皮肤 ID 的挂钩代码再通过decrypt()还原出真实数值。配合 R3nzSkin/offsets.hpp 中定义的各种偏移量这套机制保证了皮肤数据在内存里是加密的、密钥是动态的、密文是轮换的——三重隐蔽。四、字符串加密关键常量全部打码除了数值字符串是另一类高价值特征进程名LeagueClient.exe、模块名R3nzSkin.dll、API 函数名等一旦在内存或文件中明文出现就会被字符串扫描命中。R3nzSkin 的注入器 R3nzSkin_Injector/Injector.cpp 几乎在所有敏感字符串上都使用了_XorStr/_XorStrW宏例如进程快照中查找游戏进程、判断 DLL 是否已注入、弹出错误提示等场景。这套宏背后是 R3nzSkin_Injector/xorstr.hpp 的编译期 XOR 加密字符串字符串在编译期就被 XOR 打码二进制文件里不存在明文每次取值时才在栈上解密用完即弃源码里看到的League of Legends.exe只是加密前的原料编译产物中找不到。连自动更新逻辑里的 API 地址、正则表达式、User-Agent头见 R3nzSkin_Injector/Injector.cpp都全部用_XorStr包裹做到通篇无明文。五、懒加载 API导入表里一个函数都没有传统 DLL 在导入表Import Table中列出所有依赖的 API反作弊常通过导入表特征识别外挂。而 R3nzSkin_Injector/lazy_importer.hpp 让注入器实现了Lazy Import懒加载导入二进制文件中完全不引用目标 API导入表干净调用LI_FN(CreateToolhelp32Snapshot)这样的宏时才在运行时现场解析 PE 头从目标模块里定位函数地址参考 R3nzSkin_Injector/Injector.cpp 中的进程查找实现。效果是扫描器检查这个注入器依赖了哪些函数时得到的答案是几乎什么都没依赖大大降低了特征匹配概率。六、注入器层面的小心机除上述三大件注入器 R3nzSkin_Injector/Injector.cpp 的inject函数还有不少防御性细节时间差延迟比较当前系统时间与游戏进程创建时间若进程刚启动不足约 10 秒就等待补齐差值避免在游戏初始化敏感期注入引发崩溃标准注入流程VirtualAllocEx写入 DLL 路径 →NtCreateThreadEx以LoadLibraryW为入口创建远程线程 → 等待加载完成 → 释放内存全程句柄及时关闭防误判的循环写法R3nzSkin_Injector/Injector.cpp 的监控主循环里有一段注释——杀毒软件不喜欢死循环给它一个看似可突破的退出点通过 0xff的伪判断打破静态分析对无限循环的标记自动更新带地区白名单中文地区与巴西直接跳过在线更新减少网络行为特征R3nzSkin_Injector/Injector.cpp。七、动态特征码游戏一更新定位就重找反检测的最后一环是定位准确性。R3nzSkin 不依赖写死的内存地址而是通过 R3nzSkin/memory.cpp 中的特征码扫描Signature Scanning用形如E8 ? ? ? ? 84 C0 ...的字节模式?为通配在游戏模块里搜索目标函数搜到后写入 R3nzSkin/offsets.hpp 定义的偏移表offsets::global::GameClient等DLL 主循环会每秒重试直到找到GameClient日志提示All offsets found!。好处是游戏客户端版本更新后只要特征码仍在换肤器依然能自动重新定位无需人工改地址。八、如何获取与构建源码想亲手编译看看需要Visual Studio 2019/2022构建配置选择x64即可获取源码git clone --recursive https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server打开解决方案 R3nzSkin.sln编译出R3nzSkin.dll注入体与R3nzSkin_Injector.exe注入器进入游戏后运行注入器按Insert键呼出 ImGui 换肤菜单见 README.md 的 Usage 章节若 CPU 支持 AVX/AVX2可在项目设置中启用以换取更好性能。⚠️ 温馨提示本项目为开源学习项目请勿在竞技排位中使用任何修改游戏客户端的工具遵守游戏规则健康游戏。总结一张表看懂 R3nzSkin 反检测矩阵反检测技术实现位置对抗的检测手段线程隐藏ThreadHideFromDebuggerR3nzSkin/R3nzSkin.cpp线程枚举运行时 XOR 数值加密RDTSC 密钥R3nzSkin/encryption.hpp内存数值扫描编译期 XOR 字符串加密R3nzSkin_Injector/xorstr.hpp字符串/明文特征扫描懒加载 API 导入R3nzSkin_Injector/lazy_importer.hpp导入表扫描动态特征码定位R3nzSkin/memory.cpp版本更新失效 / 地址比对注入时机控制R3nzSkin_Injector/Injector.cpp初始化期行为监控R3nzSkin 展示了小工具大心思没有一味堆砌复杂算法而是把线程隐藏、XOR 动态加密、字符串打码、懒加载这些经典技术组合得恰到好处——这正是它能在国服稳定存活的技术密码。如果你对游戏内存操作感兴趣这个项目是绝佳的 C 学习样本 【免费下载链接】R3nzSkin-For-China-ServerSkin changer for League of Legends (LOL)项目地址: https://gitcode.com/gh_mirrors/r3/R3nzSkin-For-China-Server创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Atlas 300V 24G部署YOLO全攻略:推理卡实操与调优 兄弟们,最近在搞一个工业质检的项目,需要在边缘侧实时跑目标检测,手里正好拿到一张 Atlas 300V 24G 加速卡。网上一搜,发现不少人在问“这卡到底能不能部署 YOLO”“和 GPU 比有什么区别”,我索性把这几周的踩坑和调优… · 2026/9/25 11:52:54
数据中心柴发系统断路器选型与保护整定实战指南 数据中心柴发系统配断路器,看着像是个“选型填空”,实际比想象中麻烦得多。市电侧故障有大电网撑着,短路电流波形又硬又持久;柴发侧靠的是一台或几台旋转电机,短路电流上来快、掉得也快,励磁系统、负载冲击… · 2026/9/25 11:52:54
Atlas 300V 24G部署YOLO实战:从模型转换到推理优化全解析 最近后台好几个朋友都在问同一个问题:atlas 部署 YOLO 到底靠不靠谱?还有人直接发来一个链接问“atlas 300v 24g 是运算加速卡吗”,说在网上看了一圈,有的说是推理卡,有的说是加速模块,越看越糊涂。我自己手… · 2026/9/25 12:29:52
从零构建医学AI Agent核心工具链:知识检索、联网搜索到智能路由的TaoToken配置实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 12:29:51
Atlas 300V 24G推理加速卡部署YOLO:从环境配置到模型转换全流程解析 1. 一句话先搞清楚:Atlas 300V 24G到底是什么卡1.1 它确实是“运算加速卡”,但请把重点放在“推理”两个字上最近后台经常有人问同一个问题:“atlas 300v 24g 是运算加速卡吗?”,紧接着下一句往往是“那我能拿它跑YOLO… · 2026/9/25 12:29:45
Source Insight 插件使用:用 TaoToken 统一 Key 打通 AI 辅助代码阅读配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 12:29:45
创维E900V22D刷机全攻略:S905L3SB芯片兼容性解析与救砖实战 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:31
MQTT协议原理与Broker服务器搭建实战:从Mosquitto到EMQX /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/25 1:00:37