Typora 授权解密与剖析

查看 327|回复 18
作者:十一七   
11月23日,Typora 正式发布 1.0 版本,进入了收费时代。
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会越做越好——来自一个正版使用者

    下载次数, 下载附件

  • 十一七
    OP
      

    typoraCracker 因DMCA关闭,不再提供任何支持。
    Airey   

    看完确实是清楚了密钥怎么来的,
    有空尝试一下,
    不过还是想找个通用hook点,
    类似于DLL劫持那样,
    不修改文件的情况下实现crack
    tinyDust   

    我从github上搜索打不开后,在gitee上找到了这个,不清楚是不是楼主建的,https://gitee.com/suyin-long/typora-cracker/releases
    使用方法:(自己安装了1.3.8,激活成功了)
    1. 官网下载安装包,并安装
    2. 从上面链接下载安装包版本对应的破解文件
    3.将破解文件中crack文件夹下的文件拷贝到安装目录,下次启动typora时自动激活成功。
    smilencetion   


    cyantea 发表于 2021-12-2 15:37
    @91#,我按步骤操作的,也替换了文件,也生成了key,提示序列号不正确。

    有替换License.js这个文件吗?这个需要替换
    这一步以后
    python typora.py {installRoot}/Typora/resources/app.asar workstation/outfile/
    需要你把typoraCracker\example\patch下的License.js替换刚才生成的在dec_app里面的License.js,然后再进行下面这步python typora.py -u workstation/outfile/dec_app workstation/outappasar
    xll816   

    E:\typora.png
    pandola   

    https://cn-sec.com/archives/970900.html   typora 1.2.5版本做好的。
    YeahJack   

    楼主您好,我这里运行报错,您可以看看吗,这是log
    2022-06-24 09:46:22.609 | WARNING  | __main__:_mkdir:30 - May FolderExists: .\outfile\tmp_app
    2022-06-24 09:46:22.611 | INFO     | __main__:extractWdec:56 - extract asar file: C:\Program Files\Typora\resources\app.asar
    2022-06-24 09:46:22.617 | SUCCESS  | __main__:extractWdec:59 - extract ended.
    2022-06-24 09:46:22.619 | INFO     | __main__:extractWdec:61 - read Directory: .\outfile\tmp_app
    2022-06-24 09:46:22.621 | WARNING  | __main__:_mkdir:30 - May FolderExists: .\outfile\dec_app
    2022-06-24 09:46:22.622 | INFO     | __main__:extractWdec:66 - set Directory: .\outfile\dec_app
    2022-06-24 09:46:22.624 | INFO     | __main__:extractWdec:73 - open file: atom.js
    Traceback (most recent call last):
      File ".\typora.py", line 151, in
        main()
      File ".\typora.py", line 146, in main
        args.mode(args.asarPath, args.dirPath, args.format)
      File ".\typora.py", line 76, in extractWdec
        scode = decScript(scode, prettify)
      File ".\typora.py", line 41, in decScript
        code = unpad(ins.decrypt(cipherText), 16, 'pkcs7')
      File "c:\programdata\anaconda\lib\site-packages\Crypto\Cipher\_mode_cbc.py", line 246, in decrypt
        raise ValueError("Data must be padded to %d byte boundary in CBC mode" % self.block_size)
    ValueError: Data must be padded to 16 byte boundary in CBC mode
    weefun92   

    真大佬,看的酣畅淋漓,痛快(可惜我不会~
    更新-----
    按照教程重新打包并替换后,用生成的key激活时提是需要联网,是哪里除了问题吗?求教~


    typora.png (38.66 KB, 下载次数: 1)
    下载附件
    2021-12-1 21:40 上传

    再更-----
    根据 @smilencetion 同学提示:
    https://www.52pojie.cn/forum.php ... 553967&pid=40881603,需要替换一下 License.js,然后再重新打包,替换即可。
    已经成功上车{:1_918:}
    cyantea   

    @91#,我按步骤操作的,也替换了文件,也生成了key,提示序列号不正确。
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部