另类方法攻破程序壁垒---充分利用程序验证的漏洞
作者:cntrump
工具:VB Decompiler Lite, OllyDbg
由于正在学习软件汉化相关的知识,遇到了需要汉化非标准资源的情况,于是在网上一搜,就找到了汉化新世纪网站,下载了xxplus,该软件使用VB编译.该程序虽然已经停止更新了,但是功能依然够用,目前依然是汉化非标的首选辅助工具之一.
安装后先看程序说明,如果不注册,将会有好几个功能不能使用.对于这种情况,一般有两种解决方案,一是制作出注册机一劳永逸,二是通过爆破解除程序的功能限制.
试用注册一下程序,提示需要重启来验证注册码正确性,这种情况的话,要么是真的重启验证,要么是程序虚晃一枪,用来代替注册错误提示的障眼法.为了验证是哪一种情况,我们用VB Decompiler载入程序进行辅助分析,找到注册按钮处理事件的伪代码如下:
Private Sub OK_Click() '430C40
…略去无关代码
…
loc_00430D76: mov var_6C, 0040E474h ; "Plase input user name!"
…
loc_00430D9B: call [00401120h] ; MsgBox(arg_1, arg_2, arg_3, arg_4, arg_5)
…
loc_00430DB3: call [00401070h] ; RegSetValueEx(%x1, %x2, %x3, %x4, %x5, %x6, %x7)
…中间略去了很多代码
loc_00430E16: mov var_6C, 0040E4D8h ; "To check the register code, you need restart this software."
loc_00430E1D: mov var_74, 00000008h
loc_00430E24: call [0040130Ch] ; RegSetValueEx(%x1, %x2, %x3, %x4, %x5, %x6, %x7)
…
loc_00430E3B: call [00401120h] ; MsgBox(arg_1, arg_2, arg_3, arg_4, arg_5)
…
loc_00430E53: call [00401070h] ; RegSetValueEx(%x1, %x2, %x3, %x4, %x5, %x6, %x7)
…
loc_00430E6F: call [004012B4h] ; RegSetValueEx(%x1, %x2, %x3, %x4, %x5, %x6, %x7)
…
loc_00430E88: call [0040112Ch] ; RegSetValueEx(%x1, %x2, %x3, %x4, %x5, %x6, %x7)
…
…
loc_00430EA8: call [004010C8h] ; RegSetValueEx(%x1, %x2, %x3, %x4, %x5, %x6, %x7)
loc_00430EAE: lea ecx, var_24
loc_00430EB1: call [00401388h] ; RegSetValueEx(%x1, %x2, %x3, %x4, %x5, %x6, %x7)
…
…省略了后面的代码
VERSION 5.00
Begin VB.Form Form2
….省略无关部分
Begin Label aRegInfo
Caption = "Unregister version"
ForeColor = &HFF&
Left = 120
Top = 1965
Width = 3405
Height = 255
End
…
…
Attribute VB_Name = "关于对话框"
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!