r3nzskin吧 关注:11,532贴子:29,664

r3nzskin还能用,靠Ai救活了

只看楼主收藏回复

r3菜单不知道为啥 截图显示不了


IP属地:湖南1楼2026-09-05 14:46回复
    基于 hydy100/R3nzSkin 代码更新
    看看 ai如何 总结的
    总览:一句话与全景图
    一句话:把一段代码送进游戏进程,让它在游戏内存里找到"每个角色的模型数据栈",用游戏自己的函数把栈里的皮肤数据替换掉,再用游戏自己的渲染把新模型画出来——全程只改客户端本地的"显示状态",服务器一无所知。


    IP属地:湖南2楼2026-09-05 14:51
    收起回复
      2026-10-19 03:06:37
      广告
      不感兴趣
      开通SVIP免广告
      ┌─ 阶段一:进入 ─────────────────────────────┐
      │ dump_loader → SetWindowsHookEx → Stage1 → xibacao │
      └──────────────┬───────────────────────────┘
      ▼
      ┌─ 阶段二:定位 ─────────────────────────────┐
      │ 特征码扫描 → 15 个锚点(全局变量/函数/偏移) │
      └──────────────┬───────────────────────────┘
      ▼
      ┌─ 阶段三:建库 ─────────────────────────────┐
      │ ChampionManager + translateString → 皮肤数据库│
      └──────────────┬───────────────────────────┘
      ▼
      ┌─ 阶段四:钩子 ─────────────────────────────┐
      │ DXGI Present(画菜单)+ WndProc(收输入) │
      └──────────────┬───────────────────────────┘
      ▼
      ┌─ 阶段五:换肤(核心)────────────────────────┐
      │ 改 SkinId(解密/再加密)→ 改 base_skin → │
      │ 调游戏自己的 Update 重建模型 │
      └───────────────────────────────────────────┘


      IP属地:湖南3楼2026-09-05 14:51
      回复
        一、阶段一:进入游戏(注入)
        工具本体是一个 DLL(xibacao.dll),必须先进入游戏进程才能读写内存。
        采用SetWindowsHookEx消息钩子注入:对游戏的全部 ~190 个线程一次性安装WH_GETMESSAGE钩子,游戏线程处理消息时,Windows 系统自动把 DLL 映射进 游戏进程——不创建远程线程,一切走系统正常加载路径。
        DLL 加载后DllMain起一个工作线程,先用NtSetInformationThread把线程 从调试器可见性里隐藏,然后进入阶段二。
        实测认知(2026-08/09):手工映射、PEB 摘链等"隐身注入"会触发 ACE 当场 终止;走系统加载器的正常映射反而安全——代价是加载事件对内核可见。


        IP属地:湖南4楼2026-09-05 14:52
        回复
          二、阶段二:定位(特征码解析)
          刚进入时工具是"睁眼瞎"——不知道任何东西在哪。Memory::Search分两步:
          Search(true):只找GameClient全局指针,然后每秒轮询,直到GameClient→game_state == Running(对局真正开始)。这是启动时机的同步点;Search(false):一次性解析全部 15 个锚点——玩家指针、英雄/小兵/ 防御塔三个对象管理器、英雄数据库、窗口句柄、CharacterDataStack::Push / Update函数、translateString、渲染材质注册表与交换链等。
          每条特征码的解析方式由其类型决定:
          | 特征码形态 | 含义 | 解析 |
          | --- | --- | --- |
          | E8 rel32(call) | 调用目标的指令 | 地址 + 偏移 + 5 |
          | 48 8B 05 rel32(RIP 相对) | 引用全局变量 | 地址 + 偏移 + 7 |
          | 其他(序言/写指令) | 函数本身 | 直接取匹配地址 |
          | 通配符字段(read=true) | 内嵌的字段偏移值 | 读通配符处字节 |
          解析完成后,Memory::update把全部内容装进cheatManager.memory—— 工具从此"看见"了游戏的关键结构。
          失效与维护:每个大版本重新编译,代码布局微移会使部分指纹失效 (16.16 时 translateString 的调用点模式失效、Update 出现重复匹配)。 特征码是每次版本更新唯一需要维护的东西(硬编码偏移如Team=0x239非常稳定)。维护流程见PatternDumper/TODO.md的标准作业流程。


          IP属地:湖南5楼2026-09-05 14:53
          回复
            三、阶段三:构建皮肤数据库
            菜单里的皮肤列表来自SkinDatabase::load():
            遍历游戏自己的ChampionManager->champions(游戏官方英雄列表, 含每个英雄的skins数组与skin_id);构造本地化键名game_character_skin_displayname_Ahri_12,调用游戏的translateString让游戏自己翻译——国服客户端里皮肤名自动就是中文;翻译结果与键名相同 = 皮肤不存在,跳过;重名 = Chroma,追加 "Chroma N";硬编码补充数据查不到的特殊形态:拉克丝 9 种元素形态(LuxFire等)、 娑娜 DJ 2/3(SonaDJGenre02/03)、守卫皮肤枚举;存入champions_skins[英雄哈希] = {模型名, 显示名, skin_id}。
            设计要点:皮肤列表不依赖任何外部数据文件,直接复用游戏数据 + 游戏翻译函数——版本更新时自动跟随游戏,永不过期。


            IP属地:湖南6楼2026-09-05 14:54
            回复
              四、阶段四:钩子(让工具"可见可操作")
              | 钩子 | 方式 | 作用 |
              | --- | --- | --- |
              | DXGI Present | 修改交换链虚表(vmt_smart_hook) | 每帧渲染后先执行工具代码 → ImGui 菜单画在游戏画面上 |
              | DXGI ResizeBuffers | 同上 | 窗口尺寸变化时重建渲染目标 |
              | WndProc | SetWindowLongPtr 替换 | 捕获鼠标键盘 → ImGui 交互 + 菜单键(Insert)+ 快捷换肤键 |
              初始化时加载字体合并字形:tahoma(基础)+ malgun(韩文)+ msyh(中文GetGlyphRangesChineseFull)——菜单显示中文的原因。
              注意:所有钩子都不落在游戏代码段(.text)上——不内联补丁,游戏的 完整性校验看到的是原样代码。


              IP属地:湖南7楼2026-09-05 14:55
              回复
                五、阶段五:换肤核心(最精妙的部分)
                5.1 游戏的模型系统
                每个角色对象(英雄/小兵/防御塔)内部有一个角色数据栈:
                cppclass CharacterDataStack { std::vector<CharacterStackData> stack; // 变形/特殊状态压栈 CharacterStackData base_skin; // 当前基础外观};class CharacterStackData { AString model; // 模型名(如 "Ahri", 特殊形态 "LuxFire") std::int32_t skin; // 皮肤 ID std::int8_t gear; // 形态索引(部分英雄)};
                游戏引擎从这个栈重建角色的视觉模型。这就是杠杆点:改栈里数据 → 调游戏的 Update → 游戏自己加载并渲染新模型。工具不伪造任何模型, 只是"改需求单,让游戏自己换货"。
                5.2 换肤三步(AIBaseCommon::change_skin)
                cpp1. 写 SkinId 字段: reinterpret_cast<xor_value<int32>*>(this + SkinId偏移)->encrypt(skin); ★ SkinId 在内存里是 Riot 的滚动 XOR 加密存储(xor_value:密钥 + 4 值表 + 轮换索引),必须用同款算法加密后写回——写明文会被 游戏的解密逻辑读出错值;2. 写 base_skin.model 与 base_skin.skin;3. 调游戏的 CharacterDataStack::Update(true) → 引擎按新数据重建模型 → 画面上皮肤变了。
                Push/Update都是调用游戏自己的函数(特征码定位),Push的 17 参数签名是逆向得出的固定组合(模型名、皮肤 ID、一组标志位)。
                5.3 特殊皮肤处理(checkSpecialSkins)
                形态类英雄(卡特琳娜/雷克顿/厄运小姐变体):同步修改gear形态索引,否则模型与特效对不上;凯隐是唯一的 gear 例外;拉克丝大元素使 / 娑娜 DJ:同一 skin_id 对应多种形态——清空 整个栈,压入特殊模型名(LuxFire/SonaDJGenre02);其他英雄:gear 重置为 -1。
                5.4 防御塔皮肤 ID 规律
                changeTurretSkin:skinId * 2(蓝方)/skinId * 2 + 1(红方)—— 防御塔皮肤 ID 在游戏数据里按蓝红方成对相邻编排(逆向发现的规律)。
                5.5 为什么服务器看不见
                皮肤数据栈是纯客户端渲染状态——服务器只记录"你选的英雄、拥有的 皮肤",客户端画什么模型它不校验。换肤不影响伤害判定,其他玩家看到的 你不变。风险因此完全来自客户端侧的环境采集(ACE 在你电脑里看到的 模块与行为),而非行为异常。


                IP属地:湖南8楼2026-09-05 14:56
                回复
                  2026-10-19 03:00:37
                  广告
                  不感兴趣
                  开通SVIP免广告
                  六、阶段六:交互与配置
                  菜单:ImGui 绘制,五个标签页(本地玩家/其他英雄/全局皮肤/日志/其他设置);快捷换肤:不开菜单直接 PageUp/Down 循环切换当前英雄皮肤;修改昵称:InputText直接编辑玩家对象的显示名(MsvcString)—— 仅本地显示;配置持久化:每次换肤自动保存文档\xibacao\xibacao64(JSON)—— 每英雄皮肤索引、按键绑定、字体缩放,下次自动恢复。


                  IP属地:湖南9楼2026-09-05 14:56
                  回复
                    七、生命周期与退出
                    DllMain工作线程在钩子装好后进入主循环(每 250ms 检查运行状态); 菜单"强制退出"→hooks->uninstall()卸掉全部钩子 → 游戏渲染钩子消失 → 客户端判定断线 → 回到重连界面(这就是退出表现是"掉线"而非关闭的原因)。


                    IP属地:湖南10楼2026-09-05 14:57
                    回复
                      八、三个最精妙的设计
                      借刀杀人:不自绘模型,改数据后调游戏自己的 Push/Update—— 新模型的特效、动作、语音全部由游戏自己加载,完美无缺;对抗加密:连 SkinId 字段 Riot 都做了滚动 XOR 混淆,工具原样实现 加解密(xor_value)才能安全写值;数据复用:皮肤列表遍历游戏的 ChampionManager + 调游戏 translateString——数据永远与游戏版本同步。
                      共同思想:最大化借用游戏自己的代码与数据,工具只做最小干预—— 干预越小,越稳定,也越不显眼。


                      IP属地:湖南11楼2026-09-05 14:57
                      回复
                        与原版的完整改动总结
                        对比基线:原版仓库起点 = hydy100 的最后一次提交97d2427(8 月 13 日,支持到 16.15 时代)。当前:本地 main 领先15 个提交,33 个文件,+2848 / −77 行。
                        一、功能修复(让工具在 16.17 上复活)
                        | 改动 | 文件 | 效果 |
                        | --- | --- | --- |
                        | translateString 特征码改用序言模式 | memory.hpp | 修复 16.16+ 的失效(菜单文本翻译) |
                        | Update 特征码加长消歧 | memory.hpp | 消除 .text 第二处误匹配 |
                        | 失效诊断聚合 | memory.cpp | 版本更新时一次弹窗列出全部失效项(原来逐条刷屏) |
                        | 三条多处匹配特征码唯一化 | memory.hpp | GameClient +5B / AIHero +1B / AITurret +1B,15/15 全部 OK(1),消除首处漂移风险 |


                        IP属地:湖南12楼2026-09-05 15:04
                        收起回复
                          二、反检测(原版最大的暴露面)
                          | 改动 | 文件 | 效果 |
                          | --- | --- | --- |
                          | 身份整体迁移 R3nzSkin → xibacao | Config/GUI/Hooks/Logger/rc | 配置路径、菜单标题、弹窗、版本信息全部去指纹,产物内 R3nzSkin 字符串残留 0 |
                          | 编译硬化 | vcxproj | /MT 静态 CRT、StringPooling、无 RTTI、/utf-8、产物改名,对齐 RiotGamesServers 加固项 |
                          | 自我抹除 | pehide.hpp(新)+ R3nzSkin.cpp | 加载后擦除内存 PE 头(PEB 摘链已实现但因 A/B 触发检测而默认关闭) |
                          | A/B 实测结论归档 | TODO.md | 手工映射/PEB 摘链触发检测、LoadLibraryW+擦头安全的实证结论 |


                          IP属地:湖南13楼2026-09-05 15:05
                          收起回复
                            三、全新能力(原版完全没有的)
                            | 新增 | 文件 | 价值 |
                            | --- | --- | --- |
                            | PatternDumper 工具链 | PatternDumper/src/(5 文件)+ build 脚本 | 并行挂钩注入器、两段式投递桩、v4/v5 内存转储器、标志单一事实源 |
                            | 守望者系统 | watcher.ps1 + setup_silent.ps1 + 3 个 vbs | 计划任务(最高权限、免 UAC、登录自启)、隐藏窗口、无限常驻、进对局自动注入 |
                            | 载荷内置按需转储 | memdump.hpp(新)+ Hooks.cpp 挂接 | 游戏内创建标志文件即触发零异常转储——16.17 实测 35.5MB 镜像落地、游戏无恙 |
                            | 特征码校验/基线 | check_patterns.py、finalize_baseline.py | 一条命令完成修补→校验→归档 dumps/<版本>/ |
                            | 原理文档 | docs/换肤原理全解.md、README/TODO | 全部逆向认知沉淀成文,可传承 |


                            IP属地:湖南14楼2026-09-05 15:07
                            收起回复
                              2026-10-19 02:54:37
                              广告
                              不感兴趣
                              开通SVIP免广告
                              四、体验(用户可见)
                              菜单全中文:五个标签页、全部控件、悬浮提示、日志按钮;配置迁移兼容(lolskin 转换器适配新路径、支持命令行传参)。


                              IP属地:湖南15楼2026-09-05 15:07
                              收起回复