Sublime Text 3143 Win32版本破解后续——排除暗桩与完美注册

本文是对上一篇记录《Sublime Text 3143 Win32版本暴力破解过程》的补充之一。

整个破解工作到目前为止,似乎一切都很顺利,随便输入一个序列号就能完成注册了。然而今早起床刷牙时猛然想起一个细节:Sublime的作者在3126版本中就已经有了对注册函数进行验证的环节,故意传入了一个全0的参数,此时作为异常情况,注册函数应该返回代表注册失败的值,当初我们第一次破解3126版本的时候就因为没发现这点而折戟沉沙。

排查遇坑

一个本就在不断对抗破解,手段越来越恶劣、套路越来越猥琐的作者,会在新版本放弃这种方式吗?我不相信这种奇迹会发生。于是在IDA中找到注册函数:0x0044FA0E,Ctrl+X查找交叉引用,可以看到如下地方调用了该函数:

后记1-交叉引用

一共五处调用,先看第一处:

后记2-IDA看到的异常

嗨呀,看到上面一串全0字符串顿时有种不妙的感觉,吓得我赶紧打开了OD。在目标位置下断后运行程序:注册函数两次被断下,第一次传入了我们之前输入的key,而第二次,就来到了这里:

4-1.第二次命中

ecx中传入的是一个字符串对象,其中第一个字段即为字符串指针:

4-1-2.第二次命中时的ecx值

来看看是何方神圣:

4-1-3.第二次命中时传入的字符串

哇,社会是真的险恶。这种验证码就算是闭着眼睛也知道是有问题的。调用注册码校验函数完成后,果不其然,作者开始将返回值和1匹配(在Sublime 3143版本中,注册函数返回1表示注册成功),果然城里人套路深啊!

作者的套路1

接着分析,如果我们不问青红皂白地将注册函数修改为无论合适都返回注册成功,那就中了作者的套路了,下面这段代码就会执行:

.text:00426DAE 6A 0C          push    0Ch             ; size_t
.text:00426DB0 E8 6E DF 2F 00 call    ??2@YAPAXI@Z    ; 对象大小为12
.text:00426DB5 8B 4D 6C       mov     ecx, [ebp+6Ch]  ; ecx指向全局注册结构
.text:00426DB8 C7 04 24 00 53+mov     [esp+0FCh+var_FC], 75300h
.text:00426DBF 50             push    eax
.text:00426DC0 89 48 08       mov     [eax+8], ecx    ; 新对象第三个成员为全局对象大小
.text:00426DC3 B9 04 31 8A 00 mov     ecx, offset dword_8A3104
.text:00426DC8 89 45 60       mov     [ebp+6
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值