老文章档案 · 2003 年

12 (7千字) 算法分析

赢政天下 [WINZHENG.COM] · 网络学院 · 2003-07-18 · 作者:井 风 人气: · 出处:赢政天下整理收藏)

软件名称:美萍网管大师 V7.7 解压后为1,253KB

下载地点:http://www.mpsoft.com

撰 稿 人: 井 风

时 间: 2002-04-18

破解工具:Soft-ice 4.05 Trw2000 1.22 BW2000 0.2 Unaspack 1.0.9.1

解题难度:[专 业] ##[学 士]## [硕 士] [博 士]

前 言:

很多网友要求破解,这是最新版本。

过 程:

(一)制作破解版方法:

1、用Unaspack去壳;

2、用HEX编辑器将:00475CFC JNZ 00475D05 改成永远不跳;

3、一切OK!

(二)找出注册码方法:

1、用Unaspack去壳;

2、此软件检测TRW2000的方法是依据检查TRW2000文件是否在硬盘上来判断的,所以要先用HIEW

等十六进制软件将SCON.EXE所有“trw”字符串改成“20 20 20”,即三个格,不然的话它一

检测到TRW就会调用EXITWINDOWSEX函数关机;

3、下断点:BPX MESSAGEBOXA,可以拦截试用期还剩N天的对话框;

4、分析代码如下:

0167:004C0904 MOV EAX,[004D5678]

0167:004C0909 CALL 004C2360

0167:004C090E MOV EAX,EBX

0167:004C0910 CALL 004BA428

0167:004C0915 XOR EAX,EAX

0167:004C0917 MOV [004CD4C0],EAX

0167:004C091C CALL 00475C48 <==明显这个调用就是验证核心处,重点跟踪分析此调用

0167:004C0921 TEST EAX,EAX <==返加值如果非零就可以跳过后面提醒框

0167:004C0923 JNZ NEAR 004C09AE <==

0167:004C0929 MOV EAX,[004CD4B8]

0167:004C092E SUB EAX,BYTE +0F

0167:004C0931 CMP EAX,[004F3010]

0167:004C0937 JNL 004C09AE <==比较试用天数,不管它,关键是找到核心验证外,向上……

0167:004C0939 PUSH BYTE +40

0167:004C093B LEA EAX,[EBP-18]

0167:004C093E MOV ECX,[004CD644]

0167:004C0944 MOV EDX,[004CD508]

0167:004C094A CALL 00403C78

0167:004C094F MOV EAX,[EBP-18]

0167:004C0952 CALL 00403DF0

0167:004C0957 PUSH EAX

0167:004C0958 PUSH DWORD [004CD638]

0167:004C095E LEA EDX,[EBP-24]

0167:004C0961 MOV EAX,[004CD4B8]

0167:004C0966 INC EAX

0167:004C0967 SUB EAX,[004F3010]

0167:004C096D CALL 00407890

0167:004C0972 PUSH DWORD [EBP-24]

0167:004C0975 PUSH DWORD [004CD63C]

0167:004C097B PUSH DWORD [004CD640]

0167:004C0981 PUSH DWORD 004C0A7C

0167:004C0986 PUSH DWORD 004C0A88

0167:004C098B LEA EAX,[EBP-1C]

0167:004C098E MOV EDX,06

0167:004C0993 CALL 00403CEC

0167:004C0998 MOV EAX,[EBP-1C]

0167:004C099B CALL 00403DF0

0167:004C09A0 PUSH EAX

0167:004C09A1 MOV EAX,EBX

0167:004C09A3 CALL 004269C0

0167:004C09A8 PUSH EAX

0167:004C09A9 CALL `USER32!MessageBoxA` <==试用期提醒对话框,向上分析如何跳过?

0167:004C09AE MOV DL,01

0167:004C09B0 MOV EAX,[EBX+0210]

0167:004C09B6 CALL 00456930

5、深入跟踪0167:004C091C CALL 00475C48

·

·

·

0167:00475C8E CALL 00476AF0

0167:00475C93 CMP EBX,EAX

0167:00475C95 MOV EDX,[004CDAA0]

0167:00475C9B MOV EDX,[EDX]

0167:00475C9D MOV EAX,[004CDB94]

0167:00475CA2 MOV EAX,[EAX] <==EAX的值是你输入的注册码

0167:00475CA4 CALL 00403EB8 <==子程序调用,记为*2*

0167:00475CA9 MOV EDX,[004CDD04] <==

0167:00475CAF MOV [EDX],EAX <==将调用返回值移入4CDD04指向的地址

0167:00475CB1 MOV EAX,[004CDD04] <==4CDD04指向的地址移入EAX

0167:00475CB6 CMP DWORD [EAX],BYTE +00 <==4CDD04指向的地址值与0比较

0167:00475CB9 JNZ 00475CC6 <==**此处应跳**

0167:00475CBB MOV EAX,[004CDD04]

0167:00475CC0 MOV DWORD [EAX],1B <==向4CDD04指向的内存移入1B

0167:00475CC6 MOV EAX,[004CDB94]

0167:00475CCB MOV EAX,[EAX]

0167:00475CCD CALL 00403C2C <==返加你输入注册码的长度

0167:00475CD2 CMP EAX,BYTE +05 <==检测你输入注册码是否为5位,--

0167:00475CD5 JNZ 00475CED <==不是5位则跳走。

0167:00475CD7 MOV EDX,[004CDAA0]

0167:00475CDD MOV EDX,[EDX]

0167:00475CDF MOV EAX,[004CDB94]

0167:00475CE4 MOV EAX,[EAX] <==EAX值是你输入的注册码

0167:00475CE6 CALL 00403EB8 <==子程序调用,记为*2*

0167:00475CEB TEST EAX,EAX

0167:00475CED MOV EAX,[004CD8A8] <==内存中4cd8a8指向地址的值移--

0167:00475CF2 MOV EAX,[EAX] <==到EAX

0167:00475CF4 MOV EDX,[004CDD04] <==

0167:00475CFA CMP EAX,[EDX] <==用内存4CDD04指向地址的值与EAX比较,记为*1*

0167:00475CFC JNZ 00475D05 <==**此处应不跳**

0167:00475CFE MOV EBX,01 <==移入注册标志

0167:00475D03 JMP SHORT 00475D07

0167:00475D05 XOR EBX,EBX

0167:00475D07 XOR EAX,EAX

0167:00475D09 POP EDX

0167:00475D0A POP ECX

0167:00475D0B POP ECX

0167:00475D0C MOV [FS:EAX],EDX

0167:00475D0F PUSH DWORD 00475D24

0167:00475D14 LEA EAX,[EBP-04]

0167:00475D17 CALL 004039B0

0167:00475D1C RET

0167:00475D1D JMP 004033D0

0167:00475D22 JMP SHORT 00475D14

0167:00475D24 MOV EAX,EBX

0167:00475D26 POP EBX

0167:00475D27 POP ECX

0167:00475D28 POP EBP

0167:00475D29 RET

通过以上代码分析,结合动态跟踪可知,只要*1*处比较等于零就OK了(制作破解版就是将这个

比较后的JNZ改成永远不跳),*1*处所比较的值就是分别由*2*两次调用产生的,只要两次调都返回

“A”值就成功了。继续进行第六步分析,以夺取最后胜利——“找注册码”;

6、革命尚未成功,壮士还需努力!!,继续深入*2*CALL,分析代码如下:

0167:00403EB8 TEST EAX,EAX

0167:00403EBA JZ 00403EFC

0167:00403EBC TEST EDX,EDX

0167:00403EBE JZ 00403EF1

0167:00403EC0 PUSH EBX

0167:00403EC1 PUSH ESI

0167:00403EC2 PUSH EDI

0167:00403EC3 MOV ESI,EAX

0167:00403EC5 MOV EDI,EDX <==EDI指向的串是根据你机器码产生的,记为*3*

0167:00403EC7 MOV ECX,[EDI-04] <==串长度入ECX

0167:00403ECA PUSH EDI

0167:00403ECB MOV EDX,[ESI-04] <==你输入的码长度入EDX

0167:00403ECE DEC EDX <== -1

0167:00403ECF JS 00403EEC

0167:00403ED1 MOV AL,[ESI] <==S/N的第一位到AL

0167:00403ED3 INC ESI <==ESI指向第二位

0167:00403ED4 SUB ECX,EDX <==串长度-(输入码长度-1)

0167:00403ED6 JNG 00403EEC <==不大于跳,不能跳

0167:00403ED8 REPNE SCASB <==搜索第一字符在串中位置

0167:00403EDA JNZ 00403EEC <==不等于0跳,不能跳

0167:00403EDC MOV EBX,ECX

0167:00403EDE PUSH ESI

0167:00403EDF PUSH EDI

0167:00403EE0 MOV ECX,EDX

0167:00403EE2 REPE CMPSB <==比较剩下四位字符是否相同

0167:00403EE4 POP EDI

0167:00403EE5 POP ESI

0167:00403EE6 JZ 00403EF4 <==跳走,进一步找出你输入注册码在串中所处位置

0167:00403EE8 MOV ECX,EBX

0167:00403EEA JMP SHORT 00403ED8

0167:00403EEC POP EDX

0167:00403EED XOR EAX,EAX

0167:00403EEF JMP SHORT 00403EF9

0167:00403EF1 XOR EAX,EAX

0167:00403EF3 RET

0167:00403EF4 POP EDX

0167:00403EF5 MOV EAX,EDI

0167:00403EF7 SUB EAX,EDX <==这行就是产生返回值,实际上它就是你输入的注册码在

串中的位置,此程序要求是10(十六进制是A)。

0167:00403EF9 POP EDI

0167:00403EFA POP ESI

0167:00403EFB POP EBX

0167:00403EFC RET

其实这段代码你不一定要看懂,实际上它就是找出你所输入注册码在根据你机器码产生的串中

的位置。

小 结:

这个程序要找出注册码还真要仔细分析才能得出:

我的序例号:1319019

*3*处串为:882628364 30494 47244625

那么从10起的5位数字就是注册码:30494

后 记:

有疑问请与我联系:hz.cy@163.net

附 则:

斗地主V4.0 Build378破解:UPX脱壳,将4A8274处四个字节改成B0 01 90 90 就成注册版。

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

相关文章:

·语音界面2.0算法分析及注册机源码!

·侠客系统修改器1.21破解手记--算法分析

·中文拨号上网计时计费器 V4.12注册算法分析

·ClockWise 3.22e注册码算法分析

·CoolClock V1.02注册算法分析

·Directory Scanner v1.5 注册算法分析

·Disk Chief 1.2 简单注册算法分析

·EffeTech HTTP Sniffer 3.2注册算法分析

·eLib2.01算法分析

·EZ MP3 Recorder 1.15 注册算法分析

相关软件:

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

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

Powered

by:MeSky.Net

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

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

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