首页
社区
课程
招聘
SuperCHM2.2注册破解算法分析
发表于: 2006-3-14 00:31 7430

SuperCHM2.2注册破解算法分析

2006-3-14 00:31
7430

【破文标题】SuperCHM2.2注册破解算法分析
【破文作者】gg1211[CZG][PYG][PCG][D.4s]
【破解平台】WinXp
【作者邮箱】QIBINLEI@YAHOO.COM.CN
【破解工具】PEiD 、OD
【保护方式】机器码+用户名+序列号
【破解目的】学习简单算法破解
【破解声明】我是一只小小鸟,偶得一点心得,愿与大家分享:)
【软件名称】SuperCHM2.2
【下载地址】http://www.xmqm.com/ty/
【软件简介】SuperCHM是真正所见即所得的CHM制作工具,内置简单易用、功能齐全的网页编辑器,使您可以轻松地完成CHM制作,而不必在多个软件之间来回切换。SuperCHM具有以下特点:
软件采用hhp格式保存和读取,使软件通用性增强。
目录、索引可以直接定位到网页中的标签。
强大的反编译功能,反编译后直接在SuperCHM中读取出来,使用轻松便捷。
SuperCHM支持绝大部分CHM的功能设置,使您制作的CHM与众不同。
内置网页编辑器较好地结合了DHTMLEDIT,所见即所得,功能齐全。
采用MDI设计,同时可以编辑多个网页。
最新版本:V2.2
系统需求
SuperCHM适合于运行在Windows 98、Windows ME、Windows2000、Windows XP的平台
【破解步骤】
先用PEiD 侦测,发现为Borland Delphi 6.0 - 7.0,无壳
运行机器码为101701111149输入实验码gg1211
                                      123456789
有错误提示”你的注册码不正确,情重新输入“
od载入,根据错误提示向上翻来到这里下断
0050FBD4 /. 55         push   ebp               \\我在这里下断
0050FBD5 |. 8BEC       mov   ebp, esp
0050FBD7 |. 33C9       xor   ecx, ecx
0050FBD9 |. 51         push   ecx
0050FBDA |. 51         push   ecx
0050FBDB |. 51         push   ecx
0050FBDC |. 51         push   ecx
0050FBDD |. 51         push   ecx
0050FBDE |. 53         push   ebx
0050FBDF |. 56         push   esi
0050FBE0 |. 8BD8       mov   ebx, eax     \\机器码101701111149给edx
0050FBE2 |. 33C0       xor   eax, eax
0050FBE4 |. 55         push   ebp
0050FBE5 |. 68 F2FC5000   push   0050FCF2
0050FBEA |. 64:FF30     push   dword ptr fs:[eax]
0050FBED |. 64:8920     mov   fs:[eax], esp
0050FBF0 |. 8D4D FC     lea   ecx, [ebp-4]
0050FBF3 |. 8B93 1C030000 mov   edx, [ebx+31C]
0050FBF9 |. 8BC3       mov   eax, ebx
0050FBFB |. E8 BCFEFFFF   call   0050FABC       \\这个call要跟进,他是明码比较
0050FC00 |. 8B45 FC     mov   eax, [ebp-4]     \\在这里就出现注册码了,可以在这里
0050FC03 |. 50         push   eax                 做内存注册机,我们的目的是学习算法
0050FC04 |. 8D55 F8     lea   edx, [ebp-8]       跟进
0050FC07 |. 8B83 04030000 mov   eax, [ebx+304]
0050FC0D |. E8 D6CEF6FF   call   0047CAE8
0050FC12 |. 8B45 F8     mov   eax, [ebp-8]
0050FC15 |. 5A         pop   edx
0050FC16 |. E8 7192EFFF   call   00408E8C
0050FC1B |. 84C0       test   al, al
0050FC1D |. 0F84 A2000000 je     0050FCC5
0050FC23 |. B2 01       mov   dl, 1
0050FC25 |. A1 DC2D4400   mov   eax, [442DDC]
0050FC2A |. E8 AD32F3FF   call   00442EDC
0050FC2F |. 8BF0       mov   esi, eax
0050FC31 |. BA 01000080   mov   edx, 80000001
0050FC36 |. 8BC6       mov   eax, esi
0050FC38 |. E8 7B33F3FF   call   00442FB8
0050FC3D |. B1 01       mov   cl, 1
0050FC3F |. BA 08FD5000   mov   edx, 0050FD08             ; software\superchm
0050FC44 |. 8BC6       mov   eax, esi
0050FC46 |. E8 D533F3FF   call   00443020
0050FC4B |. 8D55 F4     lea   edx, [ebp-C]
0050FC4E |. 8B83 14030000 mov   eax, [ebx+314]
0050FC54 |. E8 8FCEF6FF   call   0047CAE8
0050FC59 |. 8B4D F4     mov   ecx, [ebp-C]
0050FC5C |. BA 24FD5000   mov   edx, 0050FD24             ; regname
0050FC61 |. 8BC6       mov   eax, esi
0050FC63 |. E8 EC38F3FF   call   00443554
0050FC68 |. 8D55 F0     lea   edx, [ebp-10]
0050FC6B |. 8B83 04030000 mov   eax, [ebx+304]
0050FC71 |. E8 72CEF6FF   call   0047CAE8
0050FC76 |. 8B4D F0     mov   ecx, [ebp-10]
0050FC79 |. BA 34FD5000   mov   edx, 0050FD34             ; regkey
0050FC7E |. 8BC6       mov   eax, esi
0050FC80 |. E8 CF38F3FF   call   00443554
0050FC85 |. 8BC6       mov   eax, esi
0050FC87 |. E8 FC32F3FF   call   00442F88
0050FC8C |. 8BC6       mov   eax, esi
0050FC8E |. E8 E93CEFFF   call   0040397C
0050FC93 |. 8D55 EC     lea   edx, [ebp-14]
0050FC96 |. 8B83 04030000 mov   eax, [ebx+304]
0050FC9C |. E8 47CEF6FF   call   0047CAE8
0050FCA1 |. 8B55 EC     mov   edx, [ebp-14]
0050FCA4 |. 8D83 20030000 lea   eax, [ebx+320]
0050FCAA |. E8 714BEFFF   call   00404820
0050FCAF |. B8 44FD5000   mov   eax, 0050FD44             ; 非常感谢您注册本软件!您的注册成功了。
0050FCB4 |. E8 1F93F2FF   call   00438FD8
0050FCB9 |. A1 44125B00   mov   eax, [5B1244]
0050FCBE |. E8 49A0F8FF   call   00499D0C
0050FCC3 |. EB 0A       jmp   short 0050FCCF
0050FCC5 |> B8 74FD5000   mov   eax, 0050FD74             ; 您的注册码不正确,请重新输入。

跟进来到这里
0050FABC /$ 55         push   ebp
0050FABD |. 8BEC       mov   ebp, esp
0050FABF |. 6A 00       push   0
0050FAC1 |. 6A 00       push   0
0050FAC3 |. 6A 00       push   0
0050FAC5 |. 6A 00       push   0
0050FAC7 |. 6A 00       push   0
0050FAC9 |. 53         push   ebx
0050FACA |. 8BD9       mov   ebx, ecx
0050FACC |. 8955 FC     mov   [ebp-4], edx
0050FACF |. 8B45 FC     mov   eax, [ebp-4]
0050FAD2 |. E8 A551EFFF   call   00404C7C
0050FAD7 |. 33C0       xor   eax, eax
0050FAD9 |. 55         push   ebp
0050FADA |. 68 A1FB5000   push   0050FBA1
0050FADF |. 64:FF30     push   dword ptr fs:[eax]
0050FAE2 |. 64:8920     mov   fs:[eax], esp
0050FAE5 |. 8D4D F8     lea   ecx, [ebp-8]
0050FAE8 |. BA 04000000   mov   edx, 4
0050FAED |. 8B45 FC     mov   eax, [ebp-4]
0050FAF0 |. E8 6BF9F2FF   call   0043F460
0050FAF5 |. 8B45 F8     mov   eax, [ebp-8]           \\取前四位机器码
0050FAF8 |. E8 CF98EFFF   call   004093CC             跟进004093CC
0050FAFD |. 8D4D F4     lea   ecx, [ebp-C]
0050FB00 |. BA 04000000   mov   edx, 4
0050FB05 |. E8 9A98EFFF   call   004093A4
0050FB0A |. 8D45 F8     lea   eax, [ebp-8]
0050FB0D |. 50         push   eax
0050FB0E |. B9 04000000   mov   ecx, 4
0050FB13 |. BA 05000000   mov   edx, 5
0050FB18 |. 8B45 FC     mov   eax, [ebp-4]
0050FB1B |. E8 34FAF2FF   call   0043F554
0050FB20 |. 8B45 F8     mov   eax, [ebp-8]
0050FB23 |. E8 A498EFFF   call   004093CC
0050FB28 |. 05 3E080000   add   eax, 83E
0050FB2D |. 8D4D F0     lea   ecx, [ebp-10]
0050FB30 |. BA 05000000   mov   edx, 5
0050FB35 |. E8 6A98EFFF   call   004093A4
0050FB3A |. 8D4D F8     lea   ecx, [ebp-8]
0050FB3D |. BA 04000000   mov   edx, 4
0050FB42 |. 8B45 FC     mov   eax, [ebp-4]
0050FB45 |. E8 86F9F2FF   call   0043F4D0
0050FB4A |. 8B45 F8     mov   eax, [ebp-8]
0050FB4D |. E8 7A98EFFF   call   004093CC
0050FB52 |. 83C0 6E     add   eax, 6E
0050FB55 |. 8D4D EC     lea   ecx, [ebp-14]
0050FB58 |. BA 04000000   mov   edx, 4
0050FB5D |. E8 4298EFFF   call   004093A4
0050FB62 |. 68 B8FB5000   push   0050FBB8                 ; t
0050FB67 |. FF75 F4     push   dword ptr [ebp-C]
0050FB6A |. 68 C4FB5000   push   0050FBC4                 ; -y
0050FB6F |. FF75 F0     push   dword ptr [ebp-10]
0050FB72 |. 68 D0FB5000   push   0050FBD0                 ; -
0050FB77 |. FF75 EC     push   dword ptr [ebp-14]
0050FB7A |. 8BC3       mov   eax, ebx
0050FB7C |. BA 06000000   mov   edx, 6
0050FB81 |. E8 C64FEFFF   call   00404B4C
0050FB86 |. 33C0       xor   eax, eax
0050FB88 |. 5A         pop   edx
0050FB89 |. 59         pop   ecx
0050FB8A |. 59         pop   ecx
0050FB8B |. 64:8910     mov   fs:[eax], edx
0050FB8E |. 68 A8FB5000   push   0050FBA8
0050FB93 |> 8D45 EC     lea   eax, [ebp-14]
0050FB96 |. BA 05000000   mov   edx, 5
0050FB9B |. E8 504CEFFF   call   004047F0
0050FBA0 \. C3         retn

跟进来到这里
004093CC /$ 53         push   ebx
004093CD |. 56         push   esi
004093CE |. 83C4 F4     add   esp, -0C
004093D1 |. 8BD8       mov   ebx, eax
004093D3 |. 8BD4       mov   edx, esp
004093D5 |. 8BC3       mov   eax, ebx
004093D7 |. E8 609FFFFF   call   0040333C           \\跟进
004093DC |. 8BF0       mov   esi, eax
004093DE |. 833C24 00   cmp   dword ptr [esp], 0
004093E2 |. 74 19       je     short 004093FD
004093E4 |. 895C24 04   mov   [esp+4], ebx
004093E8 |. C64424 08 0B mov   byte ptr [esp+8], 0B
004093ED |. 8D5424 04   lea   edx, [esp+4]
004093F1 |. A1 D0EC5A00   mov   eax, [5AECD0]
004093F6 |. 33C9       xor   ecx, ecx
004093F8 |. E8 CBF8FFFF   call   00408CC8
004093FD |> 8BC6       mov   eax, esi
004093FF |. 83C4 0C     add   esp, 0C
00409402 |. 5E         pop   esi
00409403 |. 5B         pop   ebx
00409404 \. C3         retn

到这里
0040333C /$ 53         push   ebx
0040333D |. 56         push   esi
0040333E |. 57         push   edi
0040333F |. 89C6       mov   esi, eax
00403341 |. 50         push   eax
00403342 |. 85C0       test   eax, eax
00403344 |. 74 6C       je     short 004033B2
00403346 |. 31C0       xor   eax, eax
00403348 |. 31DB       xor   ebx, ebx
0040334A |. BF CCCCCC0C   mov   edi, 0CCCCCCC
0040334F |> 8A1E       /mov   bl, [esi]            
00403351 |. 46         |inc   esi
00403352 |. 80FB 20     |cmp   bl, 20             \\是否为空格
00403355 |.^ 74 F8       \je     short 0040334F
00403357 |. B5 00       mov   ch, 0
00403359 |. 80FB 2D     cmp   bl, 2D             \\是否为-
0040335C |. 74 62       je     short 004033C0
0040335E |. 80FB 2B     cmp   bl, 2B                 \\是否为+
00403361 |. 74 5F       je     short 004033C2
00403363 |> 80FB 24     cmp   bl, 24               \\是否为$
00403366 |. 74 5F       je     short 004033C7
00403368 |. 80FB 78     cmp   bl, 78                 \\是否为x
0040336B |. 74 5A       je     short 004033C7
0040336D |. 80FB 58     cmp   bl, 58                 \\是否为X
00403370 |. 74 55       je     short 004033C7
00403372 |. 80FB 30     cmp   bl, 30                   \\是否为0
00403375 |. 75 13       jnz   short 0040338A
00403377 |. 8A1E       mov   bl, [esi]     ; Case 30 ('0') ofswitch00403363
00403379 |. 46         inc   esi
0040337A |. 80FB 78     cmp   bl, 78
0040337D |. 74 48       je     short 004033C7
0040337F |. 80FB 58     cmp   bl, 58
00403382 |. 74 43       je     short 004033C7
00403384 |. 84DB       test   bl, bl
00403386 |. 74 20       je     short 004033A8
00403388 |. EB 04       jmp   short 0040338E
0040338A |> 84DB       test   bl, bl
0040338C |. 74 2D       je     short 004033BB
0040338E |> 80EB 30     /sub   bl, 30   \\这里就很重要了,这个循环进行最重要的代码
00403391 |. 80FB 09     |cmp   bl, 9         \\运算
00403394 |. 77 25       |ja     short 004033BB   \\将得到的3段四位机器码的值
00403396 |. 39F8       |cmp   eax, edi           \\逐为循环
00403398 |. 77 21       |ja     short 004033BB      
0040339A |. 8D0480     |lea   eax, [eax+eax*4]     
0040339D |. 01C0       |add   eax, eax
0040339F |. 01D8       |add   eax, ebx               \\得到的值存放在eax中
004033A1 |. 8A1E       |mov   bl, [esi]
004033A3 |. 46         |inc   esi
004033A4 |. 84DB       |test   bl, bl
004033A6 |.^ 75 E6       \jnz   short 0040338E
004033A8 |> FECD       dec   ch
004033AA |. 74 09       je     short 004033B5
004033AC |. 85C0       test   eax, eax
004033AE |. 7D 54       jge   short 00403404
004033B0 |. EB 09       jmp   short 004033BB
004033B2 |> 46         inc   esi
004033B3 |. EB 06       jmp   short 004033BB
004033B5 |> F7D8       neg   eax
004033B7 |. 7E 4B       jle   short 00403404
004033B9 |. 78 49       js     short 00403404
004033BB |> 5B         pop   ebx                     ; Default case of switch 004033DB
004033BC |. 29DE       sub   esi, ebx
004033BE |. EB 47       jmp   short 00403407
004033C0 |> FEC5       inc   ch
004033C2 |> 8A1E       mov   bl, [esi]
004033C4 |. 46         inc   esi
004033C5 |.^ EB 9C       jmp   short 00403363
004033C7 |> BF FFFFFF0F   mov   edi, 0FFFFFFF             ; Cases 24 ('$'),58 ('X'),78 ('x') of switch 00403363
004033CC |. 8A1E       mov   bl, [esi]
004033CE |. 46         inc   esi
004033CF |. 84DB       test   bl, bl
004033D1 |.^ 74 DF       je     short 004033B2
004033D3 |> 80FB 61     /cmp   bl, 61
004033D6 |. 72 03       |jb     short 004033DB
004033D8 |. 80EB 20     |sub   bl, 20
004033DB |> 80EB 30     |sub   bl, 30                 ; Switch (cases 30..46)
004033DE |. 80FB 09     |cmp   bl, 9
004033E1 |. 76 0B       |jbe   short 004033EE
004033E3 |. 80EB 11     |sub   bl, 11
004033E6 |. 80FB 05     |cmp   bl, 5
004033E9 |.^ 77 D0       |ja     short 004033BB
004033EB |. 80C3 0A     |add   bl, 0A                 ; Cases 41 ('A'),42 ('B'),43 ('C'),44 ('D'),45 ('E'),46 ('F') of switch 004033DB
004033EE |> 39F8       |cmp   eax, edi                 ; Cases 30 ('0'),31 ('1'),32 ('2'),33 ('3'),34 ('4'),35 ('5'),36 ('6'),37 ('7'),38 ('8'),39 ('9') of switch 004033DB
004033F0 |.^ 77 C9       |ja     short 004033BB
004033F2 |. C1E0 04     |shl   eax, 4
004033F5 |. 01D8       |add   eax, ebx
004033F7 |. 8A1E       |mov   bl, [esi]
004033F9 |. 46         |inc   esi
004033FA |. 84DB       |test   bl, bl
004033FC |.^ 75 D5       \jnz   short 004033D3
004033FE |. FECD       dec   ch
00403400 |. 75 02       jnz   short 00403404
00403402 |. F7D8       neg   eax
00403404 |> 59         pop   ecx
00403405 |. 31F6       xor   esi, esi
00403407 |> 8932       mov   [edx], esi
00403409 |. 5F         pop   edi
0040340A |. 5E         pop   esi
0040340B |. 5B         pop   ebx
0040340C \. C3         retn

算了,这个是在不好写破文,这么多的call调用
我直接总结算法
给除我写的算法注册机得了
刚刚学vb编程,书都没有看就在上,程序写得是在是难,请高手指导一二

Dim jiqima As String
Private Sub Form_Load()
End Sub
Private Sub Label4_Click()
End
End Sub
Public Sub Label5_Click()
jiqima = Text1.Text
If Len(jiqima) <> 12 Then
e = MsgBox("错误!请输入本机注册时显示的12位机器码!", 0, "错误提示")
GoTo kk
End If
a = Left(jiqima, 4)
temp = Right(jiqima, 8)
b = Left(temp, 4)
c = Right(temp, 4)
For i = 1 To 4
  eax1 = eax1 * &HA
  ebx1 = Val(Mid(a, i, 1))
  eax1 = eax1 + ebx1
Next i
eax1 = Hex(eax1)
d = Len(eax1)
Select Case d
Case 1
  eax1 = "000" + eax1
Case 2
  eax1 = "00" + eax1
Case 3
  eax1 = "0" + eax1
Case 4
  ex1 = "eax1"
End Select
For i = 1 To 4
  eax2 = eax2 * &HA
  ebx2 = Val(Mid(b, i, 1))
  eax2 = eax2 + ebx2
Next i
eax2 = Hex(eax2 + &H83E)
e = Len(eax2)
Select Case e
Case 1
  eax2 = "0000" + eax2
Case 2
  eax2 = "000" + eax2
Case 3
  eax2 = "00" + eax2
Case 4
  eax2 = "0" + eax2
Case 4
  eax2 = "eax2"
End Select
For i = 1 To 4
  eax3 = eax3 * &HA
  ebx3 = Val(Mid(c, i, 1))
  eax3 = eax3 + ebx3
Next i
eax3 = Hex(eax3 + &H6E)
f = Len(eax3)
Select Case f
Case 1
  eax3 = "000" + eax3
Case 2
  eax3 = "00" + eax3
Case 3
  eax3 = "0" + eax3
Case 4
  ex3 = "eax3"
End Select
Text2.Text = "T" + eax1 + "-" + "Y" + eax2 + "-" + eax3
kk: End Sub


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

收藏
免费 7
支持
分享
最新回复 (10)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
总算有结果了,后半部分的跟起来倒是比较简单,就是注册码那一块.前半部分机器码的获取,让我折腾了好几天.跟踪不得法吧.知道内存,但内存被多次调用,不得不放弃.今天换了个地址,总算成了.
算法并不复杂.取机器显示卡的描述部分.从第9个字符开始,比如我用"nvidia riva tnt2..",取6个字符(不足判断没再找,..),用10进制表达各个字符,组成新的字符串,即为机器码.这里就"iva tn",十进制就是73 86 65 32 84 78.
注册码,是把机器码分成3组,每4位为一组,再把它们当成整数,转进16进制.这样分别是1CDA 1984 211E,再分别加上0 83E 6E,这样结果就是1CDA 21C2 218C.实际注册码是6段,分别是 T 1CDA -Y 021C2(要求是5位,不足补0) - 218C,把它们连成一个字符串,就是注册码了.
首次发破文.不足请指教.
2006-3-14 10:10
0
雪    币: 242
活跃值: (163)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
3
2006-3-14 10:20
0
雪    币: 50
活跃值: (145)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
4
houhou
2006-3-14 13:11
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5


学习了
2006-3-14 13:45
0
雪    币: 207
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
好文章啊,gg1211辛苦了!
2006-3-14 14:25
0
雪    币: 2506
活跃值: (1030)
能力值: (RANK:990 )
在线值:
发帖
回帖
粉丝
7
楼上的 HYQ9 是汉化新世纪论坛上的 HYQ9 吧?呵呵,你那个头像还是很有个性的。
2006-3-14 14:41
0
雪    币: 390
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不错啊
我现在就是写不出注册机啊
正在努力中~~~~~
2006-3-14 17:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
我今天找你上面的调试了一下,我发现我的Ollydbg v1.10 汉化不能显示中文,请问你用的Ollydbg是那个版本。
2006-3-14 18:09
0
雪    币: 390
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
老大啊
0050FBE0 |. 8BD8       mov   ebx, eax     \\机器码101701111149给edx
你是怎么分析知道把机器码放入到edx的?
2006-3-14 18:26
0
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
11
这个程序好像不注册也没有功能限制:
void CKeygenDlg::OnOK()
{
        // TODO: Add extra validation here
        UpdateData(true);
        char part[8];
        m_Edit2 = 'T';
        byte length = m_Edit1.GetLength ();
        if ( length != 12 ){
                m_Edit2 = "机器码应该有 12 个字符";
                UpdateData (false);
                return;
        }
        sprintf (part,"%04X",atoi(m_Edit1.Left(4)));
        m_Edit2 += part;
        m_Edit2 += "-Y";
        sprintf (part,"%05X",atoi(m_Edit1.Mid (4,4))+0x83E);
        m_Edit2 += part;
        m_Edit2 += '-';
        sprintf (part,"%04X",atoi(m_Edit1.Right(4))+0x6E);
        m_Edit2 += part;
        UpdateData(false);       
}
2006-3-14 22:13
0
游客
登录 | 注册 方可回帖
返回
//