前言#
坊间传言 v2board 作者被带走,客户端打包面板已经无法使用。所以分析一下客户端,看看能不能有所收获。
结构#
可以看到客户端是 electron 编写的,所以到 \resources 里把 app.asar 解包就能看到源码了。
处理#
为了方便分析,所以将 app.asar 解包并将解包内容放到同名文件夹。
主进程 main.js 并没有做混淆等处理,可以直接看到逻辑。通过分析可以看到,作者关闭了沙盒等安全措施,比较莽。
可以看到主页面是./dist/index.html
上方图片为修改后的代码图片。
为了方便调试首先去除 devtools 限制,并开启应用上方菜单栏。
页面中的 umi.js 经过加密,并且具有反开发者工具等功能,看加密风格像是jsjiami.com的加密工具加密的,开头有个大数组的这种加密方式。
经过处理就可以去除部分反调试措施。但是为了分析,还是要对 js 进行解密。
由于本人水平有限,解密的并不完全,就不放解密之后的代码了
分析#
客户端首先会请求接口获取 v2b 面板地址,返回内容为 json。
并将面板地址存入 global 中
然后再请求 v2b 面板获取网站名称等信息
登录成功后就可以使用了
破解?#
破解的核心在于解密 umi.js 文件,经过本人尝试解密耗时很长,不亚于重新写一个一样的。
经过对本人解密的 js 分析,有多种反盗版措施,并且会将盗版的信息上报。但是上报的地址目前不能正常访问会返回 500。反盗版措施经过研究都可以绕过,但是为了支持正版就不放出来了。
但是呢,由于作者不知所踪,可以不管反盗版措施,直接开干。
思路#
这里提供一种简单的思路,这种思路会触发反盗版措施,用户使用时具体表现为突然关闭应用,但是触发机率不大。so...
具体原理为拦截 fetch 请求,并对请求进行修改。这里在 Index.html 中加入 fake.js。以下为内容。
const originFetch = fetch;
Object.defineProperty(window, "fetch", {
configurable: true,
enumerable: true,
get() {
return (url,options) => {
//拦截获取面板地址的api并替换为自己的地址
if(!url.includes("api/v1")){
url = "http://自己的地址/config.json"
}
//阻止反盗版上报
if(url.includes("fake")){
alert(url);
while(1){}
}
return originFetch(url,options)
}
}
});
//改登录页面的标题和应用运行时的名称
window.addEventListener('DOMContentLoaded',()=>{
document.querySelector("title").innerText="久世凝眸"
})
然后重新打包成 asar 放到指定位置就可以用了。
图标等也可以通过工具进行修改,这里就不演示了。
其他#
css 还是可以改一改的,比如换个颜色啥的。下图为改成 lightpink 颜色的示例。