吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14744|回复: 90
收起左侧

[原创] Typora 1.x 加密密钥

  [复制链接]
Thomas717 发表于 2021-11-28 14:00
Typora 1.x版本开始收费了,多年以来我一直认为这个翻译都是社区支持的软件应该是开源软件。

asar unpack之后,文件被加密了,base64解码后去掉前16字节就是密文,密钥如下:

算法:AES-256 CBC模式
密钥:4EE1B382949A024B802F52B4B4FE57F1BEF40853109256E2C20DECA3DD8DD56D
IV:文件前16字节

可以使用openssl解密文件:
[Bash shell] 纯文本查看 复制代码
1
openssl enc  -aes-256-cbc -d -in enc.bin -out dec.js -iv xxxxxxxxxx -K 4EE1B382949A024B802F52B4B4FE57F1BEF40853109256E2C20DECA3DD8DD56D


最近超级忙,遇到了顺手做了一下分析,欢迎大家继续研究。

免费评分

参与人数 20吾爱币 +30 热心值 +20 收起 理由
bjznhxy + 1 + 1 谢谢@Thanks!
yzhiren + 1 + 1 我很赞同!
rig + 1 + 1 谢谢@Thanks!
Hmily + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Airey + 1 + 1 我就知道吾友最强了
kuaile365 + 1 + 1 谢谢@Thanks!
OYyunshen + 1 + 1 谢谢@Thanks!
addhone + 1 + 1 我很赞同!
十一七 + 1 pack with unpack: https://github.com/Mas0nShi/typoraCracker
889_ + 1 + 1 我很赞同!
zjytrhy + 1 + 1 谢谢@Thanks!
风绕柳絮轻敲雪 + 2 + 1 我很赞同!
夜泉 + 1 + 1 https://www.52pojie.cn/thread-1553371-1-1.html
笙若 + 1 + 1 谢谢@Thanks!
SunsetShimmer + 1 + 1 用心讨论,共获提升!
arryboom + 2 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Zxis + 1 + 1 用心讨论,共获提升!
xiahhhr + 1 + 1 谢谢@Thanks!
冰雪堂主 + 1 + 1 我很赞同!
涛之雨 + 4 + 1 强啊,我只找到了开源库,然后dump到了js

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

iokeyz 发表于 2021-11-29 23:37
太强了,感谢楼主分享!
一个一个的调用 openssl 解密太麻烦了,写了个 python 脚本,放在目录里执行自动解密
[Python] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import os
from base64 import b64decode
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
 
 
def dec(filename):
    with open(filename, 'rb') as file:
        fileb = b64decode(file.read())
        iv = fileb[:16]
        key = bytes.fromhex('4EE1B382949A024B802F52B4B4FE57F1BEF40853109256E2C20DECA3DD8DD56D')
        cipher = Cipher(algorithms.AES(key), modes.CBC(iv))
        decryptor = cipher.decryptor()
        filed = decryptor.update(fileb[16:]) + decryptor.finalize()
        dest = open(filename+'-dec.js', 'wb')
        unpadder = padding.PKCS7(128).unpadder()
        data = unpadder.update(filed) + unpadder.finalize()
        dest.write(data)
        dest.close()
 
 
point = os.walk('.')
for pwd, dirl, filel in point:
    for filename in filel:
        if filename.endswith('js'):
            dec(filename)
Ursule 发表于 2021-11-30 15:37
改无限试用,去除弹窗,License.js

  • 修改 License.js 试用期时间的相关代码

    • getTrailRemains = (e, n) => {
      n = n || 15;
      var t = Math.floor((new Date - installDate) / 864e5),
          i = Math.max(0, n - t);
      return e && (i > n || isNaN(i)) && (i = n), i
      }, validateTrail = async () => {
      var e = (installDate = getInstallDate(!global.devVersion)) ? getTrailRemains(!1) : 100;
      (e > 15 || isNaN(e)) && (console.log("[validateTrail] Read from incorrupted InstallDate"), await writeInstallDate(!0), e = 15), console.log(`[validateTrail] installDate is ${installDate.toLocaleDateString("en-US")}, trail remains: ${e} days`)
      };
    • getTrailRemains = (e, n) => {
      n = n || 15;
      var t = Math.floor((1000) / 864e5),
          i = Math.max(0, n - t);
      return e && (i > n || isNaN(i)) && (i = n), i
      }, validateTrail = async () => {
      var e = (installDate = getInstallDate(!global.devVersion)) ? getTrailRemains(!1) : 100;
      (e > 15 || isNaN(e)) && (console.log("[validateTrail] Read from incorrupted InstallDate"), await writeInstallDate(!0), e = 15), console.log(`[validateTrail] installDate is ${installDate.toLocaleDateString("en-US")}, trail remains: ${e} days`)
      };
  • 修改试用期弹窗

    • showLicensePanelIfNeeded = function() {
          shouldShowNoLicenseHint(!0) && !app.setting.inFirstShow && (isLinux && Math.random() < .95 || (!lastShown || new Date - lastShown > 36e5 * (isLinux ? 4 : 2) || getTrailRemains(!0, 20) <= 0) && showLicensePanel())
      };
    • showLicensePanelIfNeeded = function() {
          1! && !app.setting.inFirstShow && (isLinux && Math.random() < .95 || (!lastShown || new Date - lastShown > 36e5 * (isLinux ? 4 : 2) || getTrailRemains(!0, 20) <= 0))
      };

点评

无限试用不需要修改JS,只需要重置一下注册表就行了。  详情 回复 发表于 2021-11-30 22:16
夜泉 发表于 2021-11-30 04:40
本帖最后由 FleTime 于 2021-11-30 09:14 编辑
iokeyz 发表于 2021-11-29 23:37
太强了,感谢楼主分享!
一个一个的调用 openssl 解密太麻烦了,写了个 python 脚本,放在目录里执行自动 ...

只需要解密 License.js 就可以了。。。

删除
侠骨留香喵 发表于 2021-11-29 16:44
涛之雨 发表于 2021-11-29 16:13
是不是有什么特殊的操作,我咋没尝试成功啊。。。
[mw_shl_code=asm,true]bad decrypt
428 ...

根据大佬们的说明,操作了下。版本1.0.2,asar unpack之后,base64解码后去掉前16字节就是密文。
比如 License.js 这个文件,先对文件进行base64解码,将解码后的文件存储为enc.bin,然后取enc.bin的前16字节作为IV,把enc.bin的前十六字节删掉保存下,然后去用openssl解密。
openssl enc -aes-256-cbc -d -in enc.bin -out dec.js -iv C5FB9AB8FF74A684417F9A00153F3B0C -K 4EE1B382949A024B802F52B4B4FE57F1BEF40853109256E2C20DECA3DD8DD56D
IV 是 C5FB9AB8FF74A684417F9A00153F3B0C ,解密是可以得到 js 文件的。
 楼主| Thomas717 发表于 2021-11-29 18:36
涛之雨 发表于 2021-11-29 09:06
强啊,我只找到了开源库,然后dump到了js
开源库:https://github.com/toyobayashi/electron-asar-encrypt ...

看了一下好像就是这个库,这个密钥就是js加密用的密钥了,测试已经可以解密出源码了。
这个可以对control flow做启发式分析,自动dump出key的,特征非常非常明显。
版主大大如果习惯写Electron,有时间的话要不用这个密钥重写打包一个给大伙用呗哈哈哈哈。
Hack3rHan 发表于 2021-11-29 09:35
Vvvvvoid 发表于 2021-11-29 09:23
尴尬了, 寻求 MarkDown 跨平台替代品

开源跨平台替代品,Mark Text
clanna 发表于 2021-11-29 14:28
好家伙, 刚收费, 就开始了, 不愧是吾爱
涛之雨 发表于 2021-11-29 09:46
云烟成雨 发表于 2021-11-29 09:34
这个密钥是干嘛用的,有了这个密钥还不能注册吧,期待大佬继续努力

就可以解密出js,然后自己改
其实最理想的状态是dll注入,包更新那种
涛之雨 发表于 2021-11-29 09:06
本帖最后由 涛之雨 于 2021-11-29 09:13 编辑

强啊,我只找到了开源库,然后dump到了js
开源库:https://github.com/toyobayashi/electron-asar-encrypt-demo
其实我一直想找一个通用爆破点,
比如植入js或者劫持js等等,反正就是不需要更新重新解包了。。。
不然多麻烦啊
(俗称通用破解补丁)
神幻静 发表于 2021-11-29 09:18
居然还收费了,还好我一直没更新过。。。。
Vvvvvoid 发表于 2021-11-29 09:23
尴尬了, 寻求 MarkDown 跨平台替代品
kotlyne 发表于 2021-11-29 09:25
不更新还能用,哈哈
云烟成雨 发表于 2021-11-29 09:34
这个密钥是干嘛用的,有了这个密钥还不能注册吧,期待大佬继续努力

点评

就可以解密出js,然后自己改 其实最理想的状态是dll注入,包更新那种  详情 回复 发表于 2021-11-29 09:46
Andy6ro 发表于 2021-11-29 09:50
感谢分享~
云烟成雨 发表于 2021-11-29 09:58
涛之雨 发表于 2021-11-29 09:46
就可以解密出js,然后自己改
其实最理想的状态是dll注入,包更新那种

哦豁,不过我觉得现在1.0版本刚出,跟之前的免费版本也没多少变化,我还是直接用以前免费版本算了,等他更新多了再看看
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-4-22 05:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表