selph
selph
发布于 2022-10-21 / 286 阅读
0
0

Sublime Text 4 破解分析

仅供学习,不提供破解版程序

Sublime Text 4出来了,船新UI给人感觉很舒服,顺便拿来练练手

破解分析

软件打开之后,标题栏大写的UNREGISTERED

image

每次切换标签页的时候,标题上的内容会变更为当前切换的标签页的名字,相比这个UnRegistered也是在这个时候填充上的

对SetWindowTextW下断点,可以看到很多提示信息,这里可能会填充不同的信息,但默认是走这个循环填充未注册的字样

image

这里分支跳转通过判断dil的值进行,往上找,看看dil的值是从哪来的:

image

dil寄存器是edi寄存器的低8位内容,这里的值是来自r9d,r9寄存器一般作为参数使用,所以这里接着往上找r9d的赋值地方

往上追到上一层函数处,发现了r9的填充:

image

r9来自r14d,接着往上找r14d的来源:

image

往上拖了好一会,发现了r14d的来源,源于edi的值,这里edi的值取决于最上面断点这一行的对比语句

rax的值是00007FF648625048​,貌似是一个固定的值,全局变量

rax+5这个地址则是判断的地方,sete指令则是根据判断结果来设置cl的值,cl的值会赋值给edx = 2*cl,edx传递给edi,然后根据一堆处理之后,一步一步传递给显示标题的函数来设置显示的内容

所以这里判断的根源就是这个rax+5的判断,根据这里的结果,来影响后面的处理

所以修改这里试试:修改这个地址的值为1

image

不再显示未注册了!

这是个全局变量,应该就是用于在全局表示当前程序是否注册的,所以应该只要修改了这里,即可完成对整个软件的注册

然后就是打补丁修改程序了

原语句:

00007FF647D56BC8 | 8078 05 00               | cmp byte ptr ds:[rax+5],0                      | 判断这个全局量是否是0
00007FF647D56BCC | 0F94C1                   | sete cl                                        | 是0,cl设置为1

修改后:

00007FF647D56BC8 | C640 05 01               | mov byte ptr ds:[rax+5],1                      | 判断这个全局量是否是0
00007FF647D56BCC | 48:85C9                  | test rcx,rcx                                   | 是0,cl设置为1

参考资料


评论