欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

有声有色4.0注册算法 二 (7千字)

有声有色4.0注册算法 二 (7千字)

②计算注册码的CALL:
* Referenced by a CALL at Addresses:
|:0048F11E  , :0048F17F  , :0048F32F 
|
:0048F1B4 55                      push ebp
:0048F1B5 8BEC                    mov ebp, esp
:0048F1B7 6A00                    push 00000000
:0048F1B9 6A00                    push 00000000
:0048F1BB 6A00                    push 00000000
:0048F1BD 6A00                    push 00000000
:0048F1BF 6A00                    push 00000000
:0048F1C1 53                      push ebx
:0048F1C2 56                      push esi
:0048F1C3 894DFC                  mov dword ptr [ebp-04], ecx
:0048F1C6 8BF2                    mov esi, edx
*//ESI=EDX=3E0D(下面要用到)
:0048F1C8 8B45FC                  mov eax, dword ptr [ebp-04]
*//取输入的用户名:华仔[CCG]
:0048F1CB E83C50F7FF              call 0040420C
:0048F1D0 33C0                    xor eax, eax
:0048F1D2 55                      push ebp
:0048F1D3 68B2F24800              push 0048F2B2
:0048F1D8 64FF30                  push dword ptr fs:[eax]
:0048F1DB 648920                  mov dword ptr fs:[eax], esp
:0048F1DE 8D45F8                  lea eax, dword ptr [ebp-08]
* Possible StringData Ref from Code Obj ->"Error"
                                  |
:0048F1E1 BACCF24800              mov edx, 0048F2CC
:0048F1E6 E8854CF7FF              call 00403E70
:0048F1EB 85F6                    test esi, esi
:0048F1ED 0F8499000000            je 0048F28C
:0048F1F3 837DFC00                cmp dword ptr [ebp-04], 00000000
:0048F1F7 0F848F000000            je 0048F28C
*//如果没有输入用户名,那就免谈。
:0048F1FD 8B45FC                  mov eax, dword ptr [ebp-04]
*//取输入的用户名:华仔[CCG]
:0048F200 E8534EF7FF              call 00404058
*//取用户名位数并送给EAX:EAX=9
:0048F205 8BD8                    mov ebx, eax
*//EBX=EAX=9
:0048F207 0FAFDE                  imul ebx, esi
*//带符号数乘法:EBX=EBX*ESI=9*3E0D=22E75(ESI的值前面有说明)
:0048F20A 8B45FC                  mov eax, dword ptr [ebp-04]
*//取输入的用户名:华仔[CCG]
:0048F20D 0FB600                  movzx eax, byte ptr [eax]
*//取用户名第一位ASCII码并送给EAX:EAX=BB
:0048F210 69C09A020000            imul eax, 0000029A
*//带符号数乘法:EAX=EAX*29A=BB*29A=1E67E
:0048F216 03D8                    add ebx, eax
*//EBX=EBX+EAX=22E75+1E67E=414F3
*//414F3转换为十进制数:267507
:0048F218 8D55F4                  lea edx, dword ptr [ebp-0C]
:0048F21B 8BC3                    mov eax, ebx
*//EAX=EBX=414F3
:0048F21D E8C6A0F7FF              call 004092E8
:0048F222 8B55F4                  mov edx, dword ptr [ebp-0C]
:0048F225 8D45F8                  lea eax, dword ptr [ebp-08]
:0048F228 B9DCF24800              mov ecx, 0048F2DC
*//ECX=2D(2D是“-”的ASCII码)
:0048F22D E8724EF7FF              call 004040A4
:0048F232 8B45FC                  mov eax, dword ptr [ebp-04]
*//取输入的用户名:华仔[CCG]
:0048F235 0FB600                  movzx eax, byte ptr [eax]
*//取用户名第一位ASCII码并送给EAX:EAX=BB
:0048F238 F7EE                    imul esi
*//带符号数乘法:EAX=EAX*ESI=BB*3E0D=2D537F
:0048F23A 6BD87B                  imul ebx, eax, 0000007B
*//带符号数乘法:EBX=EAX*7B=2D537F*7B=15C71E05
*//15C71E05转换为十进制数:365370885
:0048F23D FF75F8                  push [ebp-08]
:0048F240 8D55F0                  lea edx, dword ptr [ebp-10]
:0048F243 8BC3                    mov eax, ebx
:0048F245 E89EA0F7FF              call 004092E8
:0048F24A FF75F0                  push [ebp-10]
:0048F24D 68DCF24800              push 0048F2DC
*//2D是“-”的ASCII码
:0048F252 8D45F8                  lea eax, dword ptr [ebp-08]
:0048F255 BA03000000              mov edx, 00000003
:0048F25A E8B94EF7FF              call 00404118
:0048F25F 8B45FC                  mov eax, dword ptr [ebp-04]
*//取输入的用户名:华仔[CCG]
:0048F262 E8F14DF7FF              call 00404058
*//取用户名位数并送给EAX:EAX=9
:0048F267 8B55FC                  mov edx, dword ptr [ebp-04]
*//取输入的用户名:华仔[CCG]
:0048F26A 0FB612                  movzx edx, byte ptr [edx]
*//取用户名第一位ASCII码并送给EDX:EDX=BB
:0048F26D F7EA                    imul edx
*//带符号数乘法:EAX=EAX*EDX=9*BB=693
:0048F26F 69D8D5190000            imul ebx, eax, 000019D5
*//带符号数乘法:EBX=EAX*19D5=693*19D5=A9D34F
:0048F275 03DE                    add ebx, esi
*//EBX=EBX+ESI=A9D34F+3E0D=AA115C
*//AA115C转换为十进制数:11145564
:0048F277 8D55EC                  lea edx, dword ptr [ebp-14]
:0048F27A 8BC3                    mov eax, ebx
:0048F27C E867A0F7FF              call 004092E8
:0048F281 8B55EC                  mov edx, dword ptr [ebp-14]
:0048F284 8D45F8                  lea eax, dword ptr [ebp-08]
:0048F287 E8D44DF7FF              call 00404060
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0048F1ED(C), :0048F1F7(C)
|
:0048F28C 8B4508                  mov eax, dword ptr [ebp+08]
:0048F28F 8B55F8                  mov edx, dword ptr [ebp-08]
*//将完整的注册码:267507-365370885-11145564 送给EDX
:0048F292 E8954BF7FF              call 00403E2C
:0048F297 33C0                    xor eax, eax
:0048F299 5A                      pop edx
:0048F29A 59                      pop ecx
:0048F29B 59                      pop ecx
:0048F29C 648910                  mov dword ptr fs:[eax], edx
:0048F29F 68B9F24800              push 0048F2B9
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048F2B7(U)
|
:0048F2A4 8D45EC                  lea eax, dword ptr [ebp-14]
:0048F2A7 BA05000000              mov edx, 00000005
:0048F2AC E84B4BF7FF              call 00403DFC
:0048F2B1 C3                      ret

二、注册算法:
1、序列号:(假设为“1974923”)
  取你输入的序列号,只取6位,超过6位其后的位数忽略不计,如:
  1974923 ==> 197492
  为便于大家看清楚,我先将这个序列号依次赋值给SN1...SN6:
  SN1=1
  SN2=9
  SN3=7
  SN4=4
  SN5=9
  SN6=2
  依次变换取位后:SN4 SN1 SN6 SN3 SN2 SN5
                    4  1  2  7  9  9
  变换取位后所得数:412799
  每两位为一组中间用/隔开:41/27/99
  再和你的主板BIOS数据日期比较,不等于就错了。
  如果你不知道你的主板BIOS数据日期的话可以查看注册表键:
  WIN9X系统:
  [HKEY_LOCAL_MACHINE\Enum\Root\*PNP0C01\0000]
  "BIOSDate"="11/06/00"(我的是2000年11月06日)
  WIN2000系统:
  [HKEY_LOCAL_MACHINE\HARDWARE\DESCRIPTION\System]
  "SystemBiosDate"="11/06/00"
  这个数据只在安装操作系统时生成,以后如果升级BIOS这个日期是不会变的,
  所以如果你不介意的话也可以用我的序列号、用户名和注册码:)!
  由以上反推序列号:
  主板BIOS数据日期 ==> 11/06/00 ==> 110600 ==> 106100
  当BIOS数据日期为2011年11月11日时,你就偷着笑了,6个1就可以搞定序列号。
2、注册码:(假设为“华仔[CCG]”)
  注册码形式为:REG1-REG2-REG3
  计算REG1:
  REG1=用户名位数*3E0D+用户名第一位ASCII码*29A,(注意:一个汉字占两位)如:
  REG1=9*3E0D+BB*29A=414F3 ==> 转换为十进制数为:267507
  计算REG2:
  REG2=用户名第一位ASCII码*3E0D*7B,如:
  REG2=BB*3E0D*7B=15C71E05 ==> 转换为十进制数为:365370885
  计算REG3:
  REG3=用户名位数*用户名第一位ASCII码*19D5+3E0D,如:
  REG3=9*BB*19D5+3E0D=AA115C ==> 转换为十进制数为:11145564
三、结果:
1、完整的注册信息:
序列号:106100
用户名:华仔[CCG]
注册码:267507-365370885-11145564
2、注册成功后程序将注册信息写入MusRea.ini:
[Register]
MySerial=106100
Username=华仔[CCG]
Serial=267507-365370885-11145564
3、程序记录使用次数在windows\system\mfc42ens.dll中,并且注册表中也有暗桩,
只要发现mfc42ens.dll与注册表中的记录不一致,你就到期了。还有,如果注册表中
有使用记录,而没有找到mfc42ens.dll这个文件,那么你就不能再成功启动软件了。

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功