SISWare 4.2注册过程(VB)
 

标题:SISWare 4.2注册过程(VB)
链接:http://www.unpack.cn/viewthread.php?tid=20737
贴者:lelfei
日期:2007-12-25 18:01

SISWare 4.2(自己搜索下载地址)
软件大小:3.88 MB
SISWare是最好的Symbian应用程序安装包打包解包工具适用于任何Symbian9.x版的sis和sisx文件。
主要功能包括:
·打开SIS文件或打开PKG文件
·从sis文件中提取文件.支持多种SIS文件
·编辑SIS文件或PKG文件.生成SIS文件
·建立sis文件时可以设置选项
·批量提取sis文件
·签名或去除签名,可创建自用签名证书

前言:
复习一下VB程序的分析方法,适合初级VB CRACKER观看。

前段时间刚买了N73,找了下相关的工具,这款软件不错,但是需要序列号,干脆自己研究一下吧!

先用PEiD查看一下:Microsoft Visual Basic 5.0 / 6.0。没有壳,直接开工!

用OD载入,
用UltraStringRef插件搜索所有的Unicode字符串,
查找出错的消息框文字:"Invalid serial number, please try again",直接定位到0044A5FC,往上翻到这一段代码的起始位置。
也可以查找消息框API:rtcMsgBox来快速定位注册码处理过程。

……
00712C66  lea edx,dword ptr ss:[ebp-20]
00712C69  mov ebx,eax
00712C6B  mov ecx,dword ptr ds:[ebx]
00712C6D  push edx
00712C6E  push ebx
00712C6F  call dword ptr ds:[ecx+A0]                            ;  取注册码第一节s1
00712C75  fclex
00712C77  cmp eax,edi
00712C79  jge short SISWare.00712C8D
00712C7B  push 0A0
00712C80  push SISWare.00435B88
00712C85  push ebx
00712C86  push eax
00712C87  call dword ptr ds:[<&MSVBVM60.__vbaHresultCheckObj>]  ;  MSVBVM60.__vbaHresultCheckObj
00712C8D  mov eax,dword ptr ss:[ebp-20]
00712C90  push eax
00712C91  call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]          ;  Len(s1)
00712C97  lea ecx,dword ptr ss:[ebp-20]
00712C9A  mov dword ptr ss:[ebp-C4],eax
00712CA0  mov dword ptr ss:[ebp-18],1                           ;  初始化循环变量i
00712CA7  call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]          ;  MSVBVM60.__vbaFreeStr
00712CAD  mov ebx,dword ptr ds:[<&MSVBVM60.__vbaFreeObj>]       ;  MSVBVM60.__vbaFreeObj
00712CB3  lea ecx,dword ptr ss:[ebp-34]
00712CB6  call ebx                                              ;  <&MSVBVM60.__vbaFreeObj>
00712CB8  mov edi,dword ptr ds:[<&MSVBVM60.__vbaStrMove>]       ;  MSVBVM60.__vbaStrMove
00712CBE  mov ecx,dword ptr ss:[ebp-C4]                         ;  --------循环开始--------
00712CC4  cmp dword ptr ss:[ebp-18],ecx                         ;  cmp i,Len(s1)
00712CC7  jg SISWare.00712EAA                                   ;  是否达到循环次数?
00712CCD  fild dword ptr ss:[ebp-18]                            ;  i
00712CD0  cmp dword ptr ds:[751000],0
00712CD7  jnz short SISWare.00712CE1
00712CD9  fdiv qword ptr ds:[402D08]                            ;  i/2
00712CDF  jmp short SISWare.00712CF2
00712CE1  push dword ptr ds:[402D0C]
00712CE7  push dword ptr ds:[402D08]
00712CED  call 
00712CF2  fstp qword ptr ss:[ebp-100]
00712CF8  fild dword ptr ss:[ebp-18]                            ;  i
00712CFB  cmp dword ptr ds:[751000],0
00712D02  jnz short SISWare.00712D0C
00712D04  fdiv qword ptr ds:[402D08]                            ;  i/2
00712D0A  jmp short SISWare.00712D1D
00712D0C  push dword ptr ds:[402D0C]
00712D12  push dword ptr ds:[402D08]
00712D18  call 
00712D1D  call dword ptr ds:[<&MSVBVM60.__vbaFPFix>]            ;  Fix(i/2)
00712D23  fcomp qword ptr ss:[ebp-100]                          ;  cmp Fix(i/2),i/2
00712D29  fstsw ax
00712D2B  test ah,40
00712D2E  jnz SISWare.00712DE3                                  ;  当i为偶数时跳转
00712D34  mov edx,dword ptr ds:[esi]                            ;  ----当i为奇数时----
00712D36  push esi
00712D37  call dword ptr ds:[edx+314]
00712D3D  push eax
00712D3E  lea eax,dword ptr ss:[ebp-34]
00712D41  push eax
00712D42  call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]           ;  MSVBVM60.__vbaObjSet
00712D48  mov eax,dword ptr ss:[ebp-34]
00712D4B  mov edx,dword ptr ss:[ebp-18]
00712D4E  lea ecx,dword ptr ss:[ebp-54]
00712D51  push ecx
00712D52  mov dword ptr ss:[ebp-3C],eax
00712D55  push edx
00712D56  lea eax,dword ptr ss:[ebp-44]
00712D59  push eax
00712D5A  lea ecx,dword ptr ss:[ebp-64]
00712D5D  push ecx
00712D5E  mov dword ptr ss:[ebp-4C],1
00712D65  mov dword ptr ss:[ebp-54],2
00712D6C  mov dword ptr ss:[ebp-34],0
00712D73  mov dword ptr ss:[ebp-44],9
00712D7A  call dword ptr ds:[<&MSVBVM60.#632>]                  ;  mid(s1,i,1)
00712D80  mov edx,dword ptr ss:[ebp-1C]
00712D83  push edx
00712D84  lea eax,dword ptr ss:[ebp-64]
00712D87  push eax
00712D88  lea ecx,dword ptr ss:[ebp-20]
00712D8B  push ecx
00712D8C  call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]        ;  MSVBVM60.__vbaStrVarVal
00712D92  push eax
00712D93  call dword ptr ds:[<&MSVBVM60.#516>]                  ;  Asc(mid(s1,i,1))
00712D99  add eax,80                                            ;  Asc(mid(s1,i,1))+80
00712D9E  push eax
00712D9F  call dword ptr ds:[<&MSVBVM60.__vbaStrI2>]            ;  Str(Asc(mid(s1,i,1))+80)
00712DA5  mov edx,eax
00712DA7  lea ecx,dword ptr ss:[ebp-24]
00712DAA  call edi
00712DAC  push eax
00712DAD  call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]           ;  保存Str
00712DB3  mov edx,eax
00712DB5  lea ecx,dword ptr ss:[ebp-1C]
00712DB8  call edi
00712DBA  lea edx,dword ptr ss:[ebp-24]
00712DBD  push edx
00712DBE  lea eax,dword ptr ss:[ebp-20]
00712DC1  push eax
00712DC2  push 2
00712DC4  call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>]      ;  MSVBVM60.__vbaFreeStrList
00712DCA  add esp,0C
00712DCD  lea ecx,dword ptr ss:[ebp-34]
00712DD0  call ebx
00712DD2  lea ecx,dword ptr ss:[ebp-64]
00712DD5  push ecx
00712DD6  lea edx,dword ptr ss:[ebp-54]
00712DD9  push edx
00712DDA  lea eax,dword ptr ss:[ebp-44]
00712DDD  push eax
00712DDE  jmp SISWare.00712E8D
00712DE3  mov ecx,dword ptr ds:[esi]                            ;  ----当i为偶数时----
00712DE5  push esi
00712DE6  call dword ptr ds:[ecx+314]
00712DEC  push eax
00712DED  lea edx,dword ptr ss:[ebp-34]
00712DF0  push edx
00712DF1  call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]           ;  MSVBVM60.__vbaObjSet
00712DF7  mov eax,dword ptr ss:[ebp-34]
00712DFA  mov ecx,dword ptr ss:[ebp-18]
00712DFD  mov dword ptr ss:[ebp-3C],eax
00712E00  lea eax,dword ptr ss:[ebp-54]
00712E03  push eax
00712E04  push ecx
00712E05  lea edx,dword ptr ss:[ebp-44]
00712E08  push edx
00712E09  lea eax,dword ptr ss:[ebp-64]
00712E0C  push eax
00712E0D  mov dword ptr ss:[ebp-4C],1
00712E14  mov dword ptr ss:[ebp-54],2
00712E1B  mov dword ptr ss:[ebp-34],0
00712E22  mov dword ptr ss:[ebp-44],9
00712E29  call dword ptr ds:[<&MSVBVM60.#632>]                  ;  mid(s1,i,1)
00712E2F  mov ecx,dword ptr ss:[ebp-1C]
00712E32  push ecx
00712E33  lea edx,dword ptr ss:[ebp-64]
00712E36  push edx
00712E37  lea eax,dword ptr ss:[ebp-20]
00712E3A  push eax
00712E3B  call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]        ;  MSVBVM60.__vbaStrVarVal
00712E41  push eax
00712E42  call dword ptr ds:[<&MSVBVM60.#516>]                  ;  Asc(mid(s1,i,1))
00712E48  add eax,0C8                                           ;  Asc(mid(s1,i,1))+C8
00712E4D  push eax
00712E4E  call dword ptr ds:[<&MSVBVM60.__vbaStrI2>]            ;  Str(Asc(mid(s1,i,1))+C8)
00712E54  mov edx,eax
00712E56  lea ecx,dword ptr ss:[ebp-24]
00712E59  call edi
00712E5B  push eax
00712E5C  call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]           ;  保存Str
00712E62  mov edx,eax
00712E64  lea ecx,dword ptr ss:[ebp-1C]
00712E67  call edi
00712E69  lea ecx,dword ptr ss:[ebp-24]
00712E6C  push ecx
00712E6D  lea edx,dword ptr ss:[ebp-20]
00712E70  push edx
00712E71  push 2
00712E73  call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>]      ;  MSVBVM60.__vbaFreeStrList
00712E79  add esp,0C
00712E7C  lea ecx,dword ptr ss:[ebp-34]
00712E7F  call ebx
00712E81  lea eax,dword ptr ss:[ebp-64]
00712E84  push eax
00712E85  lea ecx,dword ptr ss:[ebp-54]
00712E88  push ecx
00712E89  lea edx,dword ptr ss:[ebp-44]
00712E8C  push edx
00712E8D  push 3
00712E8F  call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>]      ;  MSVBVM60.__vbaFreeVarList
00712E95  mov ecx,dword ptr ss:[ebp-18]
00712E98  mov eax,1
00712E9D  add esp,10
00712EA0  add ecx,eax
00712EA2  mov dword ptr ss:[ebp-18],ecx
00712EA5  jmp SISWare.00712CBE                                  ;  --------循环结束--------
00712EAA  mov eax,dword ptr ds:[esi]
00712EAC  push esi
00712EAD  call dword ptr ds:[eax+318]
00712EB3  push eax
00712EB4  lea ecx,dword ptr ss:[ebp-34]
00712EB7  push ecx
00712EB8  call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]           ;  MSVBVM60.__vbaObjSet
00712EBE  mov edx,dword ptr ds:[eax]
00712EC0  lea ecx,dword ptr ss:[ebp-20]
00712EC3  push ecx
00712EC4  push eax
00712EC5  mov dword ptr ss:[ebp-B8],eax
00712ECB  call dword ptr ds:[edx+A0]                            ;  取注册码第二节s2
00712ED1  fclex
00712ED3  test eax,eax
00712ED5  jge short SISWare.00712EEF
00712ED7  mov edx,dword ptr ss:[ebp-B8]
00712EDD  push 0A0
00712EE2  push SISWare.00435B88
00712EE7  push edx
00712EE8  push eax
00712EE9  call dword ptr ds:[<&MSVBVM60.__vbaHresultCheckObj>]  ;  MSVBVM60.__vbaHresultCheckObj
00712EEF  mov eax,dword ptr ss:[ebp-20]
00712EF2  push eax
00712EF3  call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]          ;  Len(s2)
00712EF9  lea ecx,dword ptr ss:[ebp-20]
00712EFC  mov dword ptr ss:[ebp-CC],eax
00712F02  mov dword ptr ss:[ebp-18],1                           ;  初始化循环变量i
00712F09  call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]          ;  MSVBVM60.__vbaFreeStr
00712F0F  lea ecx,dword ptr ss:[ebp-34]
00712F12  call ebx
00712F14  mov ecx,dword ptr ss:[ebp-CC]                         ;  --------循环开始--------
00712F1A  cmp dword ptr ss:[ebp-18],ecx                         ;  cmp i,Len(s2)
00712F1D  jg SISWare.007130FC                                   ;  是否达到循环次数?
00712F23  fild dword ptr ss:[ebp-18]                            ;  i
00712F26  cmp dword ptr ds:[751000],0
00712F2D  jnz short SISWare.00712F37
00712F2F  fdiv qword ptr ds:[402D08]                            ;  i/2
00712F35  jmp short SISWare.00712F48
00712F37  push dword ptr ds:[402D0C]
00712F3D  push dword ptr ds:[402D08]
00712F43  call 
00712F48  fstp qword ptr ss:[ebp-108]
00712F4E  fild dword ptr ss:[ebp-18]                            ;  i
00712F51  cmp dword ptr ds:[751000],0
00712F58  jnz short SISWare.00712F62
00712F5A  fdiv qword ptr ds:[402D08]                            ;  i/2
00712F60  jmp short SISWare.00712F73
00712F62  push dword ptr ds:[402D0C]
00712F68  push dword ptr ds:[402D08]
00712F6E  call 
00712F73  call dword ptr ds:[<&MSVBVM60.__vbaFPFix>]            ;  Fix(i/2)
00712F79  fcomp qword ptr ss:[ebp-108]                          ;  cmp Fix(i/2),i/2
00712F7F  fstsw ax
00712F81  test ah,40
00712F84  jnz SISWare.00713037                                  ;  当i为偶数时跳转
00712F8A  mov edx,dword ptr ds:[esi]                            ;  ----当i为奇数时----
00712F8C  push esi
00712F8D  call dword ptr ds:[edx+318]
00712F93  push eax
00712F94  lea eax,dword ptr ss:[ebp-34]
00712F97  push eax
00712F98  call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]           ;  MSVBVM60.__vbaObjSet
00712F9E  mov eax,dword ptr ss:[ebp-34]
00712FA1  mov edx,dword ptr ss:[ebp-18]
00712FA4  lea ecx,dword ptr ss:[ebp-54]
00712FA7  push ecx
00712FA8  mov dword ptr ss:[ebp-3C],eax
00712FAB  push edx
00712FAC  lea eax,dword ptr ss:[ebp-44]
00712FAF  push eax
00712FB0  lea ecx,dword ptr ss:[ebp-64]
00712FB3  push ecx
00712FB4  mov dword ptr ss:[ebp-4C],1
00712FBB  mov dword ptr ss:[ebp-54],2
00712FC2  mov dword ptr ss:[ebp-34],0
00712FC9  mov dword ptr ss:[ebp-44],9
00712FD0  call dword ptr ds:[<&MSVBVM60.#632>]                  ;  mid(s2,i,1)
00712FD6  mov edx,dword ptr ss:[ebp-1C]
00712FD9  push edx
00712FDA  lea eax,dword ptr ss:[ebp-64]
00712FDD  push eax
00712FDE  lea ecx,dword ptr ss:[ebp-20]
00712FE1  push ecx
00712FE2  call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]        ;  MSVBVM60.__vbaStrVarVal
00712FE8  push eax
00712FE9  call dword ptr ds:[<&MSVBVM60.#516>]                  ;  Asc(mid(s2,i,1))
00712FEF  add eax,28                                            ;  Asc(mid(s2,i,1))+28
00712FF2  push eax
00712FF3  call dword ptr ds:[<&MSVBVM60.__vbaStrI2>]            ;  Str(Asc(mid(s2,i,1))+28)
00712FF9  mov edx,eax
00712FFB  lea ecx,dword ptr ss:[ebp-24]
00712FFE  call edi
00713000  push eax
00713001  call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]           ;  保存Str
00713007  mov edx,eax
00713009  lea ecx,dword ptr ss:[ebp-1C]
0071300C  call edi
0071300E  lea edx,dword ptr ss:[ebp-24]
00713011  push edx
00713012  lea eax,dword ptr ss:[ebp-20]
00713015  push eax
00713016  push 2
00713018  call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>]      ;  MSVBVM60.__vbaFreeStrList
0071301E  add esp,0C
00713021  lea ecx,dword ptr ss:[ebp-34]
00713024  call ebx
00713026  lea ecx,dword ptr ss:[ebp-64]
00713029  push ecx
0071302A  lea edx,dword ptr ss:[ebp-54]
0071302D  push edx
0071302E  lea eax,dword ptr ss:[ebp-44]
00713031  push eax
00713032  jmp SISWare.007130DF
00713037  mov ecx,dword ptr ds:[esi]                            ;  ----当i为偶数时----
00713039  push esi
0071303A  call dword ptr ds:[ecx+318]
00713040  push eax
00713041  lea edx,dword ptr ss:[ebp-34]
00713044  push edx
00713045  call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]           ;  MSVBVM60.__vbaObjSet
0071304B  mov eax,dword ptr ss:[ebp-34]
0071304E  mov ecx,dword ptr ss:[ebp-18]
00713051  mov dword ptr ss:[ebp-3C],eax
00713054  lea eax,dword ptr ss:[ebp-54]
00713057  push eax
00713058  push ecx
00713059  lea edx,dword ptr ss:[ebp-44]
0071305C  push edx
0071305D  lea eax,dword ptr ss:[ebp-64]
00713060  push eax
00713061  mov dword ptr ss:[ebp-4C],1
00713068  mov dword ptr ss:[ebp-54],2
0071306F  mov dword ptr ss:[ebp-34],0
00713076  mov dword ptr ss:[ebp-44],9
0071307D  call dword ptr ds:[<&MSVBVM60.#632>]                  ;  mid(s2,i,1)
00713083  mov ecx,dword ptr ss:[ebp-1C]
00713086  push ecx
00713087  lea edx,dword ptr ss:[ebp-64]
0071308A  push edx
0071308B  lea eax,dword ptr ss:[ebp-20]
0071308E  push eax
0071308F  call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]        ;  MSVBVM60.__vbaStrVarVal
00713095  push eax
00713096  call dword ptr ds:[<&MSVBVM60.#516>]                  ;  Asc(mid(s2,i,1))
0071309C  add eax,3C                                            ;  Asc(mid(s2,i,1))+3C
0071309F  push eax
007130A0  call dword ptr ds:[<&MSVBVM60.__vbaStrI2>]            ;  Str(Asc(mid(s2,i,1))+3C)
007130A6  mov edx,eax
007130A8  lea ecx,dword ptr ss:[ebp-24]
007130AB  call edi
007130AD  push eax
007130AE  call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]           ;  保存Str
007130B4  mov edx,eax
007130B6  lea ecx,dword ptr ss:[ebp-1C]
007130B9  call edi
007130BB  lea ecx,dword ptr ss:[ebp-24]
007130BE  push ecx
007130BF  lea edx,dword ptr ss:[ebp-20]
007130C2  push edx
007130C3  push 2
007130C5  call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>]      ;  MSVBVM60.__vbaFreeStrList
007130CB  add esp,0C
007130CE  lea ecx,dword ptr ss:[ebp-34]
007130D1  call ebx
007130D3  lea eax,dword ptr ss:[ebp-64]
007130D6  push eax
007130D7  lea ecx,dword ptr ss:[ebp-54]
007130DA  push ecx
007130DB  lea edx,dword ptr ss:[ebp-44]
007130DE  push edx
007130DF  push 3
007130E1  call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>]      ;  MSVBVM60.__vbaFreeVarList
007130E7  mov ecx,dword ptr ss:[ebp-18]
007130EA  mov eax,1
007130EF  add esp,10
007130F2  add ecx,eax
007130F4  mov dword ptr ss:[ebp-18],ecx
007130F7  jmp SISWare.00712F14                                  ;  --------循环结束--------
007130FC  mov eax,dword ptr ds:[esi]
007130FE  push esi
007130FF  call dword ptr ds:[eax+31C]
00713105  push eax
00713106  lea ecx,dword ptr ss:[ebp-34]
00713109  push ecx
0071310A  call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]           ;  MSVBVM60.__vbaObjSet
00713110  mov edx,dword ptr ds:[eax]
00713112  lea ecx,dword ptr ss:[ebp-20]
00713115  push ecx
00713116  push eax
00713117  mov dword ptr ss:[ebp-B8],eax
0071311D  call dword ptr ds:[edx+A0]                            ;  取注册码第三节s3
00713123  fclex
00713125  test eax,eax
00713127  jge short SISWare.00713141
00713129  mov edx,dword ptr ss:[ebp-B8]
0071312F  push 0A0
00713134  push SISWare.00435B88
00713139  push edx
0071313A  push eax
0071313B  call dword ptr ds:[<&MSVBVM60.__vbaHresultCheckObj>]  ;  MSVBVM60.__vbaHresultCheckObj
00713141  mov eax,dword ptr ss:[ebp-20]
00713144  push eax
00713145  call dword ptr ds:[<&MSVBVM60.__vbaLenBstr>]          ;  Len(s3)
0071314B  lea ecx,dword ptr ss:[ebp-20]
0071314E  mov dword ptr ss:[ebp-D4],eax
00713154  mov dword ptr ss:[ebp-18],1                           ;  初始化循环变量i
0071315B  call dword ptr ds:[<&MSVBVM60.__vbaFreeStr>]          ;  MSVBVM60.__vbaFreeStr
00713161  lea ecx,dword ptr ss:[ebp-34]
00713164  call ebx
00713166  mov ecx,dword ptr ss:[ebp-D4]                         ;  --------循环开始--------
0071316C  cmp dword ptr ss:[ebp-18],ecx                         ;  cmp i,Len(s3)
0071316F  jg SISWare.00713352                                   ;  是否达到循环次数?
00713175  fild dword ptr ss:[ebp-18]                            ;  i
00713178  cmp dword ptr ds:[751000],0
0071317F  jnz short SISWare.00713189
00713181  fdiv qword ptr ds:[402D08]                            ;  i/2
00713187  jmp short SISWare.0071319A
00713189  push dword ptr ds:[402D0C]
0071318F  push dword ptr ds:[402D08]
00713195  call 
0071319A  fstp qword ptr ss:[ebp-110]
007131A0  fild dword ptr ss:[ebp-18]                            ;  i
007131A3  cmp dword ptr ds:[751000],0
007131AA  jnz short SISWare.007131B4
007131AC  fdiv qword ptr ds:[402D08]                            ;  i/2
007131B2  jmp short SISWare.007131C5
007131B4  push dword ptr ds:[402D0C]
007131BA  push dword ptr ds:[402D08]
007131C0  call 
007131C5  call dword ptr ds:[<&MSVBVM60.__vbaFPFix>]            ;  Fix(i/2)
007131CB  fcomp qword ptr ss:[ebp-110]                          ;  cmp Fix(i/2),i/2
007131D1  fstsw ax
007131D3  test ah,40
007131D6  jnz SISWare.0071328B                                  ;  当i为偶数时跳转
007131DC  mov edx,dword ptr ds:[esi]                            ;  ----当i为奇数时----
007131DE  push esi
007131DF  call dword ptr ds:[edx+31C]
007131E5  push eax
007131E6  lea eax,dword ptr ss:[ebp-34]
007131E9  push eax
007131EA  call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]           ;  MSVBVM60.__vbaObjSet
007131F0  mov eax,dword ptr ss:[ebp-34]
007131F3  mov edx,dword ptr ss:[ebp-18]
007131F6  lea ecx,dword ptr ss:[ebp-54]
007131F9  push ecx
007131FA  mov dword ptr ss:[ebp-3C],eax
007131FD  push edx
007131FE  lea eax,dword ptr ss:[ebp-44]
00713201  push eax
00713202  lea ecx,dword ptr ss:[ebp-64]
00713205  push ecx
00713206  mov dword ptr ss:[ebp-4C],1
0071320D  mov dword ptr ss:[ebp-54],2
00713214  mov dword ptr ss:[ebp-34],0
0071321B  mov dword ptr ss:[ebp-44],9
00713222  call dword ptr ds:[<&MSVBVM60.#632>]                  ;  Mid(s3,i,1)
00713228  mov edx,dword ptr ss:[ebp-1C]
0071322B  push edx
0071322C  lea eax,dword ptr ss:[ebp-64]
0071322F  push eax
00713230  lea ecx,dword ptr ss:[ebp-20]
00713233  push ecx
00713234  call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]        ;  MSVBVM60.__vbaStrVarVal
0071323A  push eax
0071323B  call dword ptr ds:[<&MSVBVM60.#516>]                  ;  Asc(Mid(s3,i,1))
00713241  add eax,0C8                                           ;  Asc(Mid(s3,i,1))+C8
00713246  push eax
00713247  call dword ptr ds:[<&MSVBVM60.__vbaStrI2>]            ;  Str(Asc(Mid(s3,i,1))+C8)
0071324D  mov edx,eax
0071324F  lea ecx,dword ptr ss:[ebp-24]
00713252  call edi
00713254  push eax
00713255  call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]           ;  保存Str
0071325B  mov edx,eax
0071325D  lea ecx,dword ptr ss:[ebp-1C]
00713260  call edi
00713262  lea edx,dword ptr ss:[ebp-24]
00713265  push edx
00713266  lea eax,dword ptr ss:[ebp-20]
00713269  push eax
0071326A  push 2
0071326C  call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>]      ;  MSVBVM60.__vbaFreeStrList
00713272  add esp,0C
00713275  lea ecx,dword ptr ss:[ebp-34]
00713278  call ebx
0071327A  lea ecx,dword ptr ss:[ebp-64]
0071327D  push ecx
0071327E  lea edx,dword ptr ss:[ebp-54]
00713281  push edx
00713282  lea eax,dword ptr ss:[ebp-44]
00713285  push eax
00713286  jmp SISWare.00713335
0071328B  mov ecx,dword ptr ds:[esi]                            ;  ----当i为偶数时----
0071328D  push esi
0071328E  call dword ptr ds:[ecx+31C]
00713294  push eax
00713295  lea edx,dword ptr ss:[ebp-34]
00713298  push edx
00713299  call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]           ;  MSVBVM60.__vbaObjSet
0071329F  mov eax,dword ptr ss:[ebp-34]
007132A2  mov ecx,dword ptr ss:[ebp-18]
007132A5  mov dword ptr ss:[ebp-3C],eax
007132A8  lea eax,dword ptr ss:[ebp-54]
007132AB  push eax
007132AC  push ecx
007132AD  lea edx,dword ptr ss:[ebp-44]
007132B0  push edx
007132B1  lea eax,dword ptr ss:[ebp-64]
007132B4  push eax
007132B5  mov dword ptr ss:[ebp-4C],1
007132BC  mov dword ptr ss:[ebp-54],2
007132C3  mov dword ptr ss:[ebp-34],0
007132CA  mov dword ptr ss:[ebp-44],9
007132D1  call dword ptr ds:[<&MSVBVM60.#632>]                  ;  Mid(s3,i,1)
007132D7  mov ecx,dword ptr ss:[ebp-1C]
007132DA  push ecx
007132DB  lea edx,dword ptr ss:[ebp-64]
007132DE  push edx
007132DF  lea eax,dword ptr ss:[ebp-20]
007132E2  push eax
007132E3  call dword ptr ds:[<&MSVBVM60.__vbaStrVarVal>]        ;  MSVBVM60.__vbaStrVarVal
007132E9  push eax
007132EA  call dword ptr ds:[<&MSVBVM60.#516>]                  ;  Asc(Mid(s3,i,1))
007132F0  add eax,80                                            ;  Asc(Mid(s3,i,1))+80
007132F5  push eax
007132F6  call dword ptr ds:[<&MSVBVM60.__vbaStrI2>]            ;  Str(Asc(Mid(s3,i,1))+80)
007132FC  mov edx,eax
007132FE  lea ecx,dword ptr ss:[ebp-24]
00713301  call edi
00713303  push eax
00713304  call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]           ;  保存Str
0071330A  mov edx,eax
0071330C  lea ecx,dword ptr ss:[ebp-1C]
0071330F  call edi
00713311  lea ecx,dword ptr ss:[ebp-24]
00713314  push ecx
00713315  lea edx,dword ptr ss:[ebp-20]
00713318  push edx
00713319  push 2
0071331B  call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>]      ;  MSVBVM60.__vbaFreeStrList
00713321  add esp,0C
00713324  lea ecx,dword ptr ss:[ebp-34]
00713327  call ebx
00713329  lea eax,dword ptr ss:[ebp-64]
0071332C  push eax
0071332D  lea ecx,dword ptr ss:[ebp-54]
00713330  push ecx
00713331  lea edx,dword ptr ss:[ebp-44]
00713334  push edx
00713335  push 3
00713337  call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>]      ;  MSVBVM60.__vbaFreeVarList
0071333D  mov ecx,dword ptr ss:[ebp-18]
00713340  mov eax,1
00713345  add esp,10
00713348  add ecx,eax
0071334A  mov dword ptr ss:[ebp-18],ecx
0071334D  jmp SISWare.00713166                                  ;  --------循环结束--------
00713352  mov eax,dword ptr ds:[esi]
00713354  push esi
00713355  call dword ptr ds:[eax+308]                           ;  取用户名un
0071335B  lea ecx,dword ptr ss:[ebp-44]
0071335E  push ecx
0071335F  lea edx,dword ptr ss:[ebp-54]
00713362  push edx
00713363  mov dword ptr ss:[ebp-3C],eax
00713366  mov dword ptr ss:[ebp-44],9
0071336D  call dword ptr ds:[<&MSVBVM60.#520>]                  ;  Trim(un)
00713373  lea eax,dword ptr ss:[ebp-54]
00713376  push eax
00713377  lea ecx,dword ptr ss:[ebp-84]
0071337D  push ecx
0071337E  mov dword ptr ss:[ebp-7C],SISWare.00435BAC
00713385  mov dword ptr ss:[ebp-84],8008
0071338F  call dword ptr ds:[<&MSVBVM60.__vbaVarTextTstEq>]     ;  Trim(un)=""?
00713395  lea edx,dword ptr ss:[ebp-54]
00713398  mov word ptr ss:[ebp-B8],ax
0071339F  push edx
007133A0  lea eax,dword ptr ss:[ebp-44]
007133A3  push eax
007133A4  push 2
007133A6  call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>]      ;  MSVBVM60.__vbaFreeVarList
007133AC  add esp,0C
007133AF  cmp word ptr ss:[ebp-B8],0
007133B7  je SISWare.00713449                                   ;  un不能为空
007133BD  mov esi,dword ptr ds:[<&MSVBVM60.__vbaVarDup>]        ;  MSVBVM60.__vbaVarDup
007133C3  mov ecx,80020004
007133C8  mov eax,0A
007133CD  mov dword ptr ss:[ebp-6C],ecx
007133D0  mov dword ptr ss:[ebp-5C],ecx
007133D3  mov edi,8
007133D8  lea edx,dword ptr ss:[ebp-94]
007133DE  lea ecx,dword ptr ss:[ebp-54]
007133E1  mov dword ptr ss:[ebp-74],eax
007133E4  mov dword ptr ss:[ebp-64],eax
007133E7  mov dword ptr ss:[ebp-8C],SISWare.00436BE4            ;  sisware
007133F1  mov dword ptr ss:[ebp-94],edi
007133F7  call esi                                              ;  <&MSVBVM60.__vbaVarDup>
007133F9  lea edx,dword ptr ss:[ebp-84]
007133FF  lea ecx,dword ptr ss:[ebp-44]
00713402  mov dword ptr ss:[ebp-7C],SISWare.0044A5C8            ;  please enter your name
00713409  mov dword ptr ss:[ebp-84],edi
0071340F  call esi                                              ;  <&MSVBVM60.__vbaVarDup>
00713411  lea ecx,dword ptr ss:[ebp-74]
00713414  push ecx
00713415  lea edx,dword ptr ss:[ebp-64]
00713418  push edx
00713419  lea eax,dword ptr ss:[ebp-54]
0071341C  push eax
0071341D  push 40
0071341F  lea ecx,dword ptr ss:[ebp-44]
00713422  push ecx
00713423  call dword ptr ds:[<&MSVBVM60.#595>]                  ;  MSVBVM60.rtcMsgBox
00713429  lea edx,dword ptr ss:[ebp-74]
0071342C  push edx
0071342D  lea eax,dword ptr ss:[ebp-64]
00713430  push eax
00713431  lea ecx,dword ptr ss:[ebp-54]
00713434  push ecx
00713435  lea edx,dword ptr ss:[ebp-44]
00713438  push edx
00713439  push 4
0071343B  call dword ptr ds:[<&MSVBVM60.__vbaFreeVarList>]      ;  MSVBVM60.__vbaFreeVarList
00713441  add esp,14
00713444  jmp SISWare.00713678
00713449  mov edx,SISWare.0043D1A8                              ;  autorize1
0071344E  lea ecx,dword ptr ss:[ebp-28]
00713451  call dword ptr ds:[<&MSVBVM60.__vbaStrCopy>]          ;  MSVBVM60.__vbaStrCopy
00713457  mov edx,SISWare.00436F94                              ;  general
0071345C  lea ecx,dword ptr ss:[ebp-24]
0071345F  call dword ptr ds:[<&MSVBVM60.__vbaStrCopy>]          ;  MSVBVM60.__vbaStrCopy
00713465  mov edx,SISWare.00436BE4                              ;  sisware
0071346A  lea ecx,dword ptr ss:[ebp-20]
0071346D  call dword ptr ds:[<&MSVBVM60.__vbaStrCopy>]          ;  MSVBVM60.__vbaStrCopy
00713473  lea eax,dword ptr ss:[ebp-1C]
00713476  push eax
00713477  lea ecx,dword ptr ss:[ebp-28]
0071347A  push ecx
0071347B  lea edx,dword ptr ss:[ebp-24]
0071347E  push edx
0071347F  lea eax,dword ptr ss:[ebp-20]
00713482  push eax
00713483  lea ecx,dword ptr ss:[ebp-44]
00713486  push ecx
00713487  call SISWare.00526400                                 ;  建立注册表项目
0071348C  lea edx,dword ptr ss:[ebp-28]
0071348F  push edx
00713490  lea eax,dword ptr ss:[ebp-24]
00713493  push eax
00713494  lea ecx,dword ptr ss:[ebp-20]
00713497  push ecx
00713498  push 3
0071349A  call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>]      ;  MSVBVM60.__vbaFreeStrList
007134A0  add esp,10
007134A3  lea ecx,dword ptr ss:[ebp-44]
007134A6  call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]          ;  MSVBVM60.__vbaFreeVar
007134AC  mov edx,dword ptr ss:[ebp-1C]
007134AF  push edx                                              ;  Str
007134B0  push SISWare.0043D1C0                                 ;  FixStr="21128721524917624818124817710610996112901099210895270206284179250181252178248"
007134B5  call dword ptr ds:[<&MSVBVM60.__vbaStrTextCmp>]       ;  MSVBVM60.__vbaStrTextCmp
007134BB  neg eax
007134BD  sbb eax,eax
007134BF  test ax,ax
007134C2  mov word ptr ds:[7518F8],ax
007134C8  jnz SISWare.0071358E                                  ;  Str必须与FixStr相同
007134CE  mov eax,dword ptr ds:[esi]                            ;  当Str=FixStr时:注册成功
007134D0  push esi
007134D1  call dword ptr ds:[eax+308]
007134D7  push eax
007134D8  lea ecx,dword ptr ss:[ebp-34]
007134DB  push ecx
007134DC  call dword ptr ds:[<&MSVBVM60.__vbaObjSet>]           ;  MSVBVM60.__vbaObjSet
007134E2  mov edx,dword ptr ds:[eax]
007134E4  lea ecx,dword ptr ss:[ebp-20]
007134E7  push ecx
007134E8  push eax
007134E9  mov dword ptr ss:[ebp-B8],eax
007134EF  call dword ptr ds:[edx+A0]
007134F5  fclex
007134F7  test eax,eax
007134F9  jge short SISWare.00713513
007134FB  mov edx,dword ptr ss:[ebp-B8]
00713501  push 0A0
00713506  push SISWare.00435B88
0071350B  push edx
0071350C  push eax
0071350D  call dword ptr ds:[<&MSVBVM60.__vbaHresultCheckObj>]  ;  MSVBVM60.__vbaHresultCheckObj
00713513  mov edx,dword ptr ss:[ebp-20]
00713516  lea ecx,dword ptr ss:[ebp-30]
00713519  mov dword ptr ss:[ebp-20],0
00713520  call edi
00713522  mov edi,dword ptr ds:[<&MSVBVM60.__vbaStrCopy>]       ;  MSVBVM60.__vbaStrCopy
00713528  mov edx,SISWare.0043D670                              ;  autorize2
0071352D  lea ecx,dword ptr ss:[ebp-2C]
00713530  call edi                                              ;  <&MSVBVM60.__vbaStrCopy>
00713532  mov edx,SISWare.00436F94                              ;  general
00713537  lea ecx,dword ptr ss:[ebp-28]
0071353A  call edi                                              ;  <&MSVBVM60.__vbaStrCopy>
0071353C  mov edx,SISWare.00436BE4                              ;  sisware
00713541  lea ecx,dword ptr ss:[ebp-24]
00713544  call edi                                              ;  <&MSVBVM60.__vbaStrCopy>
00713546  lea eax,dword ptr ss:[ebp-30]
00713549  push eax
0071354A  lea ecx,dword ptr ss:[ebp-2C]
0071354D  push ecx
0071354E  lea edx,dword ptr ss:[ebp-28]
00713551  push edx
00713552  lea eax,dword ptr ss:[ebp-24]
00713555  push eax
00713556  lea ecx,dword ptr ss:[ebp-44]
00713559  push ecx
0071355A  call SISWare.00526400
0071355F  lea edx,dword ptr ss:[ebp-30]
00713562  push edx
00713563  lea eax,dword ptr ss:[ebp-2C]
00713566  push eax
00713567  lea ecx,dword ptr ss:[ebp-28]
0071356A  push ecx
0071356B  lea edx,dword ptr ss:[ebp-24]
0071356E  push edx
0071356F  push 4
00713571  call dword ptr ds:[<&MSVBVM60.__vbaFreeStrList>]      ;  MSVBVM60.__vbaFreeStrList
00713577  add esp,14
0071357A  lea ecx,dword ptr ss:[ebp-34]
0071357D  call ebx
0071357F  lea ecx,dword ptr ss:[ebp-44]
00713582  call dword ptr ds:[<&MSVBVM60.__vbaFreeVar>]          ;  MSVBVM60.__vbaFreeVar
00713588  mov ax,word ptr ds:[7518F8]
0071358E  cmp ax,0FFFF                                          ;  当Str!=FixStr时:注册失败
00713592  jnz SISWare.00713621
00713598  mov esi,dword ptr ds:[<&MSVBVM60.__vbaVarDup>]        ;  MSVBVM60.__vbaVarDup
0071359E  mov ecx,80020004
007135A3  mov eax,0A
007135A8  mov dword ptr ss:[ebp-6C],ecx
007135AB  mov dword ptr ss:[ebp-5C],ecx
007135AE  mov edi,8
007135B3  lea edx,dword ptr ss:[ebp-94]
007135B9  lea ecx,dword ptr ss:[ebp-54]
007135BC  mov dword ptr ss:[ebp-74],eax
007135BF  mov dword ptr ss:[ebp-64],eax
007135C2  mov dword ptr ss:[ebp-8C],SISWare.00436BE4            ;  sisware
007135CC  mov dword ptr ss:[ebp-94],edi
007135D2  call esi                                              ;  <&MSVBVM60.__vbaVarDup>
007135D4  lea edx,dword ptr ss:[ebp-84]
007135DA  lea ecx,dword ptr ss:[ebp-44]
007135DD  mov dword ptr ss:[ebp-7C],SISWare.0044A5FC            ;  invalid serial number, please try again
007135E4  mov dword ptr ss:[ebp-84],edi
007135EA  call esi                                              ;  <&MSVBVM60.__vbaVarDup>
007135EC  lea eax,dword ptr ss:[ebp-74]
007135EF  push eax
007135F0  lea ecx,dword ptr ss:[ebp-64]
007135F3  push ecx
007135F4  lea edx,dword ptr ss:[ebp-54]
007135F7  push edx
007135F8  push 30
007135FA  lea eax,dword ptr ss:[ebp-44]
007135FD  push eax
007135FE  call dword ptr ds:[<&MSVBVM60.#595>]                  ;  MSVBVM60.rtcMsgBox
……

至此注册码算法已经完成。总结注册码算法如下:
1.第一节注册码奇数位ASC值+&H80,偶数位ASC值+&HC8,并转换成十进制字符连接起来。
2.第二节注册码奇数位ASC值+&H28,偶数位ASC值+&H3C,并转换成十进制字符连接起来。
3.第三节注册码奇数位ASC值+&HC8,偶数位ASC值+&H80,并转换成十进制字符连接起来。
4.将上述三节字符串连接起来与21128721524917624818124817710610996112901099210895270206284179250181252178248比较,相等注册成功。

用VB描述流程如下:

Private Sub Command1_Click()
Const FixStr as String = "21128721524917624818124817710610996112901099210895270206284179250181252178248"
Dim i As Long, s As String, sStr As String

    s = Text1.Text
    For i = 1 To Len(s)
        If i Mod 2 = 1 Then
            sStr = sStr & (Asc(Mid$(s, i, 1)) + &H80)
        Else
            sStr = sStr & (Asc(Mid$(s, i, 1)) + &HC8)
        End If
    Next
    
    s = Text2.Text
    For i = 1 To Len(s)
        If i Mod 2 = 1 Then
            sStr = sStr & (Asc(Mid$(s, i, 1)) + &H28)
        Else
            sStr = sStr & (Asc(Mid$(s, i, 1)) + &H3C)
        End If
    Next
    
    s = Text3.Text
    For i = 1 To Len(s)
        If i Mod 2 = 1 Then
            sStr = sStr & (Asc(Mid$(s, i, 1)) + &HC8)
        Else
            sStr = sStr & (Asc(Mid$(s, i, 1)) + &H80)
        End If
    Next
    
    If sStr = FixStr Then
        MsgBox "Reg OK!"
    Else
        MsgBox "invalid serial number, please try again"
    End If
End Sub

逆推注册码就比较容易了:

Private Sub Command2_Click()
Dim i As Long, j As Long, k As Long
Dim sStr As String
Const FixStr as String = "211287215249176248181248177106109 96112 90109 92108 95270206284179250181252178248"

    For i = 1 To 3
    For j = 1 To 9
        
        
        k = Val(Mid$(FixStr, ((i - 1) * 9 + j - 1) * 3 + 1, 3))
        If i = 1 Then
            If j Mod 2 = 1 Then
                sStr = sStr & Chr(k - &H80)
            Else
                sStr = sStr & Chr(k - &HC8)
            End If
        End If
        
        If i = 2 Then
            If j = 1 Then sStr = sStr & "-"
            If j Mod 2 = 1 Then
                sStr = sStr & Chr(k - &H28)
            Else
                sStr = sStr & Chr(k - &H3C)
            End If
        End If
        
        If i = 3 Then
            If j = 1 Then sStr = sStr & "-"
            If j Mod 2 = 1 Then
                sStr = sStr & Chr(k - &HC8)
            Else
                sStr = sStr & Chr(k - &H80)
            End If
        End If
        
    Next j, i
    
    MsgBox "RegCode is:" & vbCrLf & sStr
End Sub

注意要把上面的FixStr中加上几个空格,这样在取位时可以按对齐的3位一个数来取。

最后算出的注册码为:
---------------------------
工程1
---------------------------
RegCode is:

SWW100501-B18421407-FNT325420
---------------------------
确定   
---------------------------
上一篇   下一篇