首页
社区
课程
招聘
[原创]第一篇算法HappyTown的KeyGenMe_04算法分析
发表于: 2007-6-28 03:10 6710

[原创]第一篇算法HappyTown的KeyGenMe_04算法分析

2007-6-28 03:10
6710

【文章标题】: HappyTown的KeyGenMe_04算法分析
【文章作者】: wzdbzd
【作者邮箱】: wzdbzd(at)hotmail.com
【软件名称】: HappyTown的KeyGenMe_04
【下载地址】: http://bbs.pediy.com/attachment.php?attachmentid=3204&d=1161829383
【保护方式】: 序列号
【编写语言】: Borland Delphi 6.0
【使用工具】: PEiD DeDe OllyDBG
【操作平台】: Windows XP SP2
【作者声明】: 只是感兴趣,没有其他目的。这是我的第一篇算法分析,失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  PEiD查出无壳,Borland Delphi 6.0编写。用DeDe分析,事件btnCheckClick的地址为0045004C。用OllyDBG载入KeyGenMe_04.exe,在0045004C设置断点,F9运行。输入注册名wzdbzd,注册码1234567890,点击Check后马上被断。
  
  0045004C  /.  55              PUSH    EBP                             ;  断在这里
  0045004D  |.  8BEC            MOV     EBPESP
  0045004F  |.  83C4 DC         ADD     ESP, -24
  00450052  |.  33C9            XOR     ECXECX
  00450054  |.  894D F8         MOV     DWORD PTR [EBP-8], ECX
  00450057  |.  894D F4         MOV     DWORD PTR [EBP-C], ECX
  0045005A  |.  8955 E0         MOV     DWORD PTR [EBP-20], EDX
  0045005D  |.  8945 FC         MOV     DWORD PTR [EBP-4], EAX
  00450060  |.  33C0            XOR     EAXEAX
  00450062  |.  55              PUSH    EBP
  00450063  |.  68 8D014500     PUSH    0045018D
  00450068  |.  64:FF30         PUSH    DWORD PTR FS:[EAX]
  0045006B  |.  64:8920         MOV     DWORD PTR FS:[EAX], ESP
  0045006E  |.  8D55 F8         LEA     EDXDWORD PTR [EBP-8]
  00450071  |.  8B45 FC         MOV     EAXDWORD PTR [EBP-4]
  00450074  |.  8B80 00030000   MOV     EAXDWORD PTR [EAX+300]
  0045007A  |.  E8 D9F2FDFF     CALL    0042F358                        ;  取注册名
  0045007F  |.  8B45 F8         MOV     EAXDWORD PTR [EBP-8]
  00450082  |.  E8 4940FBFF     CALL    004040D0                        ;  注册名位数
  00450087  |.  8945 F0         MOV     DWORD PTR [EBP-10], EAX
  0045008A  |.  837D F0 02      CMP     DWORD PTR [EBP-10], 2           ;  注册名必须大于2位
  0045008E  |.  0F8C DE000000   JL      00450172                        ;  跳了就挂
  00450094  |.  8D55 F4         LEA     EDXDWORD PTR [EBP-C]
  00450097  |.  8B45 FC         MOV     EAXDWORD PTR [EBP-4]
  0045009A  |.  8B80 08030000   MOV     EAXDWORD PTR [EAX+308]
  004500A0  |.  E8 B3F2FDFF     CALL    0042F358                        ;  取注册码
  004500A5  |.  8B45 F4         MOV     EAXDWORD PTR [EBP-C]
  004500A8  |.  E8 2340FBFF     CALL    004040D0                        ;  注册码位数
  004500AD  |.  8945 EC         MOV     DWORD PTR [EBP-14], EAX
  004500B0  |.  837D EC 0A      CMP     DWORD PTR [EBP-14], 0A          ;  注册码必须为10位
  004500B4  |.  0F85 B8000000   JNZ     00450172                        ;  跳了就挂
  004500BA  |.  8B45 EC         MOV     EAXDWORD PTR [EBP-14]
  004500BD  |.  85C0            TEST    EAXEAX
  004500BF  |.  7E 34           JLE     SHORT 004500F5
  004500C1  |.  8945 E4         MOV     DWORD PTR [EBP-1C], EAX
  004500C4  |.  C745 E8 0100000>MOV     DWORD PTR [EBP-18], 1           ;  从注册码的第一位开始循环验证是否每一位都是数字
  004500CB  |>  8B45 F4         /MOV     EAXDWORD PTR [EBP-C]         ;  注册码入EAX
  004500CE  |.  8B55 E8         |MOV     EDXDWORD PTR [EBP-18]
  004500D1  |.  807C10 FF 30    |CMP     BYTE PTR [EAX+EDX-1], 30       ;  注册码的第n位和0x30比较
  004500D6  |.  0F82 96000000   |JB      00450172                       ;  小于就挂
  004500DC  |.  8B45 F4         |MOV     EAXDWORD PTR [EBP-C]         ;  注册码入EAX
  004500DF  |.  8B55 E8         |MOV     EDXDWORD PTR [EBP-18]
  004500E2  |.  807C10 FF 39    |CMP     BYTE PTR [EAX+EDX-1], 39       ;  注册码的第n位和0x39比较
  004500E7  |.  0F87 85000000   |JA      00450172                       ;  大于就挂
  004500ED  |.  FF45 E8         |INC     DWORD PTR [EBP-18]
  004500F0  |.  FF4D E4         |DEC     DWORD PTR [EBP-1C]
  004500F3  |.^ 75 D6           \JNZ     SHORT 004500CB                 ;  若没比较完就跳回去
  004500F5  |>  8B45 F4         MOV     EAXDWORD PTR [EBP-C]
  004500F8  |.  0FB600          MOVZX   EAXBYTE PTR [EAX]             ;  注册码的第1位入EAX
  004500FB  |.  8B55 F4         MOV     EDXDWORD PTR [EBP-C]
  004500FE  |.  0FB652 05       MOVZX   EDXBYTE PTR [EDX+5]           ;  注册码的第6位入EDX
  00450102  |.  03C2            ADD     EAXEDX                        ;  二者相加入EAX
  00450104  |.  83F8 6D         CMP     EAX, 6D                         ;  是否等于0x6D
  00450107  |.  75 69           JNZ     SHORT 00450172                  ;  不等就挂
  00450109  |.  8B45 F4         MOV     EAXDWORD PTR [EBP-C]
  0045010C  |.  0FB640 01       MOVZX   EAXBYTE PTR [EAX+1]           ;  注册码的第2位入EAX
  00450110  |.  8B55 F4         MOV     EDXDWORD PTR [EBP-C]
  00450113  |.  0FB652 06       MOVZX   EDXBYTE PTR [EDX+6]           ;  注册码的第7位入EDX
  00450117  |.  03C2            ADD     EAXEDX                        ;  二者相加入EAX
  00450119  |.  83F8 67         CMP     EAX, 67                         ;  是否等于0x67
  0045011C  |.  75 54           JNZ     SHORT 00450172                  ;  不等就挂
  0045011E  |.  8B45 F4         MOV     EAXDWORD PTR [EBP-C]
  00450121  |.  0FB640 02       MOVZX   EAXBYTE PTR [EAX+2]           ;  注册码的第3位入EAX
  00450125  |.  8B55 F4         MOV     EDXDWORD PTR [EBP-C]
  00450128  |.  0FB652 07       MOVZX   EDXBYTE PTR [EDX+7]           ;  注册码的第8位入EDX
  0045012C  |.  03C2            ADD     EAXEDX                        ;  二者相加入EAX
  0045012E  |.  83F8 69         CMP     EAX, 69                         ;  是否等于0x69
  00450131  |.  75 3F           JNZ     SHORT 00450172                  ;  不等就挂
  00450133  |.  8B45 F4         MOV     EAXDWORD PTR [EBP-C]
  00450136  |.  0FB640 03       MOVZX   EAXBYTE PTR [EAX+3]           ;  注册码的第4位入EAX
  0045013A  |.  8B55 F4         MOV     EDXDWORD PTR [EBP-C]
  0045013D  |.  0FB652 08       MOVZX   EDXBYTE PTR [EDX+8]           ;  注册码的第9位入EDX
  00450141  |.  03C2            ADD     EAXEDX                        ;  二者相加入EAX
  00450143  |.  83F8 70         CMP     EAX, 70                         ;  是否等于0x70
  00450146  |.  75 2A           JNZ     SHORT 00450172                  ;  不等就挂
  00450148  |.  8B45 F4         MOV     EAXDWORD PTR [EBP-C]
  0045014B  |.  0FB640 04       MOVZX   EAXBYTE PTR [EAX+4]           ;  注册码的第5位入EAX
  0045014F  |.  8B55 F4         MOV     EDXDWORD PTR [EBP-C]
  00450152  |.  0FB652 09       MOVZX   EDXBYTE PTR [EDX+9]           ;  注册码的第10位入EDX
  00450156  |.  F7EA            IMUL    EDX                             ;  二者的十六进制值相乘入EAX
  00450158  |.  3D 8C0A0000     CMP     EAX, 0A8C                       ;  是否等于0xA8C
  0045015D  |.  75 13           JNZ     SHORT 00450172                  ;  不等就挂
  0045015F  |.  6A 40           PUSH    40                              ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
  00450161  |.  68 98014500     PUSH    00450198                        ; |Title = "Congratulations"
  00450166  |.  68 A8014500     PUSH    004501A8                        ; |Text = "Good job,man!"
  0045016B  |.  6A 00           PUSH    0                               ; |hOwner = NULL
  0045016D  |.  E8 2E63FBFF     CALL    <JMP.&user32.MessageBoxA>       ; \MessageBoxA
  00450172  |>  33C0            XOR     EAXEAX
  00450174  |.  5A              POP     EDX
  00450175  |.  59              POP     ECX
  00450176  |.  59              POP     ECX
  00450177  |.  64:8910         MOV     DWORD PTR FS:[EAX], EDX
  0045017A  |.  68 94014500     PUSH    00450194
  0045017F  |>  8D45 F4         LEA     EAXDWORD PTR [EBP-C]
  00450182  |.  BA 02000000     MOV     EDX, 2
  00450187  |.  E8 A83CFBFF     CALL    00403E34
  0045018C  \.  C3              RETN
  
【算法总结】
  注册码和用户名无关且必须为10位数字
  第一位加第六位要等于0x6D
  第二位加第七位要等于0x67
  第三位加第八位要等于0x69
  第四位加第九位要等于0x70
  第五位乘第十位要等于0xA8C
  一个可用的注册码:7017267896
  请大侠们赐教一个注册机,我试了n次都没成功,谢谢了!
  
--------------------------------------------------------------------------------
【经验总结】
  算法分析其实并不难,关键要懂汇编、有耐心!
  我不到一年就高考了,估计要告别一段时间。
  PS:熬夜的滋味不好受,不过xxx不理我的滋味更不好受……
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年06月28日 3:04:16


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 82
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
终于看到一个简单点的了。
2007-6-28 09:22
0
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
3
是啊,如果happy老大能把源码放出来看看就好;不然注册机要动下脑袋了
2007-6-28 11:09
0
雪    币: 1919
活跃值: (901)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
4
总结得不错~~~
2007-6-28 12:40
0
雪    币: 228
活跃值: (11)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
5
注册机,QB写的:
RANDOMIZE TIMER
DIM a(10)
DIM b(4)
b(1) = 109
b(2) = 103
b(3) = 105
b(4) = 112

FOR i = 1 TO 4
1 a(i) = INT(RND * 10)
  a(i + 5) = b(i) - a(i) - 48 * 2
  IF a(i + 5) > 9 OR a(i + 5) < 1 THEN 1
NEXT i
2 a(5) = INT(RND * 10): IF a(5) < 1 THEN 2
  a(10) = 2700 / (a(5) + 48) - 48
  IF a(10) > 9 OR a(10) < 1 OR a(10) <> INT(a(10)) THEN 2
FOR i = 1 TO 10
  PRINT a(i);
NEXT i
PRINT
END
2007-6-28 13:10
0
雪    币: 3645
活跃值: (4212)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
6
算法变换下

004500F5  |> \8B45 F4       mov     eax, dword ptr [ebp-C]
004500F8  |.  0FB600        movzx   eax, byte ptr [eax]
004500FB  |.  8B55 F4       mov     edx, dword ptr [ebp-C]
004500FE  |.  0FB652 05     movzx   edx, byte ptr [edx+5]
00450102  |.  03C2          add     eax, edx
00450104  |.  83F8 6D       cmp     eax, 6D                          ;  两数之和为13
00450107  |.  75 69         jnz     short 00450172
00450109  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
0045010C  |.  0FB640 01     movzx   eax, byte ptr [eax+1]
00450110  |.  8B55 F4       mov     edx, dword ptr [ebp-C]
00450113  |.  0FB652 06     movzx   edx, byte ptr [edx+6]
00450117  |.  03C2          add     eax, edx
00450119  |.  83F8 67       cmp     eax, 67                          ;  两数之和为7
0045011C  |.  75 54         jnz     short 00450172
0045011E  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
00450121  |.  0FB640 02     movzx   eax, byte ptr [eax+2]
00450125  |.  8B55 F4       mov     edx, dword ptr [ebp-C]
00450128  |.  0FB652 07     movzx   edx, byte ptr [edx+7]
0045012C  |.  03C2          add     eax, edx
0045012E  |.  83F8 69       cmp     eax, 69                          ;  两数之和为9
00450131  |.  75 3F         jnz     short 00450172
00450133  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
00450136  |.  0FB640 03     movzx   eax, byte ptr [eax+3]
0045013A  |.  8B55 F4       mov     edx, dword ptr [ebp-C]
0045013D  |.  0FB652 08     movzx   edx, byte ptr [edx+8]
00450141  |.  03C2          add     eax, edx
00450143  |.  83F8 70       cmp     eax, 70                          ;  两数之和为16
00450146  |.  75 2A         jnz     short 00450172
00450148  |.  8B45 F4       mov     eax, dword ptr [ebp-C]
0045014B  |.  0FB640 04     movzx   eax, byte ptr [eax+4]
0045014F  |.  8B55 F4       mov     edx, dword ptr [ebp-C]
00450152  |.  0FB652 09     movzx   edx, byte ptr [edx+9]
00450156  |.  F7EA          imul    edx
00450158  |.  3D 8C0A0000   cmp     eax, 0A8C                        ;  两数HEX之积为0xA8C(则只能是2和6了)
0045015D  |.  75 13         jnz     short 00450172

注册机垃圾代码

procedure TForm1.Button1Click(Sender: TObject);
var
  s1,s2,s3,s4,s5,s6,s7,s8,s9,s10:Integer;
begin
  randomize();
  s1:=random(6)+4;
  s6:=13-s1;
  randomize();
  s2:=random(7)+1;
  s7:=7-s2;
  randomize();
  s3:=random(9)+1;
  s8:=9-s3;
  s4:=random(2)+7;
  s9:=16-s4;
  s5:=2;
  s10:=6;
  edit1.text:=inttostr(s1)+inttostr(s2)+inttostr(s3)+inttostr(s4)+inttostr(s5)+inttostr(s6)+inttostr(s7)+inttostr(s8)+inttostr(s9)+inttostr(s10);
end
上传的附件:
2007-6-28 15:00
0
雪    币: 207
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
感谢楼上二位大虾编写注册机!
2007-6-28 17:28
0
雪    币: 197
活跃值: (82)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
写注册机真得很难
2007-9-7 16:50
0
雪    币: 9
活跃值: (132)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
9
0045015F  |.  6A 40           PUSH    40                              ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
  00450161  |.  68 98014500     PUSH    00450198                        ; |Title = "Congratulations"
  00450166  |.  68 A8014500     PUSH    004501A8                        ; |Text = "Good job,man!"  找到004501A8字符
  0045016B  |.  6A 00           PUSH    0                               ; |hOwner = NULL
  0045016D  |.  E8 2E63FBFF     CALL    <JMP.&user32.MessageBoxA>       ; \MessageBoxA  (弹出消息框,并显示Good job,man!字符)
2007-9-7 23:25
0
游客
登录 | 注册 方可回帖
返回
//