WeMod 本地 VIP 简单分析与实现(手动)
本帖最后由 涛之雨 于 2024-9-18 23:00 编辑# WeMod 本地 VIP 简单分析与实现(手动)
## 前言
既然写了手动,那肯定是可以自动实现破解的,可以但是没必要,甚至都可以不需要修改文件,
`WeMod` 官方提供了控制台的快捷键( `Ctrl`+`Shift`+`D` ),如果不嫌麻烦,可以根据[我之前教程](https://www.52pojie.cn/thread-1485179-1-1.html#39473163_%E8%A7%A3%E5%86%B3)中“条件断点”的原理,
搜索`.headers.get("Content-Type")`,在唯一一处位置打开添加下图所示的条件断点,
```js
e.url.endsWith('/account')&&(e={_:e,url:e.url,headers:e.headers,json:async(a)=>(a=await e._.json(),a.subscription={startedAt:"2999"},a)}),false;
```
> 有人就要问了,为什么图上的代码和上面代码块的代码不一样?
> 答案肯定就是优化过了,更简洁,直接可以塞到 `asar` 文件中
然后只需要每次打开软件后,打开控制台即可实现破解。
全文结束,撒花 ✿✿ヽ(°▽°)ノ✿
等一下,这样写太短(水)了,
所以我下面要开始补充逆向思路,错误的经历,踩坑的过程,失败的辛酸,希望的曙光,短暂的喜悦,遇到的挫折,不懈的努力,到最后成功的狂喜。
再等一下,这样写又太长(水)了。
算了算了,写到哪里是哪里好了🤷♂️
## 初窥门径
打开软件,打开控制台(`Ctrl` + `Shift` + `D`),随便找到一处需要会员订阅的地方,发现出现了一个`account`请求,打开看一下:
嗯?`"subscription": null`, 怼着脸上开大是吧,那肯就是这个了,从堆栈里追到请求的位置(看样子可能采用的`VUE`框架,用户代码大概率在`app-xxx.js`里
追到关键函数`getUserAccount`,就可以下断点然后调试了。
断点断下后,鼠标放到`fetch`上,点击`[]`,跳转到函数定义位置,然后单步跟到如图所示位置
可见在上图 ③ 所示位置解析了返回的 `json` 数据并且返回。
## 偷梁换柱
下面分析`subscription`部分的结构(2024年7月19日补充)。
大概搜索一下哪里调用了`.subscription`
```js
accountChanged(e) {
this.#u.user("subscription_tier", e.subscription ? "pro" : "free", S.Io);
const t = this.#H();
t !== this.#k && (this.#k = t,
this.#u.user("tier", "free" === t ? "free" : "pro", S.ek),
this.#u.user("plan_type", t, S.ek),
this.#u.user("plan_flag", (0,
y.Lt)(e.flags, 512) ? 1 : 0, S.ek))
}
```
第一处只有判断`subscription`是不是[真值](https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy),对于结构判定没有什么帮助。
我们先重写结果,将`subscription`设置成`{}`。
(然后一测试就成功了=_=,正常不是应该有个什么判断是否过期啊,或者什么吗)
于是我们可以得出前言部分所述的代码(可以上去翻一下)
但是到此可还不算完,因为我们还需要每次打开软件都打开控制台,看起来很蠢,其实特别蠢。
我们直接将这部分代码写入到 `js` 代码中即可。
## 混入其中
`electron`打包的exe,我们直接解包,然后修改,再打包即可。
等一下,怎么双击后没反应?
控制台打开看一下是不是报错了
好像是校验?直接搜一下`Integrity check failed for asar archive`。
好好好,根据(https://www.electronjs.org/zh/docs/latest/tutorial/asar-integrity),在`electron>=30.0.0`版本中,会把校验信息放到[资源](https://learn.microsoft.com/en-us/windows/win32/menurc/resources)中。
简直哭死,他甚至还把新文件的sha256写出来。
那就简单了,直接打开`Hex`编辑器,在`exe`中搜`83725ca725c0f576ebb6ae248d54294ea5518e5a2bd9662e887055295042d767`,替换成新的`hash`(图上为`b6288a570c316cde4aa6dd78dcc31cb86c285f17a9fefb5d9da199ed711bf9cd`)
根据他文档的指引,搜索如下结构。
```json
[
{
"file": "resources\\app.asar",
"alg": "sha256",
"value": "9d1f61ea03c4bb62b4416387a521101b81151da0cfbe18c9f8c8b818c5cebfac"
}
]
```
替换相关`hash`的值。
(就成功了)
## 一触即发
自动化脚本?
很简单只需要两步(写了,反正能用):
1. 自动解包`app.asar`,修改后重新打包(甚至都不需要解包,直接追加到`app.asar`的相关位置,然后文件修改偏移和`hash`即可)
2. 修改相关校验(直接16进制编辑exe即可)
> We, Mod WeMod(WeMod破解工具)
> https://www.52pojie.cn/thread-1965591-1-1.html
> (出处: 吾爱破解论坛)
可能存在的更好的解决方案(待思考)
- 通过`dll-hook`的方式直接注入(通杀更新)(未尝试)
- 通过`Proxy`或者`PAC`什么的参数劫持掉域名(尝试了,未成功)
- 重写启动器(尝试了,未成功)
## 写在最后
写教程的过程中,在第一部分中有提到翻到“[我之前教程](https://www.52pojie.cn/thread-1485179-1-1.html#39473163_%E8%A7%A3%E5%86%B3)中‘条件断点’的原理”,
翻了一下吾爱的教程,然后一眼瞟见之前提到过的[百度的骚操作](https://www.52pojie.cn/forum.php?mod=viewthread&tid=1433013&page=2#pid38368172),点开一看,
突然就沉默了,看到了一位故人。
认识你,不后悔。
你在那边,要好好的。 一楼留给胡萝卜周 感谢分享,虽然不玩游戏,但是这个分析解题思路值得我学习。祝愿胡萝卜周在那边好好的,吃好喝好,开心愉快。 kang2000888 发表于 2024-7-25 23:27
通过Proxy拦截然后修改account的数据包理论上是可行的呀,奇怪了怎么会不行呢
他代码里好像重置了Proxy参数,我本来是希望用修改程序启动参数修改Proxy的来着,然后添加pac参数的话请求失败。
用map重定向rule倒是可以导致程序无法获取更新数据,但是总是获取不到服务器内容(我是用的cloudflare的worker) 这个软件是玩啥的。。。 wangjiuye 发表于 2024-7-15 21:27
这个软件是玩啥的。。。
风灵月影集合版 涛之雨 发表于 2024-7-15 21:17
一楼留给胡萝卜周
啥意思 胡萝卜周不是那个了吗? 怎么就在那边好好的了
发生了什么了吗 又看没有懂 确实是不懂 现在的吾爱也不直接给东西了 好难啊 看不懂但是感觉很牛逼的样子 谢谢大佬分享,学习学习。 漂亮,看完了,没看懂{:1_911:}