小墨の博客

梦想需要付诸行动,否则只能是梦

【原创】Typora无限重置方法记录 2022.04

本文使用的Typora版本为1.2.4。安装包大小为 72.1 MB (75,671,128 字节)

同时也使用 0.11.18版本安装包作为对比,经测试,0.11.18, 1.2.4 版本均适用以下方法,不出意外的话应该这附近的版本应该也都可以。

写在最前:本文仅供技术探讨,请支持正版!另外,转载本文请标注原文链接,谢谢。


先说解决方法

  1. 清除 %APPDATA%\Typora 下面的 profile.data 文件(最好 history.data 以及 Local State 也一起删除;0.x版本是 profile.datahistory.dataCookies 这三个文件;Local State 中也记录了一份安装日期,猜测可能是Typora后面留的一手);

  2. 同时删除注册表 计算机\HKEY_CURRENT_USER\Software\Typora 项下的 IDate 字符串(或修改为一个未来时间);

来达到重置使用时间的效果。

%APPDATA% = %USERPROFILE%\AppData\Roming (%USERPROFILE%\AppData 是隐藏文件夹)

根据实测,仅仅删除文件,或仅仅删除/修改注册表项的值都不会生效。

根据实验推测,Typora在启动的时候会校验注册表项,如果跟注册表中的不同,就将注册表中的修改为跟本地相同;如果注册表里面没有此项就跳过。如果本地的这几个文件不存在,那么就根据注册表中的时间和电脑系统当前时间的最小值生成本地的文件。(根据我的相关测试似乎都能满足上面这个推测)


bat批处理脚本

手动实现上面的步骤太麻烦了,虽然说确实可以实现15天手动重置,但是老得手动去操作,多麻烦,于是我写了一个批处理脚本。

如果大家嫌手动重置太麻烦,可以把下面这个bat当作Typora的启动方式。

脚本内容如下。可以在下方下载,或者将下面的文件保存为ASCII编码的bat文件

下载这个BAT批处理文件:retrail-typora.zip

@echo off
echo 接下来将会结束 Typora 进程
pause
echo 下面出现错误信息只要不是权限不够的错,都属于正常现象,请勿担心
echo.

taskkill /im typora.exe /f

:: /f 不提示,强制删除
:: /v IDate 指定要删除的项
REG DELETE "HKEY_CURRENT_USER\Software\Typora" /f /v IDate
REG DELETE "HKEY_CURRENT_USER\Software\Typora" /f /v SLicense

:: version 0.x & version 1.x
del /F /A "%APPDATA%\Typora\profile.data"
del /F /A "%APPDATA%\Typora\history.data"

:: version 0.x
del /F /A "%APPDATA%\Typora\Cookies"

:: version 1.x
del /F /A "%APPDATA%\Typora\Local State"

:: 写回 {"didShowWelcomePanel2":true}
echo 7b2264696453686f7757656c636f6d6550616e656c32223a747275657d > "%APPDATA%\Typora\profile.data"
echo.
echo 完成

:: 等待按一个键继续
:: pause

:: 启动 Typora
start typora

:: 开始的都是注释,最后的 pause 是等待用户按一个键才继续往下执行,最后一行是启动 Typora。大家可以根据自己的需要进行修改。


批处理也太麻烦?(可能是)一劳永逸的方法!

还有一个思路,是基于Typora读取本地时间的。即删除上述三个文件和注册表项,将系统时间调到很远的未来,然后启动Typora,启动后关闭,再将系统时间调回正常时间即可。(原理上可行,测试时是没问题的,具体是否可行还需要等待时间的检验)



接下来,进入正题。


起因

Typora在2021年11月份开启了收费模式,但是旧版本是可以免费使用的,所以我一直使用的是旧版本,周围的朋友来问我也是推荐的旧版本。但是最近,陆续有小伙伴使用的旧版本提示版本已过期,请升级新版。于是,就有了本文。(此处感谢不愿透露姓名的郭枭同学提供了相关的复现场景,以及好几个小时的时间,还有灵感)

image.png

由于在过程中我们没有进行截图保存,下文中的图片都是在虚拟机中进行的复现。


查资料

首先我们查了查资料。网上确实有人提供了一些方法和思路,但是我们经过尝试,目前的最新版本(1.2.4)已经不支持这个方法了。所以我们就想自己研究玩玩儿。毕竟,Typora是使用electron开发的,而electron是开源项目,他对加密的支持似乎不是特别完善,所以,说不定能够找到其中的漏洞。

我们查阅了以下几个资料:

https://www.jianshu.com/p/bb0ddf5fbd5d

https://www.52pojie.cn/thread-1553967-1-1.html

https://www.bilibili.com/read/cv14221375


过程记录

我们首先按照52pojie上面的那篇文章进行了操作,发现...还是不行。52pojie那篇看起来很高级,但是说实话我并没有那么高的造诣,前面还能勉强知道他在做啥子,后面直接就一脸懵逼了。

不过给了我们一个很好的思路,那就是,既然Typora能够离线使用,而且离线使用也能知道试用到期时间,那么Typora一定是存了软件安装日期,或者软件到期日期在系统本地的。只是不知道他是否加密加密存储了这个文件。

那么我们就首先在他的配置目录下面找找看,碰碰运气呗。

根据一番搜索,发现了三个最可疑的文件,也就是文章最开头说的那三个文件。

其中Local State感觉似乎好入手一些,因为它是一个JSON字符串

{"os_crypt":{"encrypted_key":"RFBBUEkBAAAA0Iyd3wEV0RGMegDAT8KX6wEAAADmXpUGARPAT79EIHreqrkYAAAAAAIAAAAAABBmAAAAAQAAIAAAAEk2uufFpZ09eOrQhx6ObQAf4lY4CO3F1HEFMkpQ8niiAAAAAA6AAAAAAgAAIAAAAKEVsbjUI/JuC/cvJrTHKeoWH2fY/ZU0Ap0uhAAK2kONMAAAAKn0KJVGZSB2fzJFR0I0BxGUCjnNdatC8PwWcrAJX1bBYkom2ILheeUanz4JGMaoqkAAAACjMv/HOzZBekN3k3RTBuGhVC2bgJ8yrcOMVvp6PkasdDk4Axs/e4yrOl5qO+RlpuZmh2JNqo+QkA4yb+7YI/PD"}}

而且通过一点点经验,可以看出 encrypted_key 这部分非常像 base64 编码后的文件,于是找了个在线工具尝试解密

image.png

虽然后面全部都是乱码,但是前面的DPAPI似乎在那里很想告诉我们什么(bushi

那我们就根据 DPAPI 搜一下,看他究竟是何方神圣。(有种解谜的感觉了,或者说....这其实就是解谜?)

image.png

嘶!似乎挺高级的一个算法,如果是Windows系统级的话,那可麻烦不止一点。那这可怎么办呢,破解起来似乎不太容易。(也懒得花时间去研究这个加密原理


柳暗花明又一村

就快要放弃的时候,突然想到...解铃还须系铃人。

既然是Typora加密的数据,那么他自己肯定能读出来。所以...我们并不打算研究它是如何解密的(逃==

那其实我只要给捣捣乱,把这文件给他删了,这不就天王老子来了都拿不到密文了?密文拿不到还想破解?嘿嘿嘿

事实证明,确实可刑(行)。


在虚拟机中验证

本文撰写时间为2022年4月14日。软件版本:1.2.4

场景复现

首先,我们先将系统日期调到2020年同月同日,安装后打开一次,关闭软件,以复现Typora安装过期的场景。

image.png

image.png

场景复现成功


查看可疑文件及注册表

Typora刚安装完,第一次启动前,是不存在下面的文件及注册表项的。

%APPDATA%\Typora\

history.data

7b22726563656e74466f6c646572223a5b5d2c22726563656e74446f63756d656e74223a5b5d7d

profile.data

7b2276657273696f6e223a22312e322e34222c22696e697469616c697a655f766572223a22312e302e30222c226c696e655f656e64696e675f63726c66223a747275652c227072654c696e65627265616b4f6e4578706f7274223a747275652c2275756964223a2238356238383738342d626663312d343430632d386465612d306232656436666666373362222c2264696453686f7757656c636f6d6550616e656c32223a747275652c227374726963745f6d6f6465223a747275652c22636f70795f6d61726b646f776e5f62795f64656661756c74223a747275652c226261636b67726f756e64436f6c6f72223a2223464646464646222c2269734461726b4d6f6465223a66616c73652c226c617374436c6f736564426f756e6473223a7b2266756c6c73637265656e223a66616c73652c226d6178696d697a6564223a747275657d7d

Local State

{"os_crypt":{"encrypted_key":"RFBBUEkBAAAA0Iyd3wEV0RGMegDAT8KX6wEAAABwlq7BpQ0VQYR5haivtPFwAAAAAAIAAAAAABBmAAAAAQAAIAAAADwbiHI32yquGcDArs/M/1YvQft/ByFbzSyvGqadaHeXAAAAAA6AAAAAAgAAIAAAAIxNrjpKRtFyElU9zh7rqoGEWvMZAx/gG/xU4KU/grQSMAAAAI/QINmsk2lXyEylMZ1Hkun0ziGsj86SEfBSWLowTtiYmSPNID+x72MLb0ncSquN6kAAAACUKtrJL+l8pDECh6Lah76uMwvICrMwPksydf7JgdP2EjKhsgghwjua4gyz52v2ujtrXAwM+YqR5Xy+RvbAzJxh"}}

注册表项

image.png

根据虚拟机快照多次尝试,发现如果

第一次启动时,存在IDate值(大于系统时间),会根据系统时间修改IDate值,删除IDate字段后重开Typora不会自动创建,但是依然提示0天到期。此时删除porfile.data后,变为15天到期。

当启动后,如果不存在IDate值,则会读取profile.data里面的值,如果profile.data也不存在,则会读Local State的值。如果三个都不存在,那么就重新开始试用。


这不就明白了吗,相信屏幕前聪明的你应该知道怎么无限使用了叭(嘘!小点声!


后续

这就完了?那必然没有!

难道你们不想知道 profile.data 和 history.data 文件中的内容是什么吗?

这哪能不好奇?

profile.data 和 history.data 文件解译

在一次删掉三个文件和注册表之后,打开Typora,重置了试用时间。好奇地打开了 history.data 里面的数据,只有4个字符 7b7d 静静的躺在那儿

等等?4个字符?如果是JSON空数组加密的话,那应该是 7b 对应 { ,7d 对应 }

这个时候打开百度,用百度搜搜 {} 试试(不一定是百度,其他的搜索引擎都行)

image.png

嘶!这不来了嘛,这就是简单的字符串转义吗?直接浏览器F12也能搞

image.png

但是那么长难道要一个一个手动添加 % 然后复制到浏览器控制台解密?太麻烦了!

写了个Python脚本

str = input()
output = ""
for i in range(0, len(str)):
    if i % 2 == 0:
        output += "%"
    output += str[i]
print(output)

# 转为 JSON
from urllib import parse
json_str = parse.unquote(output)
print(json_str)

# JSON 美化输出
import json
print(json.dumps(json.loads(json_str), indent=4, sort_keys=True))

input("按回车退出")


使用方法:把上面的代码保存到一个 .py 的文件中,然后用Python执行。

输入那一串字符,回车,接下来的三部分输出分别是每两个字符前添加 % ,解析为JSON字符串以及JSON字符串美化输出。下图中使用红线分割了用户输入,以及三部分输出。

image.png

上面这个是我解析的我一直用的Typora的.data文件,安装之后第一次打开的内容如下:

0.11.18版本

profile.data

{
    "backgroundColor": "#FFFFFF",
    "copy_markdown_by_default": true,
    "didShowWelcomePanel": true,
    "initialize_ver": "0.11.18",
    "isDarkMode": false,
    "line_ending_crlf": true,
    "preLinebreakOnExport": true,
    "strict_mode": true,
    "uuid": "41ed6072-0ed0-461a-8e33-5b82b7098a57"
}

history.data

{}


1.2.4版本

profile.data

{
    "backgroundColor": "#FFFFFF",
    "copy_markdown_by_default": true,
    "didShowWelcomePanel2": true,
    "initialize_ver": "1.0.0",
    "isDarkMode": false,
    "lastClosedBounds": {
        "fullscreen": false,
        "height": 701,
        "maximized": false,
        "width": 801,
        "x": 107,
        "y": 254
    },
    "line_ending_crlf": true,
    "preLinebreakOnExport": true,
    "strict_mode": true,
    "uuid": "d81cd17c-8a6a-4195-bb00-1cbf832d9790",
    "version": "1.2.4"
}

history.data

{
    "recentDocument": [],
    "recentFolder": []
}


leveldb

尝试读取 %APPDATA%\Typora\Local Storage\leveldb 这个文件,但是似乎读出来没太大用处。这里也贴出来给大家看看,看看大家有没有知道这个信息有什么用的

使用的工具GitHub: https://github.com/jemygraw/leveldb

leveldb_windows_amd64.exe -export "%APPDATA%\Typora\Local Storage\leveldb" >> leveldb.txt

我这里读出来是这样的

META:file://	軓莽缅?v
VERSION	1
_file:// aws.cognito.identity-id.us-west-2:146e5a95-002f-46c1-b09e-05b32fc3280b	us-west-2:a66cc307-f3ea-4eaa-8e1e-18d2197ef144

感觉跟AWS有关,搜了一下确实有关

这个是amazon官方文档:https://docs.aws.amazon.com/zh_cn/cognito/latest/developerguide/what-is-amazon-cognito.html

猜测跟用户购买软件授权后身份认证相关的逻辑有关,因为跟本文的主题其实没有太大的关系,所以这里就没有深入研究。


似乎...0.11.18版本也是试用

似乎...0.11.18版本也是试用15天。不过从软件界面上来可能没有显示,所以我们安装上用15天是毫无察觉的,然后15天之后就出现

This beta version of Typora is expired, please download and install a newer version.

这个可以从他打印的日志里面看出👇

NFOQ5_[44L6DSSWOM3)~B4J.png


张小弟之家

本文链接:
文章标题:

本站文章除注明转载/出处外,均为原创,若要转载请务必注明出处。转载后请将转载链接通过邮件告知我站,谢谢合作。本站邮箱:admin@only4.work

尊重他人劳动成果,共创和谐网络环境。点击版权声明查看本站相关条款。

    发表评论:

    搜索
    本文二维码
    标签列表
    站点信息
    • 文章总数:512
    • 页面总数:20
    • 分类总数:92
    • 标签总数:208
    • 评论总数:62
    • 浏览总数:235404

    | | |
    | |  Z-Blog PHP