看直播的时候,发现进入英雄选择界面的时候,有时候会遇见憨批发言“我方上等马… 我方牛马…敌方…”。
当时好奇是怎么做到的,如果实现的助手插件是通过逆向解析,难道不会被封号吗?
直到我发现拳头公司本身有提供给开发者的api。。。
果然,信息开阔眼界,有些事情难度一下子下降N个量级。
简单介绍
内容参考:
通过拳头lucAPI来拉人进游戏
Java-S12138/frank
- 通过lockfile文件读取配置【过时】
英雄联盟\LeagueClient目录下会出现lockfile。该文件内容参考LeagueClient:13808:1667:p4Sw2_-_uUcKIeHhPmvoMQ:https
-
通过任务管理器查看配置【过时?】
查看LeagueClientUx.exe
命令行这一列的信息,取出-app-port
和--remoting-auth-token
- 通过cmd或者powershell实现【过时?】
// https://github.com/Java-S12138/frank/blob/d7e20528e74511850a33d0f0a6117df06eea761e/src/utils/league-connect/authentication.js if (isWindows && (options === null || options === void 0 ? void 0 : options.useDeprecatedWmic) === true) { command = `wmic process where caption='${name}.exe' get commandline`; } else { command = `Get-CimInstance -Query "SELECT * from Win32_Process WHERE name LIKE '${name}.exe'" | Select-Object CommandLine | fl`; }
- 通过log读取配置
已经有较长的那么一段时间,riot并没有将配置写入上述的lockfile
。但是log仍然是存在的。
英雄联盟\LeagueClient目录下会出现log文件,比如:
2022-07-26T14-15-28_8736_LeagueClientUx.log
000000.000| ALWAYS| Logging started at 2022-07-26T14:15:28.264 000000.000| ALWAYS| Application Version:12.13.453.3037 - CL:4533037 - Build Date: Jul 11 2022 - Build Time:18:39:22 000000.000| ALWAYS| Log file 2022-07-26T14-15-28_8736_LeagueClientUx.log 000000.000| ALWAYS| Running LeagueClientUx version 12.13.453.3037 000000.000| OKAY| Using initial working directory: "d:\program files\腾讯游戏\英雄联盟\LeagueClient" 000000.000| OKAY| Current process: "D:\Program Files\鑵捐娓告垙\鑻遍泟鑱旂洘\LeagueClient\LeagueClientUx.exe" 000000.000| OKAY| Command line arguments: --riotclient-auth-token=j9J5mFu7rsICgZqcJRSo4A --riotclient-app-port=63154 --riotclient-tencent --no-rads --disable-self-update --region=TENCENT --locale=zh_CN --t.lcdshost=hn1-sz-feapp.lol.qq.com --t.chathost=hn1-sz-ejabberd.lol.qq.com --t.lq=https://hn1-sz-login.lol.qq.com:8443 --t.storeurl=https://hn1-sr.lol.qq.com:8443 --t.rmsurl=wss://sz-rms-bcs.lol.qq.com:443 --rso-auth.url=https://prod-rso.lol.qq.com:3000 --rso_platform_id=HN1 --rso-auth.client=lol --t.location=loltencent.sz.HN1 --tglog-endpoint=https://tglogsz.datamore.qq.com/lolcli/report/ --t.league_edge_url=https://ledge-hn1.lol.qq.com:22019 --ccs=https://cc-hn1.lol.qq.com:8093 --dradis-endpoint=http://some.url --remoting-auth-token=MmjujFMHhdwKWFhlK9aOsQ --app-port=63190 --install-directory=d:\program files\閼垫崘顔嗗〒鍛婂灆\閼婚亶娉熼懕鏃傛礃\LeagueClient --app-name=LeagueClient --ux-name=LeagueClientUx --ux-helper-name=LeagueClientUxHelper --log-dir=LeagueClient Logs --crash-reporting= --crash-environment=HN1 --app-log-file-path=d:/program files/鑵捐娓告垙/鑻遍泟鑱旂洘/LeagueClient/../Game/Logs/LeagueClient Logs/2022-07-26T14-15-27_9788_LeagueClient.log --app-pid=9788 --output-base-dir=d:/program files/閼垫崘顔嗗〒鍛婂灆/閼婚亶娉熼懕鏃傛礃/LeagueClient/../Game --no-proxy-server
可以从上面取出
--app-port
和--remoting-auth-token
,这里注意端口授权不要和--riotclient-app-port
和--riotclient-auth-token
搞混了。 - 通过http请求调用API
参考apiSwagger文档获取想要的API。
例如,获取好友信息或者查看符文页,大概一两个HTTP请求就能搞定。
需要注意的是,协议请使用HTTP1.1,这导致浏览器使用HTTP2直接访问的话可能报错好友信息 GET https://riot:{remoting-auth-token}@127.0.0.1:{app-port}/lol-chat/v1/friends 符文页 GET https://riot:{remoting-auth-token}@127.0.0.1:{app-port}/lol-perks/v1/pages
以下为python示例
import requests
import base64
if __name__ == "__main__":
token = 'MmjujFMHhdwKWFhlK9aOsQ'
port =63190
url_prefix = 'https://127.0.0.1:%d'%port
token_encode = base64.b64encode(bytes('riot:' + token, 'utf-8'))
basic_auth = 'Basic ' + str(token_encode, 'utf-8')
url = url_prefix + "/lol-chat/v1/friends"
#url = url_prefix + "/lol-perks/v1/pages"
headers = {
'Accept': 'application/json, text/plain, */*',
'Authorization': basic_auth,
}
data = requests.get(url, headers=headers, verify=False)
print(url)
print(data.text)