Typora 授权解密与剖析

Typora 授权解密与剖析

11月23日,Typora 正式发布 1.0 版本,进入了收费时代。

1.0 版本是一次性付费而非订阅的,只要支付人民币 89 元,可以在 3 台设备里使用。

Typora之于我

如你所见,这一篇文章就是使用Typora所写。自搭建个人博客起,Typora就成为了我主要的写作平台。

用惯了Markdown,WordPress的古腾堡编辑器没法满足我的需求,于是开始寻找替代品,最终的结果便是typora。

当然,多数人使用的原因不外乎以下

  • 轻盈、干净
  • 所见即所得
  • 图床
  • 主题、生态
  • (beta)免费
  • ……

如今,typora进入收费阶段,不乏使用者被迫迁移至其他写作工具上。

(不扯了官方话了)下面,我们来一探究竟。

敬告

请勿使用盗版,支持正版授权。

文中内容仅作学习和讨论,请不要从事任何非法行为。

由此产生的任何问题都将读者/用户(您)承担。

寻踪觅源

通过火绒剑监测行为日志

程序加载的一些模块

在Windows下,typora会记录日志至{UsersRoot}AppDataRoamingTyporatypora.log

能看到可疑的注册表操作记录

正版激活的注册项内容

尝试修改SLicense

重新运行软件后,从错误日志中发现调用栈暴露。

渐入佳境

这里关注到了app.asar

通过搜索引擎,尝试解包

 复制代码 隐藏代码
npm install -g asar
asar extract {installRoot}/Typora/resources/app.asar workstation/outs

发现文件被加密

JavaScript不管是字节码还是明文脚本都会在运行时加载,结合模块列表寻找加载点

关注到解包得到的main.node

IDA寻找字符串特征

通过交叉引用定位

看到一些导入函数

由字符串联想到对加密文件进行的base64解码

导入表查找到 napi Node-API | Node.js API 文档 (nodejs.cn)

简单分析伪代码后,其实就是运行

 复制代码 隐藏代码
Buffer.from(e,"base64")

刻舟求剑

尝试Findcrypt寻找算法,找到AES的Sbox和InvBox

通过交叉引用定位到可疑函数点 main.node E440

IDA动态调试,模块加载断点

跑起来,直至加载main.node

分析模块后,定位base offset下断,运行

看到

正好与我们的文件对应偏移16

继续调试能看到 分组加密的形式

同时能够找到前16字节

正是作为iv进行异或

柳暗花明

分析调用函数,最终能够确定其函数功能

通过偏移EF19,能够确定AES轮数为13轮,对应为AES 256

偏移B510处的函数,能够得到AESKey

落叶归根

解密得到明文脚本,授权主逻辑在Lisence.js中

授权逻辑如下图

本地验证->获取用户特征->网络验证授权->返回密文->RSA公钥解密->设备指纹对比

破解的思路,不多做阐述。

修改完成后,只需要按相同格式加密并打包为app.asar即可实现补丁Patch

typoraCracker

typoraCracker是一个Typora解包解密程序,也是一个打包加密程序。你可以轻松的打造独属于你的补丁,但请注意法律上的可行性。

测试

总有一种人,喜欢享受“正版”激活的感觉。而我就是……

我采用 Patch KeyGen

补丁去除网络授权,KeyGen用于本地验证,测试成功

尾声

typora针对electron下的源码加固仍是一片空白。

简单思考后,传统代码混淆的方式对关键逻辑的保护依然有较大的提升空间,不失为一个恰当的加固方向。

期待typora会越做越好——来自一个正版使用者

分享到 :
相关推荐