首页
社区
课程
招聘
[原创]另类方法攻破程序壁垒---充分利用程序验证的漏洞
发表于: 2010-9-8 11:43 8226

[原创]另类方法攻破程序壁垒---充分利用程序验证的漏洞

2010-9-8 11:43
8226

另类方法攻破程序壁垒---充分利用程序验证的漏洞
作者: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 = "关于对话框"

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 421
活跃值: (83)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
VB Decompiler很少使用,感谢LZ分享心得。千里之堤,溃于蚁穴。呵呵,找到了一点点蛛丝马迹就能打开思路
2010-9-8 13:24
0
雪    币: 194
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
柳暗花明又一村啊。学习了。
2010-9-9 22:05
0
雪    币: 76
活跃值: (27)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
零兄威武啊!~~~~~膜拜
2010-9-9 22:44
0
雪    币: 13
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
楼主犀利
我佩服啦
顶起
2010-9-10 16:21
0
雪    币: 20
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
其实可以考虑在程序的某个函数中,加上条指令直接把那个全局变量的值修改掉,也就不用在乎有多少地方读取了这个变量了
2010-9-11 01:37
0
雪    币: 2166
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
同意6楼说法,直接把值修改了就好了,也不需要一处处去找被调用的地方了
2010-9-15 10:13
0
雪    币: 34
活跃值: (250)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
我现在的能力还不能读懂你们的对话 。。。学习
2010-9-15 14:10
0
雪    币: 149
活跃值: (101)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
9
欣赏楼主遵守版规的精神,支持国产软件,但也可以学习反组译,并行不悖^^
2011-1-14 15:30
0
游客
登录 | 注册 方可回帖
返回
//