老文章档案 · 2003 年

小小气象台 V1.1.3 算法分析

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

一个气象软件的算法跟踪:

【软件限制】:无功能限制,但启动时跳出注册窗口

【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请各大侠赐教!

【破解工具】:Ollydbg1.09 中文版、W32Dasm8.93黄金版

—————————————————————————————

【过 程】:

呵呵,我们开工吧!唉!^-^^-^ 我的水平很低,许多地方表达的有问题,烦请各位老师指教!

为了保护国人软件,软件信息不贴了,要的发个消息.

这个软件的注册是先输入试验码,然后加密放在软件目录下的REG.KEY 中,那么关键点的查找就从REG.KEY关键

值开始,用W32Dasm8.93黄金版反汇编它,然后查找reg.key关键字.

==========================================================

00402596 |. 68 34B74000 PUSH tqyb.0040B734 ; ASCII "register.key"

0040259B |. C64424 3C 03 MOV BYTE PTR SS:[ESP+3C], 3

004025A0 |. E8 F1430000 CALL <JMP.&MFC42.#5186>

004025A5 |. 85C0 TEST EAX, EAX

004025A7 |. 75 41 JNZ SHORT tqyb.004025EA

**********************************************************

然后用Ollydbg1.09 中文版加载它,下中断在:

00402596 |. 68 34B74000 PUSH tqyb.0040B734 ; ASCII "register.key"

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

运行程序,中断后不久就到了核心部分,来看看:

这里应该是计算部分1

00402900 /$ 8A41 37 MOV AL, BYTE PTR DS:[ECX+37] ; AL <== DS:[041E0BB]= 78

00402903 |. 8A51 3E MOV DL, BYTE PTR DS:[ECX+3E] ; DL <== DS:[0041E0C2]=94

00402906 |. 8881 33040000 MOV BYTE PTR DS:[ECX+433], AL

; 然后把得到的值==>DS:[0041E4B7]

0040290C |. 8A41 4C MOV AL, BYTE PTR DS:[ECX+4C]

; 这说明输入的试验码是二个一组分开存放在reg.key中,这段程序就是解码

0040290F |. 8891 32040000 MOV BYTE PTR DS:[ECX+432], DL

00402915 |. 8A51 61 MOV DL, BYTE PTR DS:[ECX+61]

00402918 |. 8881 2F040000 MOV BYTE PTR DS:[ECX+42F], AL

0040291E |. 8A41 76 MOV AL, BYTE PTR DS:[ECX+76]

00402921 |. 8891 30040000 MOV BYTE PTR DS:[ECX+430], DL

00402927 |. BA DCFBFFFF MOV EDX, -424

0040292C |. 8881 31040000 MOV BYTE PTR DS:[ECX+431], AL

; 连接后就是输入的数字5612309478

00402932 |. 53 PUSH EBX

; 原来就是这样读出输入的数字的

00402933 |. 8D81 24040000 LEA EAX, DWORD PTR DS:[ECX+424]

00402939 |. 2BD1 SUB EDX, ECX

0040293B |> 8A88 F4FBFFFF /MOV CL, BYTE PTR DS:[EAX-40C]

; CL <== DS:[0041E09C] =36 ,这个地址内是机器码存放的地方,按照顺序放的

00402941 |. 8A58 0B |MOV BL, BYTE PTR DS:[EAX+B]

; BL <== DS:[0041E4B3] = 56 ,这个地址是输入的数字的存放的地方,顺序是从34521

00402944 |. 32CB |XOR CL, BL

; CL= 36 XOR 56 =60

00402946 |. 8A18 |MOV BL, BYTE PTR DS:[EAX]

; BL <== DS:[0041E4A8]=11 这个地址中是常数存放的地方

00402948 |. 32CB |XOR CL, BL

; CL= 60 XOR 11 =71

0040294A |. 75 10 |JNZ SHORT tqyb.0040295C

; 注册码关键比较的地方,即条件是56 xor 36 =11

0040294C |. 40 |INC EAX

; 关键的比较,实际上就是比较是不是相同

0040294D |. 8D0C02 |LEA ECX, DWORD PTR DS:[EDX+EAX>

00402950 |. 83F9 05 |CMP ECX, 5

; 这里是前10位的计算和比较部分

00402953 |.^ 7C E6 \JL SHORT tqyb.0040293B

00402955 |. B8 01000000 MOV EAX, 1

0040295A |. 5B POP EBX

0040295B |. C3 RETN

0040295C |> 33C0 XOR EAX, EAX

0040295E |. 5B POP EBX

0040295F \. C3 RETN

-----------------------------------------------------

这里应该是计算部分2

00402960 /$ 8A81 8B000000 MOV AL, BYTE PTR DS:[ECX+8B]

; AL <== DS:[0041E10F]=12 (

00402966 |. 8A91 F4000000 MOV DL, BYTE PTR DS:[ECX+F4]

0040296C |. 8881 2F040000 MOV BYTE PTR DS:[ECX+42F], AL

00402972 |. 8A81 F9000000 MOV AL, BYTE PTR DS:[ECX+F9]

00402978 |. 8891 30040000 MOV BYTE PTR DS:[ECX+430], DL

0040297E |. 8A91 09010000 MOV DL, BYTE PTR DS:[ECX+109]

00402984 |. 8881 31040000 MOV BYTE PTR DS:[ECX+431], AL

0040298A |. 8A81 DB010000 MOV AL, BYTE PTR DS:[ECX+1DB]

00402990 |. 8891 32040000 MOV BYTE PTR DS:[ECX+432], DL

; 这说明输入的试验码是二个一组分开存放在reg.key中,这段程序就是解码

00402996 |. BA D7FBFFFF MOV EDX, -429

0040299B |. 8881 33040000 MOV BYTE PTR DS:[ECX+433], AL

; 第二次把输入的试验码的后10位安顺序放在DS:[0041E4B3]中

004029A1 |. 53 PUSH EBX

004029A2 |. 8D81 29040000 LEA EAX, DWORD PTR DS:[ECX+429]

004029A8 |. 2BD1 SUB EDX, ECX

004029AA |> 8A88 F4FBFFFF /MOV CL, BYTE PTR DS:[EAX-40C]

; CL <== DS:[0041E0A1] =21 ,这个地址内是机器码后10位存放的地方,按照顺序放的

004029B0 |. 8A58 06 |MOV BL, BYTE PTR DS:[EAX+6]

; BL <== DS:[0041E4B3] = 12 ,这个地址是输入的数字的后10位存放的地方,顺序

004029B3 |. 32CB |XOR CL, BL

004029B5 |. 8A18 |MOV BL, BYTE PTR DS:[EAX]

; BL <== DS:[0041E4AD] = AA (常数的地址)

004029B7 |. 32CB |XOR CL, BL

004029B9 |. 75 10 |JNZ SHORT tqyb.004029CB

; 关键的比较,实际上就是比较是不是相同

004029BB |. 40 |INC EAX

004029BC |. 8D0C02 |LEA ECX, DWORD PTR DS:[EDX+EAX>

004029BF |. 83F9 05 |CMP ECX, 5

; 这里是后10位的计算和比较部分

004029C2 |.^ 7C E6 \JL SHORT tqyb.004029AA

004029C4 |. B8 01000000 MOV EAX, 1

004029C9 |. 5B POP EBX

004029CA |. C3 RETN

===================================================

以下是内存中的关键数据:

0041E4A8 11 33 55 77 99 AA CC BB 3Uw櫔袒 <==参数

0041E4B0 EE FF

56 12 30 94 78 ?.V0攛 <== 输入的数字 (分两次调入,每次10位)

0041E098 36 B5 44 13 @4.6礑 <==机器码存放的地方

0041E0A0 12 21 3B 40 58 6D !;@Xm.

=========================================================================================

到此注册码计算的分析完成,下面来总结注册码的计算方法:

条件: 注册码的长度为20位 , 因为是两个一组,现在我们用一个字符来表示一组.

机器码我们也用同样的方法表示.

设:

1.机器码 = M0 M1 M2 M3 M4 M5 M6 M7 M8 M9

2.注册码 = N0 N1 N2 N3 N4 N5 N6 N7 N8 N9

注册码的计算方法: N0 = M4 XOR 11

N1 = M3 XOR 33

N2 = M0 XOR 55

N3 = M1 XOR 77

N4 = M2 XOR 99

N5 = M5 XOR AA

N6 = M6 XOR CC

N7 = M7 XOR BB

N8 = M8 XOR EE

N9 = M9 XOR FF

fxyang

2003.2.27

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

相关文章:

·语音界面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)复原。发现问题请联系我们
← 返回老文章档案 · 软件史档案馆 · 赢政天下站史