申请会员ID:gaoyanchen【申请通过】
1. 申 请 I D:gaoyanchen2. 个人邮箱:1450009389@qq.com
3. 逆向新人,希望加入论坛学习,以下是最近破解的笔记内容
# 一、起因
utools是我比较常用的桌面效率工具,拥有强大的插件市场,可以自由组合插件应用,打造专属自己趁手的工具集,但是由于其会员是订阅制而不是买断制,所以当然要支持正版了!!(支持)。仅供学习和测试使用请支持正版软件,测试中产生的后果自行承担。
# 二、知识、工具准备
逆向分析的第一步就是要了解目标软件是用啥开发的,架构是啥,根据其官方的开发文档,以及其跨平台的特性,(当然解包也可以看得出来),是基于electron+node.js 框架,用 javascript 开发的跨平台的桌面程序。
因此我们需要以下工具:
1. asar 打包/解压工具 (npm i -g asar)
2. node.js: 模块/API/运行环境构建/npm工具
3. vscode:编辑用
4. poxyman:抓包用
# 三、开干
## 1、安装工具
1、先下载官方utools安装包
2、安装nodejs
3、npm 安装asar,命令:``` npm i -g asar```
## 2、解包主程序utools的js代码
首先进入程序目录如下:
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705123392989-b515396c-0893-4a4b-b4cd-62bcf607c324.png#averageHue=%23d2d3d1&clientId=u5f4e75d6-2a89-4&from=paste&height=666&id=u296a276b&originHeight=1332&originWidth=2610&originalType=binary&ratio=2&rotation=0&showTitle=false&size=492691&status=done&style=none&taskId=u757c6fff-e7f1-453b-8503-2b990a78556&title=&width=1305)
进入中断输入以下命令:
```shell
asar e app.asar utools
```
会生成一个名叫utools的文件夹,用vscode打开即可看到js代码。可以用格式化文档命令,使用prettier插件格式化下,方便待会阅读代码。
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705123805840-86e1ac8b-9213-4825-9135-b22634b2ad6e.png#averageHue=%23262626&clientId=u5f4e75d6-2a89-4&from=paste&height=1014&id=ufc4d2244&originHeight=2028&originWidth=3910&originalType=binary&ratio=2&rotation=0&showTitle=false&size=1955240&status=done&style=none&taskId=u07adeaca-edd5-43ed-884d-d3872a87a85&title=&width=1955)
## 3、寻找特征
先从app的这个提示入手
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705123857012-17cfae91-c6b8-469c-ac29-910964a07295.png#averageHue=%23d2cecc&clientId=u5f4e75d6-2a89-4&from=paste&height=628&id=u714e1a25&originHeight=1256&originWidth=1680&originalType=binary&ratio=2&rotation=0&showTitle=false&size=259874&status=done&style=none&taskId=u008ef1ab-4bf4-4ddf-8060-4526404f65f&title=&width=840)
没什么卵用,这个信息找不到具体函数,改变思路,应用启动时候肯定要进行服务器请求,获取当前用户的信息,判断是不是会员,所以咱们掏出那个男人poxyman,开始抓包看请求地址:
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705125926944-2692ade6-2347-473d-adc2-776f420e06d6.png#averageHue=%233d423f&clientId=u5f4e75d6-2a89-4&from=paste&height=844&id=u1bcc3783&originHeight=1688&originWidth=3504&originalType=binary&ratio=2&rotation=0&showTitle=false&size=1580857&status=done&style=none&taskId=u0b4ba61a-32be-46e3-8428-d7e302ba992&title=&width=1752)
就是这个请求,注意到有一个属性叫做purchased ,中文就是已购买:false,咱们就搜这个属性。
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705126000086-8de0d058-0a73-4dee-9921-bb0e2effe063.png#averageHue=%231e1d1d&clientId=u5f4e75d6-2a89-4&from=paste&height=1062&id=ud65ecfd6&originHeight=2124&originWidth=3406&originalType=binary&ratio=2&rotation=0&showTitle=false&size=836146&status=done&style=none&taskId=ud25781e3-9f69-452c-8ac6-f9a92f6b1e3&title=&width=1703)找到这个判断是不是已购买的函数,咱们从它入手。全局搜索,有一下三处调用,所以我们只要让这个函数返回会员信息,就大功告成。
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705126062852-ad6e420f-8e45-4fb8-b523-01788bc1cd2f.png#averageHue=%231f1d1c&clientId=u5f4e75d6-2a89-4&from=paste&height=193&id=u59d51a23&originHeight=386&originWidth=1226&originalType=binary&ratio=2&rotation=0&showTitle=false&size=84788&status=done&style=none&taskId=uecb4821b-6ee0-4c17-88fe-8a283638570&title=&width=613)
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705126267352-2d14c2c5-1790-40ed-948c-838754479740.png#averageHue=%231f1c1c&clientId=u5f4e75d6-2a89-4&from=paste&height=597&id=u6f9f6d24&originHeight=1194&originWidth=2132&originalType=binary&ratio=2&rotation=0&showTitle=false&size=265117&status=done&style=none&taskId=u222a5131-8da5-42bc-beb1-f2c031c136f&title=&width=1066)
根据函数内容,我们只要全都返回1即为会员身份,所以将所有return处改为1。
我们打包验证下:
```shell
asar p utools app.
```
替换原有app.asar,重启app,测试会员功能,
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705126455552-b8b155d9-6195-48cc-a045-0d972238184a.png#averageHue=%23dbdbdb&clientId=u5f4e75d6-2a89-4&from=paste&height=742&id=u4e23c0d5&originHeight=1484&originWidth=1672&originalType=binary&ratio=2&rotation=0&showTitle=false&size=239898&status=done&style=none&taskId=u20674452-0f54-4c56-8943-51157da45c1&title=&width=836)
已经可用。
## 4、破解收费插件、
### 1、寻找插件文件
插件商店有很多插件是需要内购的,这些插件是需要自行下载的。比如这款gpt插件。我们尝试破解它,同理,我们先上抓包男,看看这个插件是下载下来的什么。!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705126779112-90b9272a-d0b7-468a-9f28-8a108ded6fa2.png#averageHue=%233fba17&clientId=u5f4e75d6-2a89-4&from=paste&height=636&id=u0426303f&originHeight=1272&originWidth=1672&originalType=binary&ratio=2&rotation=0&showTitle=false&size=287244&status=done&style=none&taskId=uaf0bf6b7-3a2a-4c46-9427-4ea0b64d7d1&title=&width=836)
下载插件是这个请求,请求下来的是加密内容,
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705126911271-a88e1bfa-381e-46d6-b151-5091ae9d98ae.png#averageHue=%2334ab4a&clientId=u5f4e75d6-2a89-4&from=paste&height=491&id=u8d03fb19&originHeight=982&originWidth=3054&originalType=binary&ratio=2&rotation=0&showTitle=false&size=578390&status=done&style=none&taskId=uf0af50e0-e792-46c2-a2de-ff48eceab3c&title=&width=1527)
去代码中搜索这个接口,发现了调用的函数如下:,显然将请求的字节流内容保存到了某个asar文件中,那这就好办了,我们直接去utools数据目录找到这个插件文件。
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705127307441-25cc08c4-8e2b-4f5a-8034-5b628e73a0d3.png#averageHue=%231f1d1d&clientId=u5f4e75d6-2a89-4&from=paste&height=648&id=ud74f808b&originHeight=1296&originWidth=1988&originalType=binary&ratio=2&rotation=0&showTitle=false&size=285207&status=done&style=none&taskId=u99a72a29-2f72-4843-921b-99005c710d3&title=&width=994)
前往如下文件夹:
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705127404525-a351b594-57b8-4ddf-b46a-cc6f70a691ab.png#averageHue=%23b4b4b4&clientId=u5f4e75d6-2a89-4&from=paste&height=671&id=uebde7f79&originHeight=1342&originWidth=2626&originalType=binary&ratio=2&rotation=0&showTitle=false&size=665634&status=done&style=none&taskId=ua423792c-8817-4e87-bf4c-13a9cc27b1a&title=&width=1313)
按照时间排序找到最新的plugin文件,进行解包
```shell
asar e 0bd6fb01b1cc82cf7c1a40ebddc5f6da.asar pt
```
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705127445798-201c4ae2-93d6-489d-9fe1-58e84090aff3.png#averageHue=%23d8d7d7&clientId=u5f4e75d6-2a89-4&from=paste&height=589&id=u8889af8b&originHeight=1178&originWidth=2116&originalType=binary&ratio=2&rotation=0&showTitle=false&size=445447&status=done&style=none&taskId=uc7132a40-c0c8-4c5f-b861-1c664b8d5f4&title=&width=1058)
解包后vscode打开文件夹备用。
### 2、寻找破解特征
老办法,对于这样的需要登录的应用,启动时必然要有账号信息请求。所以我们打开插件登录账号后,重启插件进行抓包。
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705127718735-5349f8f9-6183-4dc7-a6ed-629ce2171436.png#averageHue=%2333b549&clientId=u5f4e75d6-2a89-4&from=paste&height=513&id=u914ee87c&originHeight=1026&originWidth=3122&originalType=binary&ratio=2&rotation=0&showTitle=false&size=372758&status=done&style=none&taskId=ua1a888e0-4c35-4f0e-87a8-868fc3051ac&title=&width=1561)
找到请求了,这个isvip参数摆明了就是突破口啊。我们先用抓包软件脚本功能,修改返回值试试看。直接返回true。
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705127853591-11f0319c-1f5a-4656-a1bb-abc90660be92.png#averageHue=%23373b3b&clientId=u5f4e75d6-2a89-4&from=paste&height=948&id=ub442130d&originHeight=1896&originWidth=3144&originalType=binary&ratio=2&rotation=0&showTitle=false&size=650544&status=done&style=none&taskId=u865909a6-78c7-4b50-b017-cdefd2e067b&title=&width=1572)
再次打开插件,发现vip功能已经可用,但是总不能每次都启动着poxyman使用插件,因此我们着手破解其源文件。
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705127930660-717c1990-877d-4728-a746-ca9c3242c51d.png#averageHue=%23d1d4c7&clientId=u5f4e75d6-2a89-4&from=paste&height=752&id=u21466e72&originHeight=1504&originWidth=1672&originalType=binary&ratio=2&rotation=0&showTitle=false&size=302597&status=done&style=none&taskId=u6b27d8d9-459a-474b-b76b-c95ee0b0cf9&title=&width=836)
我们打开刚刚解号的包,直接搜索这个接口请求gpt-user/testVIP,啪的一下很快啊,就一个结果
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705128044316-4605df9d-36b0-4db2-9246-ee969c788b1a.png#averageHue=%231d1d1d&clientId=u5f4e75d6-2a89-4&from=paste&height=1016&id=u945ed3b4&originHeight=2032&originWidth=3912&originalType=binary&ratio=2&rotation=0&showTitle=false&size=841079&status=done&style=none&taskId=u146c4b1b-9ad9-405c-a900-17c1ab0a5f5&title=&width=1956)
根据变量定位到以下函数位置,return这个三元表达式咱们直接给他取反即可,
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705128125972-ebaec41a-3914-4e1f-af59-573131de6883.png#averageHue=%231f1e1d&clientId=u5f4e75d6-2a89-4&from=paste&height=971&id=u5efcfa60&originHeight=1942&originWidth=2594&originalType=binary&ratio=2&rotation=0&showTitle=false&size=644073&status=done&style=none&taskId=u109fde35-c48d-4eb0-9a79-0233ecc7181&title=&width=1297)
修改如下:!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705128189641-9f2a1ce2-be86-448f-aaa8-d68ff902f2ab.png#averageHue=%231b1a1a&clientId=u5f4e75d6-2a89-4&from=paste&height=211&id=u6fcf162e&originHeight=422&originWidth=2346&originalType=binary&ratio=2&rotation=0&showTitle=false&size=111182&status=done&style=none&taskId=u48e1375b-3e80-4459-bb7d-6454a9cf19e&title=&width=1173)
重新打包asar
```shell
asar p pt 0bd6fb01b1cc82cf7c1a40ebddc5f6da.asar
```
替换源文件,重启插件发现,插件打不开了???返回白屏
替换源文件又可以打开,怀疑主程序对插件文件做了md5校验。
咱们回到主程序源代码。搜索md5,果然找到如下代码
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705128625128-89243886-7ed1-4a1e-9875-4df58f3e96c6.png#averageHue=%231f1d1d&clientId=u5f4e75d6-2a89-4&from=paste&height=893&id=ua5a81ef6&originHeight=1786&originWidth=2368&originalType=binary&ratio=2&rotation=0&showTitle=false&size=413267&status=done&style=none&taskId=u0c059148-eaec-4169-8971-ee53ea229aa&title=&width=1184)
由pluginPath可见为插件md5校验,如果校验不通过就不会mount插件了,所以我们删除这块代码,保留mount。重新打包重启主程序,再次打开插件,成功打开了。测试会员功能可用。
!(https://cdn.nlark.com/yuque/0/2024/png/12664646/1705128725623-e45f7673-4e03-4df9-b4b7-ea696acced7d.png#averageHue=%23d1d4c7&clientId=u5f4e75d6-2a89-4&from=paste&height=752&id=uc47aeda0&originHeight=1504&originWidth=1672&originalType=binary&ratio=2&rotation=0&showTitle=false&size=298382&status=done&style=none&taskId=ud31134df-c3cf-4eee-8951-3da26d02d18&title=&width=836)
# 四、后记
此类electron程序是我上手的第一款macos app ,对网上大佬们的教程表示衷心感谢,希望能加入论坛进行进一步的学习,后续我会进一步学习分享object-c编写的macos应用的逆向破解。希望能通过申请,谢谢。 I D:gaoyanchen
邮箱:1450009389@qq.com
申请通过,欢迎光临吾爱破解论坛,期待吾爱破解有你更加精彩,ID和密码自己通过邮件密码找回功能修改,请即时登陆并修改密码!
登陆后请在一周内在此帖报道,否则将删除ID信息。
ps:内容有些简单,登录后把文章整理一下发到脱壳破解区,期待以后有更多分享。
注册报到
页:
[1]