肥牛 发表于 2017-6-15 00:21

160个CM之21——算法分析及注册机

本帖最后由 肥牛 于 2017-6-15 00:31 编辑

昨天看帖子,CM52那篇帖子只做了爆破,没有分析算法,所以想着是不是我把算法做出来。结果做到一半儿的时候突然想,何必呢,人家都没做,我干嘛去做?换一个吧!
今天中午午休期间,就从160个CM里随便就找了一个21(Cabeca.exe),正好是我熟悉的DELPHI做的,就用它吧。
不过做完了,说实话,这个CM太简单了。不知道为什么没有给评难度分,我觉得能给评一星就不错了。但是反过来想,这个CM倒是特别适合新手练习。
程序运行,在中文环境下,窗口显示不全,需要鼠标拉动窗体才能显示全。
如果输入不全的情况下,会有如下提示:

注册码输入不正确的情况下,有如下提示:

好了,那我们就开始破解了。首先还是先查一下程序有没有壳(好像160里面基础的CM都没有加壳),其实查壳还有一个目的,就是能看出来这个程序是用什么语言写的,我们就可以对症下药了。

显示是无壳的,而且是用DELPHI写的。那就好办了。对于DELPHI写的程序,我的习惯是先用DeDe或者IDR分析代码,分析不明白的时候再上OD跟踪调试。
用IDR加载Cabeca.exe,发现它只有两个事件。首先看try按钮的点击事件:
Unit1.TForm1.Button1Click
0042D3C4      push      ebp
0042D3C5      mov         ebp,esp
0042D3C7      xor         ecx,ecx
0042D3C9      push      ecx
0042D3CA      push      ecx
0042D3CB      push      ecx
0042D3CC      push      ecx
0042D3CD      push      ebx
0042D3CE      mov         ebx,eax
0042D3D0      xor         eax,eax
0042D3D2      push      ebp
0042D3D3      push      42D5AD
0042D3D8      push      dword ptr fs:
0042D3DB      mov         dword ptr fs:,esp
0042D3DE      cmp         dword ptr ds:,0;变量A
0042D3E5>       je          0042D42C
0042D3E7      cmp         dword ptr ds:,0;变量B
0042D3EE>       je          0042D42C
0042D3F0      lea         edx,
0042D3F3      mov         eax,dword ptr ;TForm1.Edit1:TEdit
0042D3F9      call      TControl.GetText
0042D3FE      cmp         dword ptr ,0                //判断Edit1也就是用户名是否为空
0042D402>       je          0042D42C
0042D404      lea         edx,
0042D407      mov         eax,dword ptr ;TForm1.Edit2:TEdit
0042D40D      call      TControl.GetText
0042D412      cmp         dword ptr ,0                //判断Edit2也就是第一个注册码是否为空
0042D416>       je          0042D42C
0042D418      lea         edx,
0042D41B      mov         eax,dword ptr ;TForm1.Edit3:TEdit
0042D421      call      TControl.GetText
0042D426      cmp         dword ptr ,0        //判断Edit3也就是第二个注册码是否为空
0042D42A>       jne         0042D470
0042D42C      mov         eax,42D5C4;'Fill all boxes first dumb!'
0042D431      call      ShowMessage                        //跳出错误提示
0042D436      xor         eax,eax
0042D438      mov         ,eax;变量A
0042D43D      xor         eax,eax
0042D43F      mov         ,eax;变量B
0042D444      xor         edx,edx
0042D446      mov         eax,dword ptr ;TForm1.Edit1:TEdit
0042D44C      call      TControl.SetText
0042D451      xor         edx,edx
0042D453      mov         eax,dword ptr ;TForm1.Edit2:TEdit
0042D459      call      TControl.SetText
0042D45E      xor         edx,edx
0042D460      mov         eax,dword ptr ;TForm1.Edit3:TEdit
0042D466      call      TControl.SetText                //以上代码是把三个输入框的内容清空
0042D46B>       jmp         0042D58A
0042D470      cmp         dword ptr ds:,0;变量A
0042D477>       je          0042D4E5
0042D479      cmp         dword ptr ds:,0;变量B
0042D480>       je          0042D4E5
0042D482      lea         edx,
0042D485      mov         eax,;变量A
0042D48A      call      IntToStr                        //整数转字符串
0042D48F      mov         eax,dword ptr
0042D492      push      eax
0042D493      lea         edx,
0042D496      mov         eax,dword ptr ;TForm1.Edit2:TEdit
0042D49C      call      TControl.GetText                //取第一个注册码
0042D4A1      mov         edx,dword ptr
0042D4A4      pop         eax
0042D4A5      call      @LStrCmp                        //字符串比较
0042D4AA>       jne         0042D4E5
0042D4AC      lea         edx,
0042D4AF      mov         eax,;变量B
0042D4B4      call      IntToStr                        //整数转字符串
0042D4B9      mov         eax,dword ptr
0042D4BC      push      eax
0042D4BD      lea         edx,
0042D4C0      mov         eax,dword ptr ;TForm1.Edit3:TEdit
0042D4C6      call      TControl.GetText                //去第二个注册码
0042D4CB      mov         edx,dword ptr
0042D4CE      pop         eax
0042D4CF      call      @LStrCmp                        //字符串比较
0042D4D4>       jne         0042D4E5
0042D4D6      mov         eax,42D5E8;'Hmmm.... Cracked... Congratulations idiot! :-)'
0042D4DB      call      ShowMessage                        //成功提示
0042D4E0>       jmp         0042D58A
0042D4E5      cmp         dword ptr ds:,0;变量A
0042D4EC>       je          0042D521
0042D4EE      cmp         dword ptr ds:,0;变量B
0042D4F5>       je          0042D521
0042D4F7      lea         edx,
0042D4FA      mov         eax,;变量A
0042D4FF      call      IntToStr
0042D504      mov         eax,dword ptr
0042D507      push      eax
0042D508      lea         edx,
0042D50B      mov         eax,dword ptr ;TForm1.Edit2:TEdit
0042D511      call      TControl.GetText
0042D516      mov         edx,dword ptr
0042D519      pop         eax
0042D51A      call      @LStrCmp
0042D51F>       jne         0042D54B
0042D521      lea         edx,
0042D524      mov         eax,;变量B
0042D529      call      IntToStr
0042D52E      mov         eax,dword ptr
0042D531      push      eax
0042D532      lea         edx,
0042D535      mov         eax,dword ptr ;TForm1.Edit3:TEdit
0042D53B      call      TControl.GetText
0042D540      mov         edx,dword ptr
0042D543      pop         eax
0042D544      call      @LStrCmp
0042D549>       je          0042D58A
0042D54B      mov         eax,42D620;'Nice try... but is incorrect... Dumb..'
0042D550      call      ShowMessage
0042D555      xor         eax,eax
0042D557      mov         ,eax;变量A
0042D55C      xor         eax,eax
0042D55E      mov         ,eax;变量B
0042D563      xor         edx,edx
0042D565      mov         eax,dword ptr ;TForm1.Edit1:TEdit
0042D56B      call      TControl.SetText
0042D570      xor         edx,edx
0042D572      mov         eax,dword ptr ;TForm1.Edit2:TEdit
0042D578      call      TControl.SetText
0042D57D      xor         edx,edx
0042D57F      mov         eax,dword ptr ;TForm1.Edit3:TEdit
0042D585      call      TControl.SetText
0042D58A      xor         eax,eax
0042D58C      pop         edx
0042D58D      pop         ecx
0042D58E      pop         ecx
0042D58F      mov         dword ptr fs:,edx
0042D592      push      42D5B4
0042D597      lea         eax,
0042D59A      call      @LStrClr
0042D59F      lea         eax,
0042D5A2      mov         edx,3
0042D5A7      call      @LStrArrayClr
0042D5AC      ret
0042D5AD>       jmp         @HandleFinally
0042D5B2>       jmp         0042D597
0042D5B4      pop         ebx
0042D5B5      mov         esp,ebp
0042D5B7      pop         ebp
0042D5B8      ret
说实话,我看这段代码简直有些吃惊,这也太简单了,简单的一塌糊涂,一眼就看明白是咋回事了。
变量A的值转字符串后与输入的第一个注册码相比,变量B的值转字符串后与输入的第二个注册码相比。是的,就这么简单。
到这里,想爆破的同学也很容易看出在哪两个点进行修改就可以完成爆破了吧?我就不说了,这个太小儿科了。
可是变量A和变量B是什么呢?从哪里来的?
(注:变量A和变量B是我改的备注,原来的名字是gvar_0042F714和gvar_0042F718)
我前面说了,这个程序一共只有两个事件,我们去看另一个事件。这个事件是Edit1KeyPress,也就是注册名输入框的按键按下事件,每输入一个字符都会触发这个事件:
Unit1.TForm1.Edit1KeyPress
0042CE30      xor         edx,edx                        //清空EDX
0042CE32      mov         dl,byte ptr                 //按键的ASCII放到DX的低位字节,因为EDX=0,所以相当于把这个ASCII存入EDX
0042CE34      add         edx,0FFFFFFF8                //EDX=EDX-8
0042CE37      cmp         edx,72                        //判断EDX是不是十进制的114。因为前面是减了8,所以原始值应该是122,也就是字符'z'
0042CE3A>       ja          0042D3C0                        //如果大于则直接跳转结束
0042CE40      mov         dl,byte ptr       //这里很关键,需要大家计算一下了,比如我们输入的是大写字母A,它的ASCII码是0x41,
                                                                                       //减去8以后得0x39,那么0x39+0x42CE4D=0x42CE86,往下找,0042CE86对应的是27
                                                                                       //(在IDR里显示的是16进制的1B,复制出来变成10进制的27了),再把27存到EDX中
0042CE46      jmp         dword ptr       //27(10进制)=1B(16进制),0x1B*4+0x42CEC0=0x42CF2C。0042CF2C对应的是0042D186,跳转到这个地址
0042CE4D      db          53
0042CE4E      db          0
0042CE4F      db          0
0042CE50      db          0
0042CE51      db          0
0042CE52      db          0
0042CE53      db          0
0042CE54      db          0
0042CE55      db          0
0042CE56      db          0
0042CE57      db          0
0042CE58      db          0
0042CE59      db          0
0042CE5A      db          0
0042CE5B      db          0
0042CE5C      db          0
0042CE5D      db          0
0042CE5E      db          0
0042CE5F      db          0
0042CE60      db          0
0042CE61      db          0
0042CE62      db          0
0042CE63      db          0
0042CE64      db          0
0042CE65      db          0
0042CE66      db          0
0042CE67      db          0
0042CE68      db          0
0042CE69      db          0
0042CE6A      db          0
0042CE6B      db          0
0042CE6C      db          0
0042CE6D      db          0
0042CE6E      db          0
0042CE6F      db          0
0042CE70      db          0
0042CE71      db          0
0042CE72      db          0
0042CE73      db          0
0042CE74      db          0
0042CE75      db          0
0042CE76      db          0
0042CE77      db          0
0042CE78      db          0
0042CE79      db          0
0042CE7A      db          0
0042CE7B      db          0
0042CE7C      db          0
0042CE7D      db          0
0042CE7E      db          0
0042CE7F      db          0
0042CE80      db          0
0042CE81      db          0
0042CE82      db          0
0042CE83      db          0
0042CE84      db          0
0042CE85      db          0
0042CE86      db          27
0042CE87      db          28
0042CE88      db          29
0042CE89      db          30
0042CE8A      db          31
0042CE8B      db          32
0042CE8C      db          33
0042CE8D      db          34
0042CE8E      db          35
0042CE8F      db          36
0042CE90      db          37
0042CE91      db          38
0042CE92      db          39
0042CE93      db          40
0042CE94      db          41
0042CE95      db          42
0042CE96      db          43
0042CE97      db          44
0042CE98      db          45
0042CE99      db          46
0042CE9A      db          47
0042CE9B      db          48
0042CE9C      db          50
0042CE9D      db          49
0042CE9E      db          51
0042CE9F      db          52
0042CEA0      db          0
0042CEA1      db          0
0042CEA2      db          0
0042CEA3      db          0
0042CEA4      db          0
0042CEA5      db          0
0042CEA6      db          1
0042CEA7      db          2
0042CEA8      db          3
0042CEA9      db          4
0042CEAA      db          5
0042CEAB      db          6
0042CEAC      db          7
0042CEAD      db          8
0042CEAE      db          9
0042CEAF      db          10
0042CEB0      db          11
0042CEB1      db          12
0042CEB2      db          13
0042CEB3      db          14
0042CEB4      db          15
0042CEB5      db          16
0042CEB6      db          17
0042CEB7      db          18
0042CEB8      db          19
0042CEB9      db          20
0042CEBA      db          21
0042CEBB      db          22
0042CEBC      db          24
0042CEBD      db          23
0042CEBE      db          25
0042CEBF      db          26
0042CEC0      dd          0042D3C0
0042CEC4      dd          0042CF98
0042CEC8      dd          0042CFAA
0042CECC      dd          0042CFBC
0042CED0      dd          0042CFD1
0042CED4      dd          0042CFE6
0042CED8      dd          0042CFF8
0042CEDC      dd          0042D00A
0042CEE0      dd          0042D01C
0042CEE4      dd          0042D02E
0042CEE8      dd          0042D040
0042CEEC      dd          0042D055
0042CEF0      dd          0042D067
0042CEF4      dd          0042D07C
0042CEF8      dd          0042D08E
0042CEFC      dd          0042D0A0
0042CF00      dd          0042D0B5
0042CF04      dd          0042D0CA
0042CF08      dd          0042D0DF
0042CF0C      dd          0042D0F4
0042CF10      dd          0042D105
0042CF14      dd          0042D117
0042CF18      dd          0042D129
0042CF1C      dd          0042D13B
0042CF20      dd          0042D14D
0042CF24      dd          0042D15F
0042CF28      dd          0042D171
0042CF2C      dd          0042D186
0042CF30      dd          0042D19B
0042CF34      dd          0042D1AD
0042CF38      dd          0042D1C2
0042CF3C      dd          0042D1D7
0042CF40      dd          0042D1EC
0042CF44      dd          0042D201
0042CF48      dd          0042D216
0042CF4C      dd          0042D22B
0042CF50      dd          0042D240
0042CF54      dd          0042D255
0042CF58      dd          0042D26A
0042CF5C      dd          0042D27F
0042CF60      dd          0042D294
0042CF64      dd          0042D2A9
0042CF68      dd          0042D2BE
0042CF6C      dd          0042D2D3
0042CF70      dd          0042D2E8
0042CF74      dd          0042D2FD
0042CF78      dd          0042D312
0042CF7C      dd          0042D327
0042CF80      dd          0042D33C
0042CF84      dd          0042D351
0042CF88      dd          0042D366
0042CF8C      dd          0042D37B
0042CF90      dd          0042D390
0042CF94      dd          0042D3A5
0042CF98      add         dword ptr ds:,427;变量A
0042CFA2      add         dword ptr ds:,79;变量B
0042CFA9      ret
0042CFAA      add         dword ptr ds:,6BC;变量A
0042CFB4      add         dword ptr ds:,6F;变量B
0042CFBB      ret
0042CFBC      add         dword ptr ds:,491;变量A
0042CFC6      add         dword ptr ds:,2E2;变量B
0042CFD0      ret
0042CFD1      add         dword ptr ds:,474D;变量A
0042CFDB      add         dword ptr ds:,2FA;变量B
0042CFE5      ret
0042CFE6      add         dword ptr ds:,400;变量A
0042CFF0      add         dword ptr ds:,0E;变量B
0042CFF7      ret
0042CFF8      add         dword ptr ds:,6D0;变量A
0042D002      add         dword ptr ds:,0D;变量B
0042D009      ret
0042D00A      add         dword ptr ds:,67D;变量A
0042D014      add         dword ptr ds:,0C;变量B
0042D01B      ret
0042D01C      add         dword ptr ds:,750;变量A
0042D026      add         dword ptr ds:,0B;变量B
0042D02D      ret
0042D02E      add         dword ptr ds:,43C;变量A
0042D038      add         dword ptr ds:,63;变量B
0042D03F      ret
0042D040      add         dword ptr ds:,764;变量A
0042D04A      add         dword ptr ds:,378;变量B
0042D054      ret
0042D055      add         dword ptr ds:,0C0;变量A
0042D05F      add         dword ptr ds:,4D;变量B
0042D066      ret
0042D067      add         dword ptr ds:,277D;变量A
0042D071      add         dword ptr ds:,22B;变量B
0042D07B      ret
0042D07C      add         dword ptr ds:,81E;变量A
0042D086      add         dword ptr ds:,5A;变量B
0042D08D      ret
0042D08E      add         dword ptr ds:,0E07;变量A
0042D098      add         dword ptr ds:,62;变量B
0042D09F      ret
0042D0A0      add         dword ptr ds:,8E;变量A
0042D0AA      add         dword ptr ds:,1D2C;变量B
0042D0B4      ret
0042D0B5      add         dword ptr ds:,9A670;变量A
0042D0BF      add         dword ptr ds:,8C7F3;变量B
0042D0C9      ret
0042D0CA      add         dword ptr ds:,0D57;变量A
0042D0D4      add         dword ptr ds:,288;变量B
0042D0DE      ret
0042D0DF      add         dword ptr ds:,5FEB;变量A
0042D0E9      add         dword ptr ds:,21A;变量B
0042D0F3      ret
0042D0F4      add         dword ptr ds:,8B0;变量A
0042D0FE      inc         dword ptr ds:;变量B
0042D104      ret
0042D105      add         dword ptr ds:,4BB;变量A
0042D10F      add         dword ptr ds:,40;变量B
0042D116      ret
0042D117      add         dword ptr ds:,8C2;变量A
0042D121      add         dword ptr ds:,4B;变量B
0042D128      ret
0042D129      add         dword ptr ds:,1CA6;变量A
0042D133      add         dword ptr ds:,4E;变量B
0042D13A      ret
0042D13B      add         dword ptr ds:,395;变量A
0042D145      add         dword ptr ds:,26;变量B
0042D14C      ret
0042D14D      add         dword ptr ds:,251E;变量A
0042D157      add         dword ptr ds:,5;变量B
0042D15E      ret
0042D15F      add         dword ptr ds:,2D13;变量A
0042D169      add         dword ptr ds:,8;变量B
0042D170      ret
0042D171      add         dword ptr ds:,1900;变量A
0042D17B      add         dword ptr ds:,1C8;变量B
0042D185      ret
0042D186      add         dword ptr ds:,428;变量A                //变量A=变量A+0X428
0042D190      add         dword ptr ds:,1610;变量B                //变量B=变量B+0x1610
0042D19A      ret
0042D19B      add         dword ptr ds:,0B1630;变量A
0042D1A5      add         dword ptr ds:,2;变量B
0042D1AC      ret
0042D1AD      add         dword ptr ds:,0D86;变量A
0042D1B7      add         dword ptr ds:,270F;变量B
0042D1C1      ret
0042D1C2      add         dword ptr ds:,11A4;变量A
0042D1CC      add         dword ptr ds:,46FF33C;变量B
0042D1D6      ret
0042D1D7      add         dword ptr ds:,11F0A;变量A
0042D1E1      add         dword ptr ds:,8B3C;变量B
0042D1EB      ret
0042D1EC      add         dword ptr ds:,3CC2;变量A
0042D1F6      add         dword ptr ds:,8618;变量B
0042D200      ret
0042D201      add         dword ptr ds:,3E1A8;变量A
0042D20B      add         dword ptr ds:,6C81C;变量B
0042D215      ret
0042D216      add         dword ptr ds:,91E4;变量A
0042D220      add         dword ptr ds:,27E945;变量B
0042D22A      ret
0042D22B      add         dword ptr ds:,6B42;变量A
0042D235      add         dword ptr ds:,2FC7C3;变量B
0042D23F      ret
0042D240      add         dword ptr ds:,516A4;变量A
0042D24A      add         dword ptr ds:,0B8F47C;变量B
0042D254      ret
0042D255      add         dword ptr ds:,4345A;变量A
0042D25F      add         dword ptr ds:,115C7;变量B
0042D269      ret
0042D26A      add         dword ptr ds:,1BFDD9;变量A
0042D274      add         dword ptr ds:,12B54;变量B
0042D27E      ret
0042D27F      add         dword ptr ds:,286D;变量A
0042D289      add         dword ptr ds:,0B348C;变量B
0042D293      ret
0042D294      add         dword ptr ds:,401;变量A
0042D29E      add         dword ptr ds:,357CE174;变量B
0042D2A8      ret
0042D2A9      add         dword ptr ds:,674;变量A
0042D2B3      add         dword ptr ds:,317CD7;变量B
0042D2BD      ret
0042D2BE      add         dword ptr ds:,9C;变量A
0042D2C8      add         dword ptr ds:,7DD834;变量B
0042D2D2      ret
0042D2D3      add         dword ptr ds:,156;变量A
0042D2DD      add         dword ptr ds:,39CD0;变量B
0042D2E7      ret
0042D2E8      add         dword ptr ds:,8627;变量A
0042D2F2      add         dword ptr ds:,0BF44A;变量B
0042D2FC      ret
0042D2FD      add         dword ptr ds:,748190;变量A
0042D307      add         dword ptr ds:,854686;变量B
0042D311      ret
0042D312      add         dword ptr ds:,0A568;变量A
0042D31C      add         dword ptr ds:,13220;变量B
0042D326      ret
0042D327      add         dword ptr ds:,15592;变量A
0042D331      add         dword ptr ds:,302E;变量B
0042D33B      ret
0042D33C      add         dword ptr ds:,1DD9;变量A
0042D346      add         dword ptr ds:,1C43;变量B
0042D350      ret
0042D351      add         dword ptr ds:,266A;变量A
0042D35B      add         dword ptr ds:,2BA96C08;变量B
0042D365      ret
0042D366      add         dword ptr ds:,3CC0;变量A
0042D370      add         dword ptr ds:,4EFC8;变量B
0042D37A      ret
0042D37B      add         dword ptr ds:,8311;变量A
0042D385      add         dword ptr ds:,1C46;变量B
0042D38F      ret
0042D390      add         dword ptr ds:,0CE1B;变量A
0042D39A      add         dword ptr ds:,0B1664;变量B
0042D3A4      ret
0042D3A5      xor         edx,edx
0042D3A7      mov         eax,dword ptr ;TForm1.Edit1:TEdit
0042D3AD      call      TControl.SetText
0042D3B2      xor         eax,eax                              //EAX=0
0042D3B4      mov         ,eax;变量A                //变量A=0
0042D3B9      xor         eax,eax
0042D3BB      mov         ,eax;变量B                //变量B=0
0042D3C0      ret
这段代码也非常简单,其实就是一个字典,用输入的字符查字典,得到两个数,分别累加到变量A和变量B中,然后在try按钮点击事件中与输入的注册码进行比对。
于是,注册机也就很容易写了。
const
Code: array of Integer =(($0, $0), ($427, $79),($6BC, $6F),($491,$2E2),($474D,$2FA),($400, $E),($6D0,$D),
                                        ($67D, $C),($750, $B),($43C, $63),($764, $378),($C0, $4D),($277D, $22B),
                                        ($81E, $5A),($E07, $62),($8E, $1D2C),($9A670, $8C7F3),($D57, $288),($5FEB, $21A),
                                        ($8B0, $1),($4BB, $40),($8C2, $4B),($1CA6, $4E),($395, $26),($251E, $5),
                                        ($2D13, $8),($1900, $1C8),($428, $1610),($B1630, $2),($D86, $270F),($11A4, $46FF33C),
                                        ($11F0A, $8B3C),($3CC2, $8618),($3E1A8, $6C81C),($91E4, $27E945),($6B42, $2FC7C3),
                                        ($516A4, $B8F47C),($4345A, $115C7),($1BFDD9, $12B54),($286D, $B348C),($401, $357CE174),
                                        ($674, $317CD7),($9C, $7DD834),($156, $39CD0),($8627, $BF44A),($748190, $854686),($A568, $13220),
                                        ($15592, $302E),($1DD9, $1C43),($266A, $2BA96C08),($3CC0, $4EFC8),($8311, $1C46),($CE1B, $B1664),($-2, $-2));
function TMainFrm.GetCode(C : Byte ; idx : integer): Integer;
begin
Result :=0;
C:= C-8;
if C=$72 then
    Exit;
Result :=Code, idx];
end;

procedure TMainFrm.InitData;
var
i: Integer;
begin
Num:=53;
for i:=2 to 57 do
    Num :=0;
for i:=58 to 83 do
    Num := i-31;
Num :=50;
Num :=49;
for i:=84 to 89 do
    Num :=0;
for i:=90 to 115 do
    Num:=i-89;
Num :=24;
Num :=23;
end;

procedure TMainFrm.Button1Click(Sender: PObj);
var
i, iLen, s1, s2, r : Integer;
str1 : string;
begin
str1 :=Trim(edtName.Text);
iLen :=Length(str1);
s1 :=0;
s2 :=0;
for i:=1 to iLen do
begin
    r :=GetCode(Ord(str1), 0);
    if r =-2 then
      s1 :=0
    else
      s1 :=s1+r;
    r :=GetCode(Ord(str1), 1);
    if r =-2 then
      s2 :=0
    else
      s2 :=s2+r;
end;
edtCode1.Text :=IntToStr(s1);
edtCode2.Text :=IntToStr(s2);
end;

procedure TMainFrm.Button2Click(Sender: PObj);
begin
Form.Close();
end;

procedure TMainFrm.KOLForm1Show(Sender: PObj);
begin
InitData;
edtName.Focused :=True;
end;

用注册机生成的注册码再去注册,成功!(竟然说我是白痴,可恶!)


破解这个CM21,没有使用OD,完全凭借IDR反编译,分析代码制作出了注册机。主要是因为我对DELPHI太熟悉了,其他同学可以用OD跟踪调试,一样也可以看懂的。

最后,附上这个CM21(Cabeca.exe)以及我写的注册机。

肥牛 发表于 2017-6-15 12:12

panwanpeng 发表于 2017-6-15 12:06
分析得挺详细的,就适合我等新手学习。然而一开始的代码楼主没写注释,直接从16行才写,我就不懂16行之前的 ...

其实16行之前我也不知道是什么意思,DELPHI的程序,基本上每个事件的前面一些代码,都是这样的,所以如果用DeDe打开的情况下,这些代码是在*****Try之前的,我在http://www.52pojie.cn/thread-615448-1-1.html帖子里写了,Try之前的内容可以不用看。

pwp 发表于 2017-6-15 12:16

肥牛 发表于 2017-6-15 12:12
其实16行之前我也不知道是什么意思,DELPHI的程序,基本上每个事件的前面一些代码,都是这样的,所以如果 ...

{:1_893:}谢谢楼主百忙之中抽时间回复,我一定会努力学习的

jun57663796 发表于 2017-6-15 00:44

吾爱破解高手如云啊

sayuwil 发表于 2017-6-15 00:52

非常感谢,正好学习了,。

海鷫 发表于 2017-6-15 06:39

不错不错,谢谢分享

zq3332427 发表于 2017-6-15 07:52


非常感谢,学习一下

xintian 发表于 2017-6-15 08:42

完全看不懂。

赤水断lu 发表于 2017-6-15 10:10



非常感谢,学习一下

xiaofengzi 发表于 2017-6-15 10:12

好详细,学习了,楼主66哒

瓦特蜀黍 发表于 2017-6-15 10:46

不明觉厉前排出售瓜子{:1_931:}

pwp 发表于 2017-6-15 12:06

分析得挺详细的,就适合我等新手学习。然而一开始的代码楼主没写注释,直接从16行才写,我就不懂16行之前的代码是什么意思了。怀着疑问给个评分,盼望楼主能够答复,谢谢!
页: [1] 2
查看完整版本: 160个CM之21——算法分析及注册机