欢迎来到 嗅灵易学

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

敏思硬盘卫士1.0 (网络版客户端)的注册分析(简单级) (7千字)

敏思硬盘卫士1.0 (网络版客户端)的注册分析(简单级) (7千字)

敏思硬盘卫士1.0 (网络版客户端)的注册分析(简单级)
by Fpc[CCG] & 6767[BCG]        @2001/08
tools: sI, WdaSm
level: 1/5
主要功能:硬盘保护,访问限制,个人空间,文档中心,病毒防范,远程管理
作者主页:http://www.globalmediastar.com/

  有人要这个,所以追一下了。因为是一机一号,没办法,只有作出注册机或破解版,好在这个简单,能作注册机。
:004A6866 8B45F4                  mov eax, dword ptr [ebp-0C]                <- 硬件号
:004A6869 8D4DF8                  lea ecx, dword ptr [ebp-08]                <- 注册码存放位置
:004A686C 66BA1300                mov dx, 0013                <- 参与运算
:004A6870 E8A3F8FFFF              call 004A6118                <- 生成注册码
:004A6875 8B55F8                  mov edx, dword ptr [ebp-08]        <- 真码
:004A6878 58                      pop eax                <- 假码
:004A6879 E836D7F5FF              call 00403FB4                <- 比较了
:004A687E 7423                    je 004A68A3
:004A6880 6A30                    push 00000030
* Possible StringData Ref from Code Obj ->" 敏思硬盘卫士"
                                  |
:004A6882 6814694A00              push 004A6914
* Possible StringData Ref from Code Obj ->"输入的注册码无效,请重新输入。"
                                  |
:004A6887 6824694A00              push 004A6924
:004A688C 6A00                    push 00000000
* Reference To: user32.MessageBoxA, Ord:0000h
                                  |
:004A688E E85509F6FF              Call 004071E8

  显然在:004A6870 call 004A6118是关键追进去看它是怎么算的:
* Referenced by a CALL at Addresses:
|:004A66B4  , :004A6870  , :004CF984  , :004CFFA4  , :004D04B4 
|:004D07C0  , :004D0B98  , :004D0DBC  , :004D108F  , :004D17C0 
|:004D2728 
|
:004A6118 55                      push ebp
:004A6119 8BEC                    mov ebp, esp
... ...
:004A6125 8BDA                    mov ebx, edx                <- ebx=0x13
:004A6127 8945FC                  mov dword ptr [ebp-04], eax
... ...
:004A6140 8D55F4                  lea edx, dword ptr [ebp-0C]        <- 存放的位置
:004A6143 8B45FC                  mov eax, dword ptr [ebp-04]        <- 硬件号
:004A6146 E88524F6FF              call 004085D0                <- 硬件号中的字母小写转大写,请看
>>>>>>
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00408604(C)
|
    :004085F1 8A02                    mov al, byte ptr [edx]
    :004085F3 3C61                    cmp al, 61
    :004085F5 7206                    jb 004085FD
    :004085F7 3C7A                    cmp al, 7A
    :004085F9 7702                    ja 004085FD
    :004085FB 2C20                    sub al, 20                      <- 这一句
    * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
    |:004085F5(C), :004085F9(C)
    |
    :004085FD 8806                    mov byte ptr [esi], al
    :004085FF 42                      inc edx
    :00408600 46                      inc esi
    :00408601 4B                      dec ebx
    :00408602 85DB                    test ebx, ebx
    :00408604 75EB                    jne 004085F1
<<<<<<

:004A614B 8B45F4                  mov eax, dword ptr [ebp-0C]                <- 硬件号(已转换为大写)
:004A614E 8D4DF8                  lea ecx, dword ptr [ebp-08]
:004A6151 0FB7D3                  movzx edx, bx
:004A6154 E8037AFEFF              call 0048DB5C                <- 这个的作用是将硬件号的各位置加上一个数
                                    <- 规则是:奇数位置加0x14,偶数位置加0x13
>>>>>>
    * Referenced by a CALL at Addresses:
    |:0048E5BF  , :004A6154  , :004C40F3  , :004C410D  , :004C4127 
    |
    :0048DB5C 55                      push ebp
    :0048DB5D 8BEC                    mov ebp, esp
    :0048DB5F 83C4EC                  add esp, FFFFFFEC
    :0048DB62 53                      push ebx
    :0048DB63 56                      push esi
    :0048DB64 57                      push edi
    :0048DB65 33DB                    xor ebx, ebx
    :0048DB67 895DEC                  mov dword ptr [ebp-14], ebx
    :0048DB6A 894DF4                  mov dword ptr [ebp-0C], ecx
    :0048DB6D 8955F8                  mov dword ptr [ebp-08], edx    <- [ebp-8]=0x13
    :0048DB70 8945FC                  mov dword ptr [ebp-04], eax
    ... ...
    
    :0048DB91 8B45F8                  mov eax, dword ptr [ebp-08]
    :0048DB94 40                      inc eax
    :0048DB95 8945F0                  mov dword ptr [ebp-10], eax    <- [ebp-10]=0x14
    ... ...
    :0048DBA6 BE01000000              mov esi, 00000001
    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:0048DBDB(C)
    |
    :0048DBAB 8B45FC                  mov eax, dword ptr [ebp-04]
    :0048DBAE 33DB                    xor ebx, ebx
    :0048DBB0 8A5C30FF                mov bl, byte ptr [eax+esi-01]
    :0048DBB4 F7C601000000            test esi, 00000001                <- 相当于对2取模
    :0048DBBA 7505                    jne 0048DBC1            <- 在奇数位置上则向下跳
    
    :0048DBBC 035DF8                  add ebx, dword ptr [ebp-08]    <- bl+=0x13
    :0048DBBF EB03                    jmp 0048DBC4
    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:0048DBBA(C)
    |
    :0048DBC1 035DF0                  add ebx, dword ptr [ebp-10]    <- bl+=0x14
    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:0048DBBF(U)
    |
    :0048DBC4 8D45EC                  lea eax, dword ptr [ebp-14]
    :0048DBC7 8BD3                    mov edx, ebx
    :0048DBC9 E8FE61F7FF              call 00403DCC            <- 这两个Call只是在内存中拷贝
    :0048DBCE 8B55EC                  mov edx, dword ptr [ebp-14]
    :0048DBD1 8B45F4                  mov eax, dword ptr [ebp-0C]
    :0048DBD4 E8E3A9F7FF              call 004085BC
    :0048DBD9 46                      inc esi
    :0048DBDA 4F                      dec edi
    :0048DBDB 75CE                    jne 0048DBAB            <- 未完成则处理下一字符
    ... ...
    :0048DC08 C3                      ret
<<<<<<

:004A6159 8BD6                    mov edx, esi
:004A615B 8B45F8                  mov eax, dword ptr [ebp-08]
:004A615E E889010000              call 004A62EC                <- 这个是对字符串的运算,求出一个和,再打印成无符号数,就是注册码
>>>>>>
    :004A6317 BB611E0000              mov ebx, 00001E61            <- 初始化:ebx=7777
    ... ...
    :004A632A B801000000              mov eax, 00000001            <- i=1
    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:004A6340(C)
    |
    :004A632F 8B4DFC                  mov ecx, dword ptr [ebp-04]
    :004A6332 0FB64C01FF              movzx ecx, byte ptr [ecx+eax-01]    <- ecx=Code[i]
    :004A6337 03C8                    add ecx, eax                <- ecx+=i (这里i从一开始)
    :004A6339 0FAFCB                  imul ecx, ebx                <- ecx*=ebx
    :004A633C 8BD9                    mov ebx, ecx                <- ebx=ecx
    :004A633E 40                      inc eax                        <- i++
    :004A633F 4A                      dec edx
    :004A6340 75ED                    jne 004A632F                <- 未处理完则继续
    * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    |:004A6328(C)
    |
    :004A6342 8B45F8                  mov eax, dword ptr [ebp-08]        <- 打印的目标地址
    :004A6345 50                      push eax
    :004A6346 895DF0                  mov dword ptr [ebp-10], ebx        <- 保存结果
    :004A6349 C645F400                mov [ebp-0C], 00
    :004A634D 8D55F0                  lea edx, dword ptr [ebp-10]
    :004A6350 33C9                    xor ecx, ecx
    * Possible StringData Ref from Code Obj ->"%.10u"            <- 很明确
                                  |
    :004A6352 B888634A00              mov eax, 004A6388
    :004A6357 E85036F6FF              call 004099AC            <- 打印字符串
<<<<<<
... ...
:004A6189 5D                      pop ebp
:004A618A C3                      ret                    <- 注册码生成完毕,则返回
  注册信息在:
REGEDIT4
[HKEY_CURRENT_USER\Software\MediaStar\HddGuard]
"RegCode"="Your SN is here"
  结束。

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

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

0 0 0 举报
复制成功