Typora 1.9.5 破解
找到原始的
app.asar解包解包有三种方式:
直接将
app.asar拖到 vscode 里打开,这种方式无需 node.js 环境不能重新打包利用 7-zip asar 插件,从 这里 下载插件,放到 7-zip 安装目录下的 Formats 目录里,然后使用 7-zip 打开
app.asar,这种方式无需 node.js 环境并且可以修改 asar 内的文件,推荐使用
安装
node.js环境,使用 asar 工具完成apt install nodejs npm install -g asar asar e ./app.asar ./app.asar.unpacked如果解包时报
main.node打不开的报错,就从 typora 目录里复制一份放到报错中提到的对应位置。
最终可以解出 2 个文件:
atom.js和package.json,atom.js是 AES 加密的 base64 密文,需要对atom.js解密。解密
atom.jsAES 加密需要 KEY 和 IV,
atom.js加密方式是:- KEY 由
main.node提供 - IV 由最终
atom.js长度和文件内容最后一个字节计算得来 - 文件最后一个字节不参与加密
- AES-256-CBC 加密后通过 base64 编码
AES 是对称加密的,如果知道 KEY 和 IV 就按这个思路逆向解密即可。KEY 在
main.node中,在 1.9.5 版本提取出的 KEY 是0d8e841eb83ac8106208f45770bc39b9d8b8ab60b2fb4613284fb497b68b0c6a,原始atom.jsbase64 解码后的总长度为140593,最后 1 个字节0x6a,IV 通过计算得出47a91ac73cfaa5af60e1e1d54301e848。参数都齐了之后,用 CyberChef 解密得到atom.js。- KEY 由
修改
atom.js
重新加密
atom.js修改后先随便写个 IV 加密得到加密后长度
139968,假如加密后的密文向后追加的0xb7,新长度就是139969, 使用这两个值重新计算 IV,得到b820f7c793af30da91e80c12c6b83395,使用 KEY 和新 IV 重新加密atom.js后追加\xb7,加密可以使用openssl命令或 CyberChef:openssl enc -aes-256-cbc -in ./atom.de.js -out atom.js -iv b820f7c793af30da91e80c12c6b83395 -K 0d8e841eb83ac8106208f45770bc39b9d8b8ab60b2fb4613284fb497b68b0c6a printf '\xb7' >> atom.js重新打包
app.asar将
atom.js、main.node、package.json都放到一个目录里,假如是new目录,使用 asar 工具打包:asar pack ./new app.asar --unpack "main.node"覆盖原始
app.asar后,重新启动即可
定位 main.node 中关于 app.asar 解密的位置:
搜索字符串
app.asar,附近有indexOf的位置就是了,在调用完一些 napi 函数后会跳到另外一个函数开始解密,这个函数里% 256的位置基本就是在计算 IV。这里给出 1.9.5 版本的一些关键位置:
sub_180010BF0:app.asar编译sub_180004647:sub_18000B480wrappersub_18000B480:atom.js解密sub_180001992:IV 生成,3个参数分别是接收 IV 的数组,最后一个字节和长度计算得到的伪随机数种子,生成长度sub_1800044DF:AES 解密
IV 计算:
IV 直接调用
main.node的sub_180001992生成。(code snippet)