1.0 版本是一次性付费而非订阅的,只要支付人民币 89 元,可以在 3 台设备里使用。
Typora之于我
如你所见,这一篇文章就是使用Typora所写。自搭建个人博客起,Typora就成为了我主要的写作平台。
用惯了Markdown,WordPress的古腾堡编辑器没法满足我的需求,于是开始寻找替代品,最终的结果便是typora。
当然,多数人使用的原因不外乎以下
轻盈、干净
所见即所得
图床
主题、生态
(beta)免费
……
如今,typora进入收费阶段,不乏使用者被迫迁移至其他写作工具上。
(不扯了官方话了)下面,我们来一探究竟。
敬告
请勿使用盗版,支持正版授权。
文中内容仅作学习和讨论,请不要从事任何非法行为。
由此产生的任何问题都将读者/用户(您)承担。
寻踪觅源
通过火绒剑监测行为日志
程序加载的一些模块
image-20211130184106692.png (25.61 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
在Windows下,typora会记录日志至{UsersRoot}\AppData\Roaming\Typora\typora.log
能看到可疑的注册表操作记录
image-20211130183426635.png (100.86 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
正版激活的注册项内容
image-20211130183559343.png (38.81 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
尝试修改SLicense
image-20211130184239487.png (33.24 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
重新运行软件后,从错误日志中发现调用栈暴露。
image-20211130184326918.png (45.92 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
渐入佳境
这里关注到了app.asar
通过搜索引擎,尝试解包
npm install -g asar
asar extract {installRoot}/Typora/resources/app.asar workstation/outs
发现文件被加密
image-20211130184736342.png (182.98 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
JavaScript不管是字节码还是明文脚本都会在运行时加载,结合模块列表寻找加载点
关注到解包得到的main.node
image-20211130185130235.png (75.87 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
IDA寻找字符串特征
image-20211130185218763.png (64.25 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
image-20211130185352718.png (154.02 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
通过交叉引用定位
看到一些导入函数
image-20211130185459749.png (137.54 KB, 下载次数: 6)
下载附件
2021-11-30 23:41 上传
由字符串联想到对加密文件进行的base64解码
导入表查找到 napi Node-API | Node.js API 文档 (nodejs.cn)
简单分析伪代码后,其实就是运行
Buffer.from(e,"base64")
刻舟求剑
尝试Findcrypt寻找算法,找到AES的Sbox和InvBox
通过交叉引用定位到可疑函数点 main.node+E440
IDA动态调试,模块加载断点
image-20211130190419570.png (56.92 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
跑起来,直至加载main.node
image-20211130191229401.png (117.86 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
分析模块后,定位base+offset下断,运行
看到
image-20211130191526130.png (54.61 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
正好与我们的文件对应偏移16
image-20211130191647736.png (229.56 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
继续调试能看到 分组加密的形式
image-20211130191832333.png (62.14 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
同时能够找到前16字节
image-20211130193509339.png (51.95 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
正是作为iv进行异或
image-20211130193604968.png (39.53 KB, 下载次数: 5)
下载附件
2021-11-30 23:42 上传
柳暗花明
分析调用函数,最终能够确定其函数功能
image-20211130192900341.png (117.48 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
通过偏移EF19,能够确定AES轮数为13轮,对应为AES 256
偏移B510处的函数,能够得到AESKey
image-20211130193202349.png (99.47 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
落叶归根
解密得到明文脚本,授权主逻辑在Lisence.js中
授权逻辑如下图
image-20211130205410796.png (53.06 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
本地验证->获取用户特征->网络验证授权->返回密文->RSA公钥解密->设备指纹对比
破解的思路,不多做阐述。
修改完成后,只需要按相同格式加密并打包为app.asar即可实现补丁Patch
typoraCracker
typoraCracker是一个Typora解包解密程序,也是一个打包加密程序。你可以轻松的打造独属于你的补丁,但请注意法律上的可行性。
测试
总有一种人,喜欢享受“正版”激活的感觉。而我就是……
我采用 Patch+KeyGen
补丁去除网络授权,KeyGen用于本地验证,测试成功
YZHVK3R[H99OPNPPT90PU%1-16382771752981.png (146.76 KB, 下载次数: 6)
下载附件
2021-11-30 23:42 上传
尾声
typora针对electron下的源码加固仍是一片空白。
简单思考后,传统代码混淆的方式对关键逻辑的保护依然有较大的提升空间,不失为一个恰当的加固方向。
期待typora会越做越好——来自一个正版使用者