首页
社区
课程
招聘
Typora 理论多版本多平台兼容破解方案
发表于: 2022-11-9 18:57 14309

Typora 理论多版本多平台兼容破解方案

2022-11-9 18:57
14309

互联网上公开的破解手段中,大多数都是采用对 Typora 加密的核心JS进行修改或Patch二进制实现绕过授权的,但这无疑会出现以下几种问题

针对以上几个痛点整理出以下几个需求

俗话说,打蛇打七寸,去跟作者防护的JS做对抗如同撞豆腐也要找块冻豆腐,如何能四两拨千斤的点破罩门呢?

针对传统软件的破解,我们常采用抓包/山寨服务器的方式修改验证包实现,但在逆向过程中发现Typora使用了非对称算法解密数据,导致不修改核心js就无法做到山寨数据,那么这条路就行不通了。

真的行不通吗?

在分析的过程中注意到Typora使用nodejs自带的crypto.publicDecrypt()

是否可以hook nodejs 相关实现来修改数据呢?

当然是可以的,Nodejs 本身是开源的,查看源码了解到算法最终实现是C++语言,分析二进制程序就能找到对应的实现位置进行hook,但这明显的违背了我们的“二进制无关”需求

有没有什么其他办法对该函数进行hook呢

进一步的来说,Nodejs 运行的 ECMAScript 本身就存在 hook 能力,若使用js对typora使用的API进行hook便可以满足二进制无关的需求,以此来以点破面。

那么如何使用JS进行hook呢?首先需要一个能够让我们注入JS的方式,大有如下两种思路

显然就目前来讲第二种方式是比较省心的,但向node_modules的库中插入hook代码需要考虑几个问题

经过对核心JS的分析,发现raven这个库会在较早的时机被加载,所以可以将代码插入到该库的index.js

而HOOK方式经过尝试采用了对Modules原型重写,拦截require的方式HOOK Typora使用的库对象并进行修改

明确以上两点后编写hook代码即可完成破解工作。

image-20221109183115299

Typora require Cryptoelectron-fetch 库的时候返回经过修改的对象

修改后的electron-fetch对象根据请求链接返回mock的有效License结果

image-20221109183322462

修改后的crypto对象判断解密内容是否为mock内容来返回mock的解密license数据

image-20221109183344767

至此通过JS hook的方式实现了对验证流程的劫持,只要在输入激活码的地方输入能够满足typora本地判断的激活码即可进入网络验证流程并被hook代码返回正确的验证数据。

插入hook js后重打包asar即可完成破解,使用代码生成的激活码进行激活。

该方式只要验证逻辑不修改并存在注入点便持续可用,理论多版本兼容。

代码地址:https://github.com/DiamondHunters/NodeInject

 
 
 
 
 

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-11-9 19:02 被DiamondH编辑 ,原因:
收藏
免费 10
支持
分享
最新回复 (6)
雪    币: 1402
活跃值: (341)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你们这些大手子真是太牛了,都没人回帖阿,怀念热闹的时候。
2022-11-18 11:30
0
雪    币: 761
活跃值: (656)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习一下
2022-11-19 23:07
0
雪    币: 226
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
学习了
2023-2-2 20:07
0
雪    币: 222
活跃值: (185)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
这个思路好啊,厉害了
2023-2-4 00:14
0
雪    币: 103
活跃值: (1137)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
厉害厉害
2023-7-12 04:21
0
雪    币: 3573
活跃值: (31026)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
感谢分享
2023-7-12 09:57
1
游客
登录 | 注册 方可回帖
返回
//