Typora破解复现

写这玩意的唯一原因是新生赛宣讲要演示破解这玩意(

  • Typora 1.2.5

reference: 看雪👴的分析

先看看直接打开是什么样子

分析

看一下resources文件夹

.asar是electron写的玩意,以前做题遇见过,印象深刻,反编译看不出什么东西,应该是加密了。但可以确定Typora是用nodejs在electron框架下开发的了。

动调一下,x64附加进程,发现了这些玩意

上面的应该是主进程创建的子进程啥的,没参数的是主进程,我们直接附加他

在查看调用模块的时候发现了两个很神奇的玩意:main.node和reg.node,他们就像dll一样被加载了

扔进die看看

好嘛,VS2017编译的64位dll,reg.node也是个dll,但是这俩后缀不一样的dll应该是个重点的东西(毕竟一个叫main一个叫reg)

现在我们知道,代码(app.asar)是经过加密的,而且electron框架极难修改,那依据我有限的ctf经验,应该会加载一个其他的玩意来解密代码,这里最可能加载的也就是main.node和reg.node了

试试看反编译main.node,直接用findcrypt

找到了AES

然后我们查字符串,尝试找有没有调用app.asar,发现真的找得到,然后直接看他在的函数

napi开头的是node api,不知道的函数可以在官方文档里查

这里面的sub_180003E40看起来还调用了base64对buffer加密

并且下面看起来就是AES加密部分

最简单的猜测,就是AES加密了我们想要的代码。我们对这个函数分析一下,后面的napi_call_function中argc = 2, argv是v27 = *(a3 + 8),

然后就该开始愉快的动调了,用x64dbg,记得隐藏调试器来过反调试

打个dll断点,就下在main.node

在entry point停下,然后去ida看看偏移

674A

下断点跑到这,看看传参

r8就是ida中的a3,跟着看一下a3 + 8以及他保存的两个argv

能见到第一个参数是一个密文一样的东西,感觉这个函数(3E40)确实是对代码加密的部分

我们退到上一级函数

v28承接了3E40,并且在后续的napi_call_function作为argv传参,猜想v28里面有解密后的代码

x64dbg上动调,和刚刚找v27一个流程,但是v28这次是第五个参数(rsp + 20)

把这些数据dump下来

而且可以搜索到许多license相关数据

破解

数据倒是拿到了,但是我完全不知道node js相关的玩意,而且我也没搞过破解,只能跟着看雪的👴做了

为了应付宣讲,先搞定破解,原理先放放(学完hook之类的玩意后一定认真看(确信))

最后的shellcode

49 81 F8 39 ED 01 00 0F 85 05 01 00 00 49 81 FE
39 ED 01 00 0F 85 F8 00 00 00 50 53 51 52 55 54
56 57 41 50 41 51 41 52 41 53 41 54 41 55 41 56
41 57 C6 45 C0 40 C6 45 C8 41 E9 D9 00 00 00 4C
8B D2 48 8B CA 5A FC 80 3A 00 4C 8B C9 75 08 48
8B C1 E9 BB 00 00 00 80 39 00 74 31 4C 8B C1 4C
2B C2 48 8B C2 0F B6 08 84 C9 74 23 41 38 0C 00
75 0A 48 FF C0 41 80 3C 00 00 75 E9 80 38 00 74
0E 49 FF C1 49 FF C0 41 80 39 00 75 D5 33 C0 49
8B C1 48 83 F8 00 74 7A 48 8B F0 48 8D 76 1A 4C
8B FE 4C 8B DE 4D 2B DA 49 C7 C4 39 ED 01 00 4D
2B E3 49 8B C4 48 99 49 C7 C5 08 00 00 00 41 F7
F5 48 8B C8 48 AD 4C 8D 76 FF 48 8B D0 48 AD 49
89 16 49 83 C6 08 48 8B D0 FF C9 75 F0 66 41 89
06 41 C7 07 73 3D 74 72 66 41 C7 47 04 75 65 41
C6 47 06 3B 41 5F 41 5E 41 5D 41 5C 41 5B 41 5A
41 59 41 58 5F 5E 5C 5D 5A 59 5B 58 4C 8B 45 C0
EB 00 FF 25 15 00 00 00 E8 22 FF FF FF 63 6F 6E
73 74 20 51 3D 00 00 00 00 00 00 00 00 A0 B7 6F
42 01 00 00 00

然后在010 editor里打开Typora,关闭随机基址

NT_HEADERS -> OPTIONAL_HEADER -> DLL_CHARACTERISTICS -> DYNAMIC_BASE,改成0就行

然后找到一段空的text段位置来放shellcode,71B4A50挺好

FOA是71B4A50,得转成RVA

然后到导出函数的地址0x8602FC5(FOA)把他改成shellcode的RVA,小端序写入

然后把shellcode放在0x71B4A50,保存即可

然后就可以了

(虽然最新版1.4.7不能直接用了,但是唬唬新生么应该够了。。。

posted @ 2022-10-02 20:38  iPlayForSG  阅读(346)  评论(0编辑  收藏  举报