0x00 前言

文章首发与Freebuf:https://www.freebuf.com/sectool/279133.html

今天给大家带来的是Sublime Text 4 4107的学习版

0x01 思路

先说以下整体的思路,在sublime text中输入激活码的地方,瞎几把输点东西,然后看提示,根据提示的内容,丢到ida里面找到对应的地方,然后修改汇编,让sublime text 强行跳转到激活成功的逻辑上

一句话,就是暴力破解

0x02 定位

Help->Enter License,随便输入激活码

得到关键字That license key doesn't appear to be valid.

接下来是找到sublime text,如下:

把它复制出来,放到一个空文件夹下,然后用ida打开它

等待ida自动分析完成,如下图的提示:

打开字符串窗口,View->Open subviews->Strings(或者使用快捷键Shift+F12

搜索(快捷键Control+F)刚刚的关键字That license key doesn't appear to be valid.,然后双击

然后不断按下x快捷键,查找其xref(引用),发现show_invaild_key函数引用了它

继续看看,谁调用了show_invaild_key函数

至此,我们通过关键字That license key doesn't appear to be valid.找到了show_invaild_key函数,并找到了调用show_invaild_key函数的地方

0x03 分析

接下来我们分析一下附近的地方

很明显,这几个都是提示key有问题的

因此我们往上找找,看看有没有提示成功的地方,然后网上找到了第一个分支

沿着可能是key有效的分支往下找找,果然找了一个show_thanksPv的提示

双击进去,发现它提示Thanks for purchasing!,谢谢购买,很明显,这个就是key有效的提醒了。按Esc回到上一层。

因此,这个函数里面,大体如下:

现在我们回到刚刚的那个成功和失败的分支,看看要怎么才能让它跳转到成功的分支那里

可以看到,跳转是用jz,上面还有个test,我们简单复习一下相关的考点

test eax, eax
jz somewhere

;如果eax为零->设置ZF零标志为1->jz跳转

因此,要想程序跳转到“谢谢购买”的提醒,必须要让eax为0,而eax是存放函数返回值的,所以,只要上面的那个call函数里面,赋值eax为0即可

0x04 patch

双击call 后面的函数

在第一行代码(程序段)push rbp右键->Keypatch->Patcher,改成如下:

mov eax,0x0
retn

最终效果如下:

生成文件

patch完成之后,就是使得patch生效了,生成对应的破解文件,如下:

替换刚刚生成的文件即可完成破解

激活

还有最后一步,激活。Help->Enter License,输入以下激活码(我从网上随便找的)

----- BEGIN LICENSE -----
Member J2TeaM
Single User License
EA7E-1011316
D7DA350E 1B8B0760 972F8B60 F3E64036
B9B4E234 F356F38F 0AD1E3B7 0E9C5FAD
FA0A2ABE 25F65BD8 D51458E5 3923CE80
87428428 79079A01 AA69F319 A1AF29A4
A684C2DC 0B1583D4 19CBD290 217618CD
5653E0A0 BACE3948 BB2EE45E 422D2C87
DD9AF44B 99C49590 D2DBDEE1 75860FD2
8C8BB2AD B2ECE5A4 EFC08AF2 25A9B864
------ END LICENSE ------

我们最后再查看一下关于,Sublime Text -> About Sublime Text

最后修改:2021 年 07 月 22 日 10 : 02 AM
如果觉得我的文章对你有用,请随意赞赏