ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

如何用C++ Qt + CEF打造英雄联盟LCU恶搞工具:LeaguePrank从零开发教程

如何用C++ Qt + CEF打造英雄联盟LCU恶搞工具:LeaguePrank从零开发教程 如何用C Qt CEF打造英雄联盟LCU恶搞工具LeaguePrank从零开发教程【免费下载链接】LeaguePrank项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrankLeaguePrank 是一款基于C Qt CEF开发的英雄联盟 LCU 恶搞工具通过合法调用 Riot 公布的 LCU API修改客户端本地显示的段位、生涯背景、头像、房间状态等信息。本文将从原理、架构到关键代码带你从零理解这个工具是如何开发出来的。一、LeaguePrank 是什么5 大核心功能一览 LeaguePrank 由 Mario 与 ButterCookies 共同维护C 负责系统级操作JavaScriptH5 页面负责界面与 LCU 请求二者通过 CEF 嵌入运行。功能说明可见范围状态修改伪造离开/离线/手机在线等在线状态好友可见头像显示替换客户端内显示的头像仅自己可见房间伪造伪造所在房间的模式、人数与玩家列表好友可见段位显示伪造好友列表中悬停显示的段位黑铁~最强王者好友可见生涯背景无视是否拥有皮肤修改生涯背景他人可见永久有效重要提示摘自界面说明本工具所有功能均为合法调用 Riot 公布的 LCU API不修改游戏文件、不读写客户端内存完全遵守用户使用协议。二、核心原理lockfile 与 LCU 本地 API 一切恶搞的起点是英雄联盟客户端的lockfile文件客户端启动时LeagueClient.exe会在安装目录下生成lockfile内容格式为计算机名:进程ID:端口:令牌:协议。客户端内置一个本地 HTTP 服务器监听该端口即 LCU API。用Basic Auth用户名riot密码为令牌即可向127.0.0.1:端口发起请求读取/修改当前用户的展示信息。所以工具的钥匙分两步获取找钥匙位置遍历进程拿到LeagueClient.exe的完整路径见 processinfo.h 的GetProcessFullPaths解析钥匙读取 lockfile 用正则提取端口与令牌见 lockfilereader.cpp 的setGamePath。JS 端再用令牌构造认证头封装出极简的 LCU 请求器见 LCUconnect.jsinstall()用btoa(riot: token)生成Authorization: Basic xxx请求头request()拼出协议://riot:令牌127.0.0.1:端口/接口路径的完整 URL统一走 JSON 请求。三、架构设计C 干脏活JS 管界面 ️项目目录结构清晰C 工程在 LeaguePrank/前端资源在 view/CEF 桥接库在 QCefView/LeaguePrank/ C 主程序Qt Widgets 工程 ├─ mainwindow.cpp 主窗口事件路由、配置读写 ├─ cefview.cpp CEF 视图C ↔ JS 双向通信 ├─ lockfilereader.cpp lockfile 解析 ├─ processinfo.h 进程枚举定位游戏路径 └─ Methods.h 双向通信的方法名常量 view/ 前端页面CEF 中加载的本地 HTML ├─ index.html 主界面UI Kit 框架 └─ js/LCUconnect.js LCU API 连接器 QCefView/ QCefView 桥接库CEF 初始化与命令行参数为什么这样分工因为枚举进程、读文件、打开本地服务器凭证等系统操作只有 C 能干净地做而段位下拉框、玩家表格这类富交互界面用 HTML/CSS/JS 开发效率远高于 Qt 原生控件。于是 CEF 成了天然的界面容器。双向通信靠一对 API 打通常量定义在 Methods.hC → JSsendEvent()广播事件到页面如推送游戏路径列表、配置文件内容cefview.cppJS → C页面调用invokeMethod由onInvokeMethodNotify接住并转成 Qt 信号cefview.cpp再路由到主窗口mainwindow.cpp。┌─────────── C (Qt) ───────────┐ ┌─────────── JS (CEF) ───────────┐ │ processinfo.h 枚举游戏进程 │ │ index.html UI 界面 │ │ lockfilereader lockfile→端口/令牌 │ 事件 │ LCUconnect.js 发 LCU 请求 │ │ mainwindow 路由/配置持久化 │ ─────▶ │ 展示段位/头像/房间等恶搞效果 │ │ ◀───── │ 方法调用invokeMethod │ └──────────────────────────────────┘ └────────────────────────────────┘四、从零搭建环境准备与编译步骤 ️一键获取源码git clone https://gitcode.com/gh_mirrors/le/LeaguePrank环境要求参考工程配置 LeaguePrank.proWindows 系统 Visual StudioC 桌面开发工作负载Qt 5.15.0需要 core / gui / widgets 模块CEF 与 QCefView 库工程通过 LeaguePrank.pro 链接QCefView.lib与libcef.lib头文件来自QCefView/include。编译流程用 Qt Creator 打开 LeaguePrank.pro确保QCefView/lib与QCefView/include目录就位工程中已内置链接与包含路径配置Release 构建工程开启了-O2优化并注入管理员权限清单LeaguePrank.pro因为读取游戏目录需要管理员权限运行时把 view/ 目录放在可执行文件同级目录——启动时主窗口会校验view/index.html是否存在缺失则提示文件不完整并退出mainwindow.cpp。CEF 的启动参数在 QCefViewBrowserApp.cpp 中统一配置其中--disable-web-security、--allow-insecure-localhost等开关是允许本地页面跨域请求http://127.0.0.1:端口的关键。五、关键代码走读5 个必须看懂的模块 ① 定位游戏路径—— processinfo.hGetProcessFullPaths(LeagueClient.exe)用 Windows 进程快照遍历所有进程打开句柄后取映像文件名并做 DOS 路径到 NT 路径的转换最终拿到游戏安装目录。C 拿不到时还有wmic命令行兜底mainwindow.cpp。② 解析 lockfile—— lockfilereader.cpp 正则(.*):(.*):(.*):(.*):(.*)五段拆分出机器名、UID、端口、令牌、协议getUrl()拼出127.0.0.1:端口lockfilereader.h。这是整个工具安全合法的核心只读一个本地文本文件。③ 推送连接信息给页面—— mainwindow.cppsendGamePathList()把每个客户端实例的path / token / url / protocol组装成 JSON 数组经PATH_LIST_SET事件发给 JS 端页面收到后才显示功能列表否则停留在未能识别到客户端的等待页index.html。注意代码注释里的设计取舍进程枚举较慢所以采用被动响应——页面请求时才发数据避免界面卡顿mainwindow.cpp。④ JS 反向调用 C—— mainwindow.cpponInvokeMethod是一个方法名路由器LCUreadProfile读配置、LCUwriteProfile存配置本地settings.profile文件实现记住你上次设置的段位、LCUopenUrl用系统浏览器打开链接。新增功能时加一个方法名常量 一个分支即可。⑤ LCU 请求封装—— LCUconnect.js 仅 40 行不到的连接器install()存凭证request()拼 URLrequest_getImg()拉取头像图片流。所有段位、房间、生涯背景功能都构建在这层之上。六、功能实现思路以段位显示为例 以用户设置段位为例完整数据流是这样的用户在 index.html 的三个下拉框中选择大段位黑铁→最强王者、组排模式单双排/灵活/云顶、小段位I~IVJS 通过LCUconnect.js向127.0.0.1:端口的 LCU 接口发 PUT 请求写入伪造的 rank 信息客户端刷新好友列表数据好友悬停头像时即显示你伪造的段位。头像替换走request_getImg拉取本地图片二进制流再赋给img配置持久化走 JS→C 的LCUwriteProfile事件。可见每个功能都是UI 收集参数 → LCU 请求落地 → 配置存盘三板斧模式高度统一非常适合照葫芦画瓢扩展新玩法。七、常见问题 FAQ ❓Q1打开提示未能识别到客户端lockfile 只在客户端运行时存在。请先进入英雄联盟客户端大厅再打开本工具仍失败则重启客户端或软件。Q2为什么程序要以管理员权限运行枚举游戏进程、读取游戏安装目录下的 lockfile 需要足够权限工程已内置管理员 UAC 清单LeaguePrank.pro。Q3设置了游戏中状态没生效界面已提示该状态可能不生效属于 LCU 端对状态值的校验限制可优先使用离开/离线。Q4修改会影响别人吗仅段位、房间、生涯背景、在线状态对好友可见头像替换只影响自己客户端所有改动通过公开 LCU API 实现不改任何游戏文件。八、总结与扩展方向 LeaguePrank 用不到千行的 C 代码 一套轻量 H5 页面就完整打通了进程定位 → lockfile 解析 → LCU API 调用这条链路。想继续深入或二次开发建议按以下顺序阅读入门main.cpp 与 mainwindow.cpp 的主流程通信机制cefview.cpp 的sendEvent/onInvokeMethodNotify对照 Methods.h 常量功能扩展view/js/sitebasic.js 中的界面交互逻辑仿照段位显示新增接口调用即可。掌握这套C 系统能力 CEF 承载 H5 JS 对接本地 API的组合拳你同样可以打造属于自己的桌面端网页壳工具。【免费下载链接】LeaguePrank项目地址: https://gitcode.com/gh_mirrors/le/LeaguePrank创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表