首页
社区
课程
招聘
爆破VB5练习后的问题
发表于: 2006-6-1 23:17 5631

爆破VB5练习后的问题

2006-6-1 23:17
5631
下了个VB6写的crack练练(听说VB的不好弄:),本想参考OD教程去试试能不能破解(目前会用字符串和函数参考,埃~~我真TM菜)
结果弄了好久也只是个爆破,还有好多不懂的,请教大家。
下载地址http://bbs.pediy.com/upload/2005/37/files/crack456.rar_469.rar

先看看crack456.exe的特点,2个输入框,没注册成功就显示“别灰心,再来”,这几个字不是用窗口弹出来的。

1、用OD打开---》参考文本字串,得到一堆没用的东西:

00401010   dd      MSVBVM60.__vbaEnd                 ASCII "hh?
0040102C   dd      MSVBVM60._adj_fdiv_m16i           ASCII "P哙%"
00401030   dd      MSVBVM60._adj_fdivr_m16i          ASCII "P哙%"
0040103C   dd      MSVBVM60.__vbaChkstk      ASCII "QWP="   <----
                                             -什么东西?乱码?请指点
00401070   dd      MSVBVM60._adj_fdiv_m32i           ASCII "P哙%"
00401074   dd      MSVBVM60._adj_fdivr_m32i          ASCII "P哙%"
004014B8   dd      复件_cra.00402440                   ASCII "??l$"
……………………很多代码 省略了 反正没有价值的……………………………
004019F4   ascii   "__vbaEnd",0
00401AA0   dd      复件_cra.004017D8                   ASCII "Form"
00401AC8   dd      复件_cra.00401864                   ASCII "Text2"
00401AF0   dd      复件_cra.0040186C                   ASCII "Text1"
00401B18   dd      复件_cra.00401884                   ASCII "Label1"
                              2个输入框款,2个按钮,2个提示,1个窗口
00401B40   dd      复件_cra.0040188C                   ASCII "Label2"
00401B68   dd      复件_cra.004018A4                   ASCII "Command1"
00401B90   dd      复件_cra.004018B0                   ASCII "Command2"
00402139   mov     edx, 复件_cra.004018DC              UNICODE "crackerlnn"

再用W32Dasm打开,字符数据参考 ,仅仅看到"VB5!"
看来用字符串参考找是不行的。

2、试试CCDebuger教我们的第二招(碰碰运气:)--函数参考
查找----当前模块中的名称:
地址       区段       类型           名称                                 
00401084   .text      输入         MSVBVM60.#100
……………………省略了一些……………………………
0040108C   .text      输入         MSVBVM60._CIatan
00401000   .text      输入         MSVBVM60._CIcos
00401098   .text      输入         MSVBVM60._CIexp
0040106C   .text      输入         MSVBVM60._CIlog  <-------三角函数
                                                 不会用这些做算法把!
00401038   .text      输入         MSVBVM60._CIsin 是不是太残忍了
00401050   .text      输入         MSVBVM60._CIsqrt
00401094   .text      输入         MSVBVM60._CItan
00401040   .text      输入         MSVBVM60.EVENT_SINK_AddRef
00401058   .text      输入         MSVBVM60.EVENT_SINK_QueryInterface
0040104C   .text      输入         MSVBVM60.EVENT_SINK_Release
00401034   .text      输入         MSVBVM60.__vbaBoolVarNull
0040103C   .text      输入         MSVBVM60.__vbaChkstk
00401010   .text      输入         MSVBVM60.__vbaEnd
0040105C   .text      输入         MSVBVM60.__vbaExceptHandler
00401068   .text      输入         MSVBVM60.__vbaFPException
0040109C   .text      输入         MSVBVM60.__vbaFreeObj    -------
004010A0   .text      输入         MSVBVM60.__vbaFreeStr    -------没
                                         学过VB,不知道这几个做什么的
0040100C   .text      输入         MSVBVM60.__vbaFreeVar    --------
00401014   .text      输入         MSVBVM60.__vbaFreeVarList-------
00401020   .text      输入         MSVBVM60.__vbaHresultCheckObj
00401028   .text      输入         MSVBVM60.__vbaObjSet
00401044   .text      输入         MSVBVM60.__vbaPrintObj    <------应
                                            该是显示什么的,如成功失败
00401078   .text      输入         MSVBVM60.__vbaStrCopy     <----用这
                                         个获得我们输的用户名 序列号
00401054   .text      输入         MSVBVM60.__vbaVarAnd
00401088   .text      输入         MSVBVM60.__vbaVarCmpEq    <----测试
                                 变量是否相等,觉得比较重要,下个断点
00401008   .text      输入         MSVBVM60.__vbaVarMove

(在vbaStrCopy  vbaVarCmpEq  vbaPrintObj这3个地方下断点,程序停止的地方相差不太远,都在0040214A附近。)
在vbaVarCmpEq下断点,提示有2个断点。运行程序,程序停止在0040214A:
00402141   .  FF15 78104000 call    [<&MSVBVM60.__vbaStrCopy>]       ;  MSVBVM60.__vbaStrCopy
                问题:调用字串复制,字串复制到哪儿去了?
00402147   .  8B4D D8       mov     ecx, [ebp-28]
0040214A   .  8B3D 88104000 mov     edi, [<&MSVBVM60.__vbaVarCmpEq>] ;  MSVBVM60.__vbaVarCmpEq
00402150   .  8D55 DC       lea     edx, [ebp-24]
00402153   .  894D 84       mov     [ebp-7C], ecx
00402156   .  8D85 7CFFFFFF lea     eax, [ebp-84]
0040215C   .  52            push    edx
0040215D   .  8D4D AC       lea     ecx, [ebp-54]
00402160   .  50            push    eax
00402161   .  51            push    ecx
00402162   .  C785 7CFFFFFF>mov     dword ptr [ebp-84], 8008
0040216C   .  66:C785 74FFF>mov     word ptr [ebp-8C], 463
00402175   .  C785 6CFFFFFF>mov     dword ptr [ebp-94], 8002
0040217F   .  FFD7          call    edi                              ;  <&MSVBVM60.__vbaVarCmpEq>
        问题:调用比较,它把什么和什么比较了,在哪儿比较的?
00402181   .  50            push    eax
00402182   .  8D55 C8       lea     edx, [ebp-38]
00402185   .  8D85 6CFFFFFF lea     eax, [ebp-94]
0040218B   .  52            push    edx
0040218C   .  8D4D 9C       lea     ecx, [ebp-64]
0040218F   .  50            push    eax
00402190   .  51            push    ecx
00402191   .  FFD7          call    edi           又调用了一次
00402193   .  8D55 8C       lea     edx, [ebp-74]
00402196   .  50            push    eax
00402197   .  52            push    edx
00402198   .  FF15 54104000 call    [<&MSVBVM60.__vbaVarAnd>]        ;  MSVBVM60.__vbaVarAnd
0040219E   .  50            push    eax
0040219F   .  FF15 34104000 call    [<&MSVBVM60.__vbaBoolVarNull>]   ;  MSVBVM60.__vbaBoolVarNull
004021A5   .  66:85C0       test    ax, ax     这个重要,比较结果直接
                                                   影响输出显示什么
004021A8   .  74 07         je      short crack456.004021B1  相等,把
                                                     00401910压入堆栈
004021AA   .  68 F8184000   push    crack456.004018F8       不等则把
                                                     004018F8压入堆栈
004021AF   .  EB 05         jmp     short crack456.004021B6
004021B1   >  68 10194000   push    crack456.00401910
004021B6   >  56            push    esi
004021B7   .  68 08194000   push    crack456.00401908
004021BC   .  FF15 44104000 call    [<&MSVBVM60.__vbaPrintObj>]      ;  MSVBVM60.__vbaPrintObj
004021C2   .  83C4 0C       add     esp, 0C

看了很久发现004021A8   je  short crack456.004021B1应该是关键,用HIEW把7407 该成7507,即jne。保存,运行,随便输入用户名
序列号,提示"你真棒",日,暴破
看了很久,就是不知道它把我输入的序列号和真正的序列号是怎么在比较的,在哪儿比较的。就看不出来它的算法和正确的序列号。高手指点一下。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
本人在试验“CCDebuger的OllyDBG 入门系列(五)-消息断点及 RUN 跟踪”发现作者个小问题,CCDebuger最后得出密码要求是17位,我看了程序,(个人觉得)要求密码是16位,6位的密码循环后ecx是7,8位的密码循环后ecx是9,把ecx和11(H)比较,就是说16位密码就可以了。

为什么没人回答我的帖子,郁闷。
自己顶了
2006-6-2 12:07
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我现在正在用SmartCheck软件破解VB6.0的程序,可是在窗口左边出现的数据,似懂非懂的,有一些数字的转换,可是还是看不懂是什么意思,能不能指道一下啊,我不知道这里能不能留下联系方式啊?能不能留下QQ号码,方便联系呢?希望知道得告诉我
2006-7-30 20:00
0
雪    币: 214
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵 VB的东西真的不好搞
   代码很乱
2006-7-31 20:24
0
游客
登录 | 注册 方可回帖
返回
//