[Linux/Windows]Typora 理论多版本兼容破解方案

查看 132|回复 12
作者:hlrlqy   
Typora 破解思路
互联网上公开的破解手段中,大多数都是采用对 Typora 加密的核心JS进行修改或Patch二进制实现绕过授权的,但这无疑会出现以下几种问题
  • 针对单个版本,无法做到通用补丁
  • 由于AES代码在 main.node 中,无法通用的hook密匙,需要手动获取AES密匙解密文件
  • 侵入性大,由于核心js长度硬编码在main.node中,调试与修改需要操作二进制程序

    针对以上几个痛点整理出以下几个需求
  • 尽量实现全版本兼容,且无需修改二进制程序以保证多平台可用
  • 能够优雅的处理激活过程,最好像正版一样使用
  • 无需修改入口及使用补丁,保证更新版本只需要 one click 激活

    俗话说,打蛇打七寸,去跟作者防护的JS做对抗如同撞豆腐也要找块冻豆腐,如何能四两拨千斤的点破罩门呢?
    针对传统软件的破解,我们常采用抓包/山寨服务器的方式修改验证包实现,但在逆向过程中发现Typora使用了非对称算法解密数据,导致不修改核心js就无法做到山寨数据,那么这条路就行不通了。
    真的行不通吗?
    在分析的过程中注意到Typora使用nodejs自带的crypto.publicDecrypt()
    是否可以hook nodejs 相关实现来修改数据呢?
    当然是可以的,Nodejs 本身是开源的,查看源码了解到算法最终实现是C++语言,分析二进制程序就能找到对应的实现位置进行hook,但这明显的违背了我们的“二进制无关”需求
    有没有什么其他办法对该函数进行hook呢
    进一步的来说,Nodejs 运行的 ECMAScript 本身就存在 hook 能力,若使用js对typora使用的API进行hook便可以满足二进制无关的需求,以此来以点破面。
    那么如何使用JS进行hook呢?首先需要一个能够让我们注入JS的方式,大有如下两种思路
  • 针对Nodejs的运行环境,注入并调用Node执行JS的函数插入我们的JS
  • 针对未加密的node_modules,将代码插入库的明文代码中

    显然就目前来讲第二种方式是比较省心的,但向node_modules的库中插入hook代码需要考虑几个问题
  • 被插入库的加载时机,加载晚于核心JS无法hook
  • HOOK方式

    经过对核心JS的分析,发现raven这个库会在较早的时机被加载,所以可以将代码插入到该库的index.js
    而HOOK方式经过尝试采用了对Modules原型重写,拦截require的方式HOOK Typora使用的库对象并进行修改
    明确以上两点后编写hook代码即可完成破解工作。


    image-20221109183115299.png (36.37 KB, 下载次数: 0)
    下载附件
    2022-11-9 19:00 上传

    在Typora require Crypto及electron-fetch 库的时候返回经过修改的对象
    修改后的electron-fetch对象根据请求链接返回mock的有效License结果


    image-20221109183322462.png (38.87 KB, 下载次数: 0)
    下载附件
    2022-11-9 19:00 上传

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


    image-20221109183344767.png (52.53 KB, 下载次数: 0)
    下载附件
    2022-11-9 19:00 上传

    至此通过JS hook的方式实现了对验证流程的劫持,只要在输入激活码的地方输入能够满足typora本地判断的激活码即可进入网络验证流程并被hook代码返回正确的验证数据。
    插入hook js后重打包asar即可完成破解,使用代码生成的激活码进行激活。
    该方式只要验证逻辑不修改并存在注入点便持续可用,理论多版本兼容。
    自动注入工具代码地址:https://github.com/DiamondHunters/NodeInject
    破解验证脚本地址:https://github.com/DiamondHunters/NodeInject_Hook_example
    使用方式:
    [ol]
  • 下载自动注入工具,用破解脚本替换注入工具中的hooklog.log
  • 构建自动注入工具,放在typora下运行
  • 构建并运行破解验证脚本下的license_gen程序获得激活码
  • 打开Typora,设置使用国内服务器(网络问题,非必须,不开启可能第一次激活失败后会弹出询问是否开启)后填写邮箱(任意)与生成的激活码
  • 激活成功(windows/ubuntu最新版本测试成功)
    [/ol]
    如果在构建中遇到困难可以在验证脚本的Action中找到预先构建版本
    [color=]仅供测试使用请支持正版软件,测试中产生的后果自行承担

    代码, 方式

  • smilencetion   


    sspg62 发表于 2022-11-10 10:08
    升完级后 发现不会用, 有没江湖救急的! 有CP最好,没有出个详细点的,小白看起来真的很懵逼

    你电脑上有rust编译环境吗?有的话去楼主那两个开源仓库clone下来,项目上有详细说明,编译就行了
    xyz349925756   

    还是不能太说明白了,不然会被DMCA,而且也不是很贵,有能力的还是支持下作者.
    smilencetion   


    sspg62 发表于 2022-11-10 10:20
    ACTION 那个? 我怎么进入就是找不到下载啊。 大佬指导下小白吧

    action已经删除
    十一七   

    温馨提示:Mac端Typora采用Webkit开发
    参见:https://theme.typora.io/doc/Write-Custom-Theme/
    > Typora is created upon Webkit (on macOS) or Chromium (on Windows/Linux), so please use css properties supported by Chrome or Safari (aka Webkit).
    hlrlqy
    OP
      


    十一七 发表于 2022-11-9 19:16
    温馨提示:Mac端Typora采用Webkit开发
    参见:https://theme.typora.io/doc/Write-Custom-Theme/

    好的。受限于设备支持,没有看过mac版,我下一个mac包看一看
    se34218   

    这个可以哦,可以用高版本了
    Wesen   

    真是一山更比一山高,楼主思路针不错
    hlrlqy
    OP
      

    居然是暴走漫画的头像,他们已经凉了好久了
    RAIPing   


    侃遍天下无二人 发表于 2022-11-9 20:11
    居然是暴走漫画的头像,他们已经凉了好久了

    哈哈注册的时候使用的,没有更换过
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部