首页
社区
课程
招聘
[原创]某个人总结助手注册算法破解分析(简单,适合初学者)
发表于: 2006-5-28 22:13 10434

[原创]某个人总结助手注册算法破解分析(简单,适合初学者)

2006-5-28 22:13
10434

【破文标题】菜鸟破解之----某个人总结助手注册算法破解分析(简单)
【破文作者】紫色缘[TFW][PCG]
【作者邮箱】Cn_Fish@126.com
【作者主页】www.cniso.org
【破解工具】OD、PEID
【破解平台】Win9x/NT/2000/XP
【软件名称】某个人总结助手
【软件大小】1MB
【原版下载】不提供~
【保护方式】无
【软件简介】

这软件是我在kanxue论坛网友的网络U盘那边无意间下载下来的~

此软件算法是非常的简单~对于初学算法者相当的有好处~ (高手请略过)
------------------------------------------------------------------------
【破解过程】

1、查壳后显示Microsoft Visual Basic 5.0 / 6.0无壳。又有软柿子吃了。呵呵~

2、启动主程序后,在输入假码后出现错误提示框。嘿嘿~~有错误的提示框就比较好办了!

3、载入OD,F3一下,出现“打开32位可执行文件”选择要分析的主程序后。直接来到以下的代码处:

004022EC > $  68 087C4000   push    00407C08                         ;  来到此处~~ 一般VB的程序都载入到此!
004022F1   .  E8 EEFFFFFF   call    <jmp.&MSVBVM60.#100>
004022F6   .  0000          add     [eax], al
004022F8   .  0000          add     [eax], al
004022FA   .  0000          add     [eax], al
004022FC   .  3000          xor     [eax], al
004022FE   .  0000          add     [eax], al
00402300   .  48            dec     eax
====================================================================================================

直接在命令行下断点:bp rtcMsgBox(消息提示断点,验证了第2步骤~~~)
F9运行,出现注册框,输入本机注册码:“111111111” 然后点“现在注册”按钮,直接断在以下代码:

660DC5F3 >  55              push    ebp                              ; 断在此处~~~~
660DC5F4    8BEC            mov     ebp, esp
660DC5F6    83EC 4C         sub     esp, 4C
660DC5F9    8B4D 14         mov     ecx, [ebp+14]
660DC5FC    53              push    ebx
660DC5FD    56              push    esi
660DC5FE    57              push    edi
660DC5FF    66:8339 0A      cmp     word ptr [ecx], 0A
660DC603    B8 04000280     mov     eax, 80020004
====================================================================================================

然后直接按ALT+F9运行到达消息代码处~~  

004A5C68   .  FF15 58104000 call    [<&MSVBVM60.#595>]               ;  MSVBVM60.rtcMsgBox
004A5C6E   .  8D4D 90       lea     ecx, [ebp-70]
004A5C71   .  8D55 A0       lea     edx, [ebp-60]
004A5C74   .  51            push    ecx
004A5C75   .  8D45 B0       lea     eax, [ebp-50]
004A5C78   .  52            push    edx
004A5C79   .  8D4D C0       lea     ecx, [ebp-40]
004A5C7C   .  50            push    eax
004A5C7D   .  51            push    ecx
004A5C7E   .  6A 04         push    4
====================================================================================================

因为要分析其算法,所以向上找其触发事件代码处:

004A5A60   > \55            push    ebp                              ;  再此下断,然后F8单步跟踪~~~
004A5A61   .  8BEC          mov     ebp, esp
004A5A63   .  83EC 0C       sub     esp, 0C
004A5A66   .  68 B6204000   push    <jmp.&MSVBVM60.__vbaExceptHandle>;  SE 处理程序安装
004A5A6B   .  64:A1 0000000>mov     eax, fs:[0]
004A5A71   .  50            push    eax
004A5A72   .  64:8925 00000>mov     fs:[0], esp
004A5A79   .  81EC D0000000 sub     esp, 0D0

.....................................中间省略N行无关紧要的代码.......................................

004A5B60   . /7D 12         jge     short 004A5B74
004A5B62   . |68 A0000000   push    0A0
004A5B67   . |68 DCF24000   push    0040F2DC
004A5B6C   . |57            push    edi
004A5B6D   . |50            push    eax
004A5B6E   . |FF15 4C104000 call    [<&MSVBVM60.__vbaHresultCheckObj>;  MSVBVM60.__vbaHresultCheckObj
004A5B74   > \8B55 E0       mov     edx, [ebp-20]                    ;  本机注册码送入EDX
004A5B77   .  8B45 E4       mov     eax, [ebp-1C]                    ;  本机用户名送入EAX
004A5B7A   .  52            push    edx                              ;  EDX入栈
004A5B7B   .  50            push    eax                              ;  EAX入栈
004A5B7C   .  FF15 04114000 call    [<&MSVBVM60.__vbaR8Str>]         ;  MSVBVM60.__vbaR8Str
004A5B82   .  DCC0          fadd    st, st                           ;  加实数:st+st (st=207423487.00000000000)
004A5B84   .  8B4D E8       mov     ecx, [ebp-18]                    ;  本机用户名送入ECX
004A5B87   .  51            push    ecx                              ;  ECX入栈
004A5B88   .  DC05 70204000 fadd    qword ptr [402070]               ;  相加实数2000
004A5B8E   .  DFE0          fstsw   ax                               ;  保存状态字的值到AX
004A5B90   .  A8 0D         test    al, 0D                           ;  测试al 与 OD
004A5B92   .  0F85 84030000 jnz     004A5F1C                         ;  不相等则跳
004A5B98   .  DD9D 24FFFFFF fstp    qword ptr [ebp-DC]               ;  然后再执行一次出栈操作
004A5B9E   .  FF15 04114000 call    [<&MSVBVM60.__vbaR8Str>]         ;  MSVBVM60.__vbaR8Str
004A5BA4   .  DC0D 68204000 fmul    qword ptr [402068]               ;  乘上一个实数 6
004A5BAA   .  83EC 08       sub     esp, 8
004A5BAD   .  DC05 60204000 fadd    qword ptr [402060]               ;  乘了后的值 相加上一个实数1966
004A5BB3   .  DC85 24FFFFFF fadd    qword ptr [ebp-DC]               ;  2者得数后的实数相加
004A5BB9   .  DFE0          fstsw   ax                               ;  保存状态字的值到AX
004A5BBB   .  A8 0D         test    al, 0D                           ;  测试al 与 OD
004A5BBD   .  0F85 59030000 jnz     004A5F1C                         ;  不相等则跳
004A5BC3   .  DD1C24        fstp    qword ptr [esp]                  ;  然后再执行一次出栈操作
004A5BC6   .  FF15 B8104000 call    [<&MSVBVM60.__vbaStrR8>]         ;  MSVBVM60.__vbaStrR8
004A5BCC   .  8BD0          mov     edx, eax                         ;  EAX送入EDX,EAX即为真码
004A5BCE   .  8D4D DC       lea     ecx, [ebp-24]
004A5BD1   .  FF15 54114000 call    [<&MSVBVM60.__vbaStrMove>]       ;  MSVBVM60.__vbaStrMove
004A5BD7   .  50            push    eax                              ;  EAX入栈
004A5BD8   .  FF15 88104000 call    [<&MSVBVM60.__vbaStrCmp>]        ;  MSVBVM60.__vbaStrCmp
004A5BDE   .  8BF8          mov     edi, eax
004A5BE0   .  8D55 DC       lea     edx, [ebp-24]
004A5BE3   .  F7DF          neg     edi
004A5BE5   .  8D45 E0       lea     eax, [ebp-20]
004A5BE8   .  52            push    edx
004A5BE9   .  8D4D E4       lea     ecx, [ebp-1C]
004A5BEC   .  50            push    eax
004A5BED   .  1BFF          sbb     edi, edi
004A5BEF   .  8D55 E8       lea     edx, [ebp-18]
004A5BF2   .  51            push    ecx
004A5BF3   .  52            push    edx
004A5BF4   .  F7DF          neg     edi
004A5BF6   .  6A 04         push    4
004A5BF8   .  F7DF          neg     edi
004A5BFA   .  FF15 18114000 call    [<&MSVBVM60.__vbaFreeStrList>]   ;  MSVBVM60.__vbaFreeStrList
004A5C00   .  8D45 D0       lea     eax, [ebp-30]
004A5C03   .  8D4D D4       lea     ecx, [ebp-2C]
004A5C06   .  50            push    eax
004A5C07   .  8D55 D8       lea     edx, [ebp-28]
004A5C0A   .  51            push    ecx
004A5C0B   .  52            push    edx
004A5C0C   .  6A 03         push    3
004A5C0E   .  FF15 34104000 call    [<&MSVBVM60.__vbaFreeObjList>]   ;  MSVBVM60.__vbaFreeObjList
004A5C14   .  83C4 24       add     esp, 24
004A5C17   .  B9 04000280   mov     ecx, 80020004
004A5C1C   .  B8 0A000000   mov     eax, 0A
004A5C21   .  894D 98       mov     [ebp-68], ecx
004A5C24   .  66:85FF       test    di, di
004A5C27   .  8945 90       mov     [ebp-70], eax
004A5C2A   .  894D A8       mov     [ebp-58], ecx
004A5C2D   .  8945 A0       mov     [ebp-60], eax
004A5C30   .  894D B8       mov     [ebp-48], ecx
004A5C33   .  8945 B0       mov     [ebp-50], eax
004A5C36   .  0F84 93000000 je      004A5CCF                          ;爆破点,JE--->JMP               

------------------------------------------------------------------------
【算法总结】

1、本机用户名出现后相加一次,然后再相加一个实数2000
2、本机用户名的值乘以6,然后再相加一个实数1966
3、最后1和2的值相加起来,即是注册码。

下面是粗糙的VB算法注册机源码:

建立2个TextBox ,1个CommandButton

Private Sub Command1_Click()
strcmp = Text1.Text
a = Val(Text1.Text)
sn1 = a + a + 2000
sn2 = a * 6 + 1966
sn = sn1 + sn2
Text2.Text = sn
End Sub

------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者信息并保持文章的完整, 谢谢!

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

收藏
免费 7
支持
分享
最新回复 (28)
雪    币: 253
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
2
那些代码着色搞不来,郁闷~
2006-5-28 22:17
0
雪    币: 44229
活跃值: (19965)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
3
最初由 紫色缘 发布
那些代码着色搞不来,郁闷~


这样蛮好的,着色代码如果操作不好,看的反而眼花。
2006-5-28 22:38
0
雪    币: 253
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
4
最初由 kanxue 发布
这样蛮好的,着色代码如果操作不好,看的反而眼花。


看他们搞的那些代码蛮漂亮的,所以也想搞搞  搞了搞还是没搞出来
2006-5-28 22:45
0
雪    币: 219
活跃值: (56)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
学习~~~~
2006-5-29 00:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好!!偶是新手,请多多关照
2006-5-29 09:55
0
雪    币: 10500
活跃值: (2159)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
呵呵 支持
2006-5-29 10:15
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
【原版下载】不提供~
【保护方式】无
【软件简介】

这软件是我在kanxue论坛网友的网络U盘那边无意间下载下来的~

我想用,如何是好?!
2006-5-29 11:03
0
雪    币: 253
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
9
最初由 BlueT 发布
【原版下载】不提供~
【保护方式】无
【软件简介】

这软件是我在kanxue论坛网友的网络U盘那边无意间下载下来的~
........


请留下你的E-mail地址,我会给你发过去。发好后我会在本贴中说明
2006-5-29 11:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
004A5B74   > \8B55 E0       mov     edx, [ebp-20]                    ;  本机注册码送入EDX
004A5B77   .  8B45 E4       mov     eax, [ebp-1C]                    ;  本机用户名送入EAX
004A5B84   .  8B4D E8       mov     ecx, [ebp-18]                    ;  本机用户名送入ECX
请问,你怎么知道 [ [ebp-20]   中存放的是本机注册码?
    你怎么知道 [ [ebp-1C]   中存放的是本机用户名?
    本机用户名后面的存放地址怎么又变成 [ebp-18]   ?
    能举例说说什么是栈顶?
[ebp-20] 是什么意思,EBP是多少?
     
2006-5-29 12:57
0
雪    币: 253
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
11
最初由 FJNHXJM 发布
004A5B74 > \8B55 E0 mov edx, [ebp-20] ; 本机注册码送入EDX
004A5B77 . 8B45 E4 mov eax, [ebp-1C] ; 本机用户名送入EAX
004A5B84 . 8B4D E8 mov ecx, [ebp-18] ; 本机用户名送入ECX
请问,你怎么知道 [ [ebp-20] 中存放的是本机注册码?
    你怎么知道 [ [ebp-1C] 中存放的是本机用户名?
........


跟踪软件的时候在“信息窗口”中会显示本机的注册码或本机的用户名。自然就是[EBP-20]的值,那MOV EDX,[EBP-20]的话,是把[EBP-20]的值送给EDX值。同理,[EBP-1C]也是一样。

2、本机用户名后面的存放地址怎么又变成 [ebp-18] ?

应该是先运算一部分后 再重新选择使用此用户名来运算/数值的变化吧(我是这样认为的, 如果哪位高手肯愿意解答,小菜鸟感激不尽)

3、能举例说说什么是栈顶?
关于此方面的本人也不太清楚,这里有些资料

栈是一种先进后出的数据结构,栈有一个存储区、一个栈顶指针。栈顶指针指向堆栈中第一个可用的数据项(被称为栈顶)。用户可以在栈顶上方向栈中加入数据,这个操作被称为压栈(Push),压栈以后,栈顶自动变成新加入数据项的位置,栈顶指针也随之修改。用户也可以从堆栈中取走栈顶,称为弹出栈(pop),弹出栈后,栈顶下的一个元素变成栈顶,栈顶指针随之修改。
2006-5-29 13:27
0
雪    币: 253
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
12
EBP的话是跟踪软件的时候会出现一个值。一般此类的值不再算法分析范围内,所以其什么值的话,可以忽略
2006-5-29 13:28
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
ligren@gmail.com
2006-5-29 14:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
谢谢楼主,你真是一个水平高又热心肠的人,再次感谢!!!
2006-5-29 14:25
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
不错.又多学习到一手~~
2006-5-29 15:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
好文章啊!谢谢楼主分享!认真学习!
2006-5-29 19:28
0
雪    币: 110
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
好简单的算法啊,救命

不是一般的简单。。。。。。。。。。。。
2006-5-29 19:44
0
雪    币: 253
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
18
最初由 BlueT 发布
ligren@gmail.com


因今天开会,很迟才回来 软件已发送,请查收~~
2006-5-29 21:49
0
雪    币: 224
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
19
不错,学习
2006-5-30 00:06
0
雪    币: 343
活跃值: (611)
能力值: ( LV9,RANK:810 )
在线值:
发帖
回帖
粉丝
20
最初由 紫色缘 发布
看他们搞的那些代码蛮漂亮的,所以也想搞搞 搞了搞还是没搞出来

索性都成了兰色了。也不错
2006-5-30 00:55
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
简单易懂,对我这样的新手很合适!
2006-5-30 08:49
0
雪    币: 253
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
22
感谢各位的支持~~

最初由 小剑 发布
好简单的算法啊,救命

不是一般的简单。。。。。。。。。。。。


呵呵,算法简单但易学易懂

最初由 ForEver 发布
索性都成了兰色了。也不错


嘿嘿,不过有些时候蓝色看多了,眼睛比较刺。
2006-5-30 15:51
0
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
23
呵呵,好像就是军队总结的那个吧`~~~

2006-5-30 16:14
0
雪    币: 253
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
24
最初由 冷血书生 发布
呵呵,好像就是军队总结的那个吧`~~~



2006-5-30 16:35
0
雪    币: 241
活跃值: (35)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
如果程序是vc/vc++写的用哪个函数呢?
2006-5-30 21:03
0
游客
登录 | 注册 方可回帖
返回
//