老文章档案 · 2003 年

神奇注册表1.0破解

破解教程 · 破解杂谈 · 2003-09-23 · 作者:毕强 人气: · 出处:赢政天下整理收藏)

软件用于通过修改注册表设置Windows系统。

(一)用FI侦测mgreg.exe没有加壳。

(二)用W32Dasm打开mgreg.exe分析。软件由于是启动时从C:\Windows\mgreg.ini中读取注册信息,用户名为UserName,注册码为RegCode。在W32Dasm中搜索"RegCode",共有两处,分别为41B3B0和4216F0,经过分析前者为启动时读取INI文件,后者为输入注册码后写入INI文件。

(三)运行TRW2000,载入msreg.exe调试,g 41B3B0跟踪到读取INI文件处。代码如下:

:0041B3B0 68E8B04700 push 0047B0E8

:0041B3B5 8BE8 mov ebp, eax

:0041B3B7 FFD7 call edi ****读取INI文件

:0041B3B9 8D442438 lea eax, dword ptr [esp+38] ****EAX注册码地址

:0041B3BD 8D4C2460 lea ecx, dword ptr [esp+60] ****ECX用户名地址

:0041B3C1 50 push eax

:0041B3C2 51 push ecx

:0041B3C3 8BCE mov ecx, esi

:0041B3C5 E816030000 call 0041B6E0 ****根据用户名算出注册码并比较

:0041B3CA 85C0 test eax, eax ****正确时返回EAX=1,否则返回EAX=0

:0041B3CC 7410 je 0041B3DE ****EAX为0则转出错,出现输入用户名与注册码的窗口

跟踪进入比较注册码的子程序,前面一段为赋值(共计80个字节),用于与输入的用户名字符异或,EBX为用户名地址,ECX为用户名长度,并对长度进行测试。接下来的代码如下:

:0041B99C 7E4D jle 0041B9EB ****用户名长度小于等于0转直接比较,此时比较肯定是不对的

:0041B99E 8D74240C lea esi, dword ptr [esp+0C] ****ESI为异或用值的地址

:0041B9A2 8BC3 mov eax, ebx ****EAX为用户名地址

:0041B9A4 2BF3 sub esi, ebx ****ESI为两地址差

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041B9E9(C)

|

:0041B9A6 8A10 mov dl, byte ptr [eax] ****取用户名字符

:0041B9A8 84D2 test dl, dl ****是否为负数,最高位为1,此字符为汉字

:0041B9AA 7D04 jge 0041B9B0 ****非负数为一般字符,直接异或

:0041B9AC F6DA neg dl ****为负数(汉字),则取反送回原地址

:0041B9AE 8810 mov byte ptr [eax], dl

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041B9AA(C)

|

:0041B9B0 8A1406 mov dl, byte ptr [esi+eax] ****取异或用值

:0041B9B3 3210 xor dl, byte ptr [eax] ****与用户名字符异或

:0041B9B5 80FA30 cmp dl, 30 ****是否小于30,包括大于7F情况,因为此时DL为负数

:0041B9B8 8810 mov byte ptr [eax], dl

:0041B9BA 7D12 jge 0041B9CE

:0041B9BC 0FBED2 movsx edx, dl ****小于30时,扩展DL为EDX,当DL最高位为1时,EDX其余位也为1

:0041B9BF 83FA30 cmp edx, 00000030 ****继续判断是否小于30

:0041B9C2 7D0A jge 0041B9CE ****不可能跳转

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041B9CC(C)

|

:0041B9C4 83C203 add edx, 00000003 ****小于30时一直加3

:0041B9C7 83FA30 cmp edx, 00000030

:0041B9CA 8810 mov byte ptr [eax], dl ****注册码保存到用户名的地址

:0041B9CC 7CF6 jl 0041B9C4

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:0041B9BA(C), :0041B9C2(C)

|

:0041B9CE 8A10 mov dl, byte ptr [eax]

:0041B9D0 80FA39 cmp dl, 39 ****是否小于等于39

:0041B9D3 7E12 jle 0041B9E7 ****是则无需运算,继续取下一个字符

:0041B9D5 0FBED2 movsx edx, dl ****扩展DL为EDX

:0041B9D8 83FA39 cmp edx, 00000039 ****再判断一次

:0041B9DB 7E0A jle 0041B9E7

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041B9E5(C)

|

:0041B9DD 83EA03 sub edx, 00000003 ****当EDX大于39时一直减3

:0041B9E0 83FA39 cmp edx, 00000039

:0041B9E3 8810 mov byte ptr [eax], dl

:0041B9E5 7FF6 jg 0041B9DD

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:0041B9D3(C), :0041B9DB(C)

|

:0041B9E7 40 inc eax ****地址加1

:0041B9E8 49 dec ecx ****用户名长度减1

:0041B9E9 75BB jne 0041B9A6 ****是否已结束,未结束回41B9A6继续算注册码

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041B99C(C)

|

:0041B9EB 8BB42494000000 mov esi, dword ptr [esp+00000094] ****ESI为输入注册码的地址

:0041B9F2 8BC3 mov eax, ebx ****EAX、EBX为注册码的地址

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041BA16(C)

|

:0041B9F4 8A10 mov dl, byte ptr [eax] ****比较注册码段,单个字符进行比较

:0041B9F6 8A1E mov bl, byte ptr [esi]

:0041B9F8 8ACA mov cl, dl

:0041B9FA 3AD3 cmp dl, bl

:0041B9FC 751E jne 0041BA1C ****不等则转出错

:0041B9FE 84C9 test cl, cl ****是否已结束

:0041BA00 7416 je 0041BA18 ****是则转41BA18成功结束

:0041BA02 8A5001 mov dl, byte ptr [eax+01] ****比较下一个字符

:0041BA05 8A5E01 mov bl, byte ptr [esi+01]

:0041BA08 8ACA mov cl, dl

:0041BA0A 3AD3 cmp dl, bl

:0041BA0C 750E jne 0041BA1C ****不等则转出错

:0041BA0E 83C002 add eax, 00000002 ****地址均加2指向下一个字符

:0041BA11 83C602 add esi, 00000002

:0041BA14 84C9 test cl, cl

:0041BA16 75DC jne 0041B9F4

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041BA00(C)

|

:0041BA18 33C0 xor eax, eax ****成功结束,置EAX为0

:0041BA1A EB05 jmp 0041BA21

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:

|:0041B9FC(C), :0041BA0C(C)

|

:0041BA1C 1BC0 sbb eax, eax

:0041BA1E 83D8FF sbb eax, FFFFFFFF ****不成功时EAX不为0

* Referenced by a (U)nconditional or (C)onditional Jump at Address:

|:0041BA1A(U)

|

:0041BA21 33C9 xor ecx, ecx

:0041BA23 5F pop edi

:0041BA24 85C0 test eax, eax ****判断EAX是否为0

:0041BA26 0F94C1 sete cl ****为0置CL为1,否则为0

:0041BA29 5E pop esi

:0041BA2A 8BC1 mov eax, ecx ****成功时EAX=1,否则为0

:0041BA2C 5B pop ebx

:0041BA2D 81C480000000 add esp, 00000080

:0041BA33 C20800 ret 0008

由上可以看出,在41B9F4处中断,e eax或e ebx往上看均可以看到注册码。也可在41B9F2处中断,用e ebx往上看可得注册码。我的注册码为:用户名BiQiang,注册码1208012。

(四)制作注册机:一是用注册机编写器制作注册机,按F8制作另类注册机,中断地址41B9F2,中断次数1,第一字节8B,指令长度2,注册码选内存方式,选中EBX寄存器,生成注册机。二是根据其算法用VB制作注册机。

(出处:赢政天下整理收藏)

相关文章:

相关软件:

→ 特别推荐

→ 热点TOP10

我为人人《《==》》人人为我

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

繁体版:由华琦数码技术提供

Powered

by:MeSky.Net

2003-2004 年,宽带刚刚普及,下载站的文章区是许多人学电脑的第一课堂。
🕰 → 🤖 从那时到现在

当年一篇教程能让一台电脑焕然一新;今天的效率工具换成了 AI。 想知道当下最可靠的 AI 模型怎么选?看 赢政指数——我们用了 28 年的选软件严谨,现在用来评测大模型。

档案性质声明:本页为赢政天下(1998-2011)老文章的历史档案复原, 内容反映当年发表时的原貌——包括当年的技术表述、软件版本与观点,部分方法在今天已不适用或不合规,仅作互联网历史记录与研究用途, 不提供任何形式的下载。原始数据经由公共网络存档(Internet Archive)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史