老文章档案 · 2003 年

ElectrObalz 破解

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

ElectrObalz 一个游戏

软件大小: 1335 KB

软件语言: 英语

软件类别: 国外软件 / 共享版 / 游戏

应用平台: Win9x/NT/2000/XP

下载页面: http://www.isotope244.com/games.html

软件说明:

Smash through over 50 levels in this awesome action game. The goal is simple,

destroy all of the bricks in each level to proceed to the next level. Along

the way you will receive many different power items to help you.

The main element in ElectrObalz is Ether. Ether comes in two forms, red and

blue, both of which are needed to electrically form an electrOball! Your

space pad initiates an electrOball and then you can reflect the ball about the

level to destroy many different types of bricks. After completing many levels

and encountering many items and bricks, and only then will you have the

experience to finish the epic adventure of ElectrObalz!

【作者声明】:本人只是对Crack感兴趣,没有其它目的。

【破解工具】:Ollydbg1.09 中文版

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

【过 程】:

smallrice兄弟用WINHEX破解了这个软件,说明是明码比较可能简单.正好用来练习学习算法.运行游戏打开注册窗口,输入用户名: fxyang E_mail: fxyang@163.com 试验码:789456123012345678注册码要18位.再运行Ollydbg 用附加功能加载程序,然后按ALT+E 选择注册主程序,会车,来到程序领空.CTRL+N 选择 GetDlgtemTextA 下中断,运行程序,被OD中断后来到这里:

00411CF0 SUB ESP, 20

00411CF3 OR ECX, FFFFFFFF

00411CF6 XOR EAX, EAX

00411CF8 PUSH ESI

00411CF9 MOV ESI, DWORD PTR SS:[ESP+34]

; ESI<--ASCII "789456123012345678"(试验码)

00411CFD PUSH EDI

00411CFE MOV EDI, ESI

00411D00 REPNE SCAS BYTE PTR ES:[EDI]

00411D02 NOT ECX

00411D04 DEC ECX

00411D05 CMP ECX, 12

; <--长度12(H)=18位

00411D08 JE SHORT Electrob.00411D10

00411D0A POP EDI

00411D0B POP ESI

00411D0C ADD ESP, 20

00411D0F RETN

00411D10 MOV ECX, DWORD PTR SS:[ESP+34]

; ECX<--0012F4EC,(ASCII "fxyang@163.com")(E_mail)

00411D14 MOV EDX, DWORD PTR SS:[ESP+30]

; EDX<--0012F52C,(ASCII "fxyang")(用户名)

00411D18 LEA EAX, DWORD PTR SS:[ESP+8]

00411D1C PUSH EAX

00411D1D MOV EAX, DWORD PTR SS:[ESP+30]

; EAX<--0042A540 ASCII "ElectrObalz"(固定参数)

00411D21 PUSH ECX

00411D22 PUSH EDX

00411D23 PUSH EAX

00411D24 CALL Electrob.00411D60 <--计算注册码的地方 F7

00411D29 ADD ESP, 10

00411D2C TEST EAX, EAX

00411D2E JNZ SHORT Electrob.00411D36

00411D30 POP EDI

00411D31 POP ESI

00411D32 ADD ESP, 20

00411D35 RETN

00411D36 ADD ESI, 9

00411D39 PUSH 8

00411D3B LEA ECX, DWORD PTR SS:[ESP+15]

; ECX<--0012F4B9,(ASCII "910876135") <--通过计算得到的正确后八位

00411D3F PUSH ESI

; ESI=0012F575,(ASCII "012345678")<--试验码的后八位

00411D40 PUSH ECX

00411D41 CALL Electrob.00418070

00411D46 ADD ESP, 0C

00411D49 NEG EAX

00411D4B SBB EAX, EAX

00411D4D POP EDI

00411D4E INC EAX

; EAX=0<--失败的标志

; EAX=1<--成功的标志

00411D4F POP ESI

00411D50 ADD ESP, 20

00411D53 RETN

CALL Electrob.00411D60 <--计算注册码的地方 F7

00411D63 PUSH EBX

00411D64 PUSH EBP

00411D65 PUSH ESI

00411D66 MOV ESI, DWORD PTR SS:[ESP+18]

; ESI<--0042A540 ASCII "ElectrObalz"

00411D6A TEST ESI, ESI

00411D6C PUSH EDI

00411D6D JE Electrob.00411F77

00411D73 MOV EBP, DWORD PTR SS:[ESP+20]

; EBP<--0012F52C,(ASCII "fxyang")

00411D77 TEST EBP, EBP

00411D79 JE Electrob.00411F77

00411D7F MOV EDX, DWORD PTR SS:[ESP+24]

; EDX<--0012F4EC,(ASCII "fxyang@163.com")

00411D83 TEST EDX, EDX

00411D85 JE Electrob.00411F77

00411D8B MOV EAX, DWORD PTR SS:[ESP+28]

00411D8F TEST EAX, EAX

00411D91 JE Electrob.00411F77

00411D97 MOV EDI, ESI

; EDI<--0042A540 ASCII "ElectrObalz"

00411D99 OR ECX, FFFFFFFF

00411D9C XOR EAX, EAX

00411D9E MOV BYTE PTR SS:[ESP+10], 0

00411DA3 REPNE SCAS BYTE PTR ES:[EDI]

00411DA5 NOT ECX

00411DA7 DEC ECX ; ECX=B

00411DA8 MOV EDI, EBP ; EBP<--0012F52C,(ASCII "fxyang")

00411DAA MOV EBX, ECX

00411DAC OR ECX, FFFFFFFF

00411DAF REPNE SCAS BYTE PTR ES:[EDI]

00411DB1 NOT ECX

00411DB3 DEC ECX ; ECX=6

00411DB4 MOV EDI, EDX ; EDX<--0012F4EC,(ASCII "fxyang@163.com")

00411DB6 ADD EBX, ECX

00411DB8 OR ECX, FFFFFFFF

00411DBB REPNE SCAS BYTE PTR ES:[EDI]

00411DBD NOT ECX

00411DBF DEC ECX ; ECX=E

00411DC0 ADD EBX, ECX ; EBX=1F<--总长度

00411DC2 LEA EDI, DWORD PTR DS:[EBX+1] ; EDI=1F+1=20

00411DC5 PUSH EDI

00411DC6 CALL Electrob.00417478

00411DCB MOV EBP, EAX

00411DCD ADD ESP, 4

00411DD0 TEST EBP, EBP

00411DD2 JE Electrob.00411F77

00411DD8 MOV ECX, EDI

00411DDA XOR EAX, EAX

00411DDC MOV EDX, ECX

00411DDE MOV EDI, EBP

00411DE0 SHR ECX, 2

00411DE3 REP STOS DWORD PTR ES:[EDI]

00411DE5 MOV ECX, EDX

00411DE7 AND ECX, 3

00411DEA REP STOS BYTE PTR ES:[EDI]

00411DEC OR ECX, FFFFFFFF

00411DEF MOV EDI, ESI

00411DF1 XOR EAX, EAX

00411DF3 REPNE SCAS BYTE PTR ES:[EDI]

00411DF5 NOT ECX

00411DF7 SUB EDI, ECX

00411DF9 MOV EAX, ECX

00411DFB MOV ESI, EDI

00411DFD MOV EDI, EBP

00411DFF SHR ECX, 2

00411E02 REP MOVS DWORD PTR ES:[EDI], DWORD P>

00411E04 MOV ECX, EAX

00411E06 XOR EAX, EAX

00411E08 AND ECX, 3

00411E0B REP MOVS BYTE PTR ES:[EDI], BYTE PTR>

00411E0D MOV EDI, DWORD PTR SS:[ESP+20]

; EDI<--0012F52C,(ASCII "fxyang")

00411E11 OR ECX, FFFFFFFF

00411E14 REPNE SCAS BYTE PTR ES:[EDI]

00411E16 NOT ECX

00411E18 SUB EDI, ECX

00411E1A MOV ESI, EDI

00411E1C MOV EDX, ECX

00411E1E MOV EDI, EBP

; EDI<--0042A540 ASCII "ElectrObalz"

00411E20 OR ECX, FFFFFFFF

00411E23 REPNE SCAS BYTE PTR ES:[EDI]

00411E25 MOV ECX, EDX

00411E27 DEC EDI

00411E28 SHR ECX, 2

00411E2B REP MOVS DWORD PTR ES:[EDI], DWORD P>

00411E2D MOV ECX, EDX

00411E2F AND ECX, 3

00411E32 REP MOVS BYTE PTR ES:[EDI], BYTE PTR>

00411E34 MOV EDI, DWORD PTR SS:[ESP+24]

; EDI<--0012F4EC,(ASCII "fxyang@163.com")

00411E38 OR ECX, FFFFFFFF

00411E3B REPNE SCAS BYTE PTR ES:[EDI]

00411E3D NOT ECX

00411E3F SUB EDI, ECX

00411E41 MOV ESI, EDI

00411E43 MOV EDX, ECX

00411E45 MOV EDI, EBP

00411E47 OR ECX, FFFFFFFF

00411E4A SCAS BYTE PTR ES:[EDI]

00411E4C ECX, EDX

00411E4E EDI

00411E4F ECX, 2

00411E52 REP MOVS DWORD PTR ES:[EDI], DWORD P>

00411E54 MOV ECX, EDX

00411E56 AND ECX, 3

00411E59 REP MOVS BYTE PTR ES:[EDI], BYTE PTR>

00411E5B LEA ESI, DWORD PTR DS:[EBX-1]

00411E5E TEST ESI, ESI

00411E60 JBE SHORT Electrob.00411E7B

00411E62 OR EDI, FFFFFFFF

00411E65 LEA EAX, DWORD PTR SS:[EBP+1]

00411E68 SUB EDI, EBP

; EAX<--00F2E1E0 ASCII" ElectrObalzfxyangfxyang@163.com"

; 以上把三个参数连接起来

00411E6A MOV CL, BYTE PTR DS:[EAX-1] ; CL=DS:[EAX-1]=45 ('E')

00411E6D MOV DL, BYTE PTR DS:[EAX] ; DL=DS:[EAX]=6C ('l')

00411E6F ADD DL, CL

00411E71 MOV BYTE PTR DS:[EAX], DL ; DL=B1==>DS:[EAX]

00411E73 INC EAX

00411E74 LEA EDX, DWORD PTR DS:[EDI+EAX] ; EDX=DS:[EDI+EAX]=01

00411E77 CMP EDX, ESI

00411E79 JB SHORT Electrob.00411E6A

00411E7B ADD EBX, -2

00411E7E TEST EBX, EBX

00411E80 JBE SHORT Electrob.00411E91

; 把连接后的字符串的hex值从前向后相加取低位,放在后一位的位置上

; 完成后内存中的字符串是:

00EC23D8 45 B1 16 79 ED 5F AE 10 E?y韄?

00EC23E0 71 DD 57 BD 35 AE 0F 7D q軼??}

00EC23E8 E4 4A C2 3B 9C 0A 71 B1 銳??q?

00EC23F0 E2 18 4B 79 DC 4B B8 00 ?Ky躃?

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

|

00411E82 MOV AL, BYTE PTR DS:[EBX+EBP+1] ; AL=B8

00411E86 MOV CL, BYTE PTR DS:[EBX+EBP] ; CL=4B

00411E89 ADD CL, AL

00411E8B MOV BYTE PTR DS:[EBX+EBP], CL ; CL=03

00411E8E DEC EBX

00411E8F JNZ SHORT Electrob.00411E82

; 把连接后的字符串的hex值从后向前相加取低位

; 完成后内存中的字符串是:

00EC23D8 45 AB FA E4 6B 7E 1F 71 E鋕~q

00EC23E0 61 F0 13 BC FF CA 1C 0D a???.

00EC23E8 90 AC 62 A0 65 C9 BF 4E 惉b爀煽N

00EC23F0 9D BB A3 58 DF 03 B8 00 澔??

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

|

00411E91 MOV ESI, DWORD PTR SS:[ESP+1C]

00411E95 OR ECX, FFFFFFFF

00411E98 MOV EDI, ESI

00411E9A XOR EAX, EAX

00411E9C XOR EDX, EDX

00411E9E REPNE SCAS BYTE PTR ES:[EDI]

00411EA0 NOT ECX

00411EA2 DEC ECX

00411EA3 JE SHORT Electrob.00411EC3

00411EA5 MOV CL, BYTE PTR DS:[EDX+ESI] ; CL=DS:[EDX+ESI]=45 ('E')

00411EA8 MOV BL, BYTE PTR SS:[ESP+10] ; BL=SS:[0012F48C]=00

00411EAC ADD BL, CL

00411EAE MOV EDI, ESI ; EDI<--0042A540 ASCII "ElectrObalz"

00411EB0 OR ECX, FFFFFFFF

00411EB3 XOR EAX, EAX

00411EB5 INC EDX

00411EB6 MOV BYTE PTR SS:[ESP+10], BL ; BL=45

00411EBA REPNE SCAS BYTE PTR ES:[EDI]

00411EBC NOT ECX

00411EBE DEC ECX

00411EBF CMP EDX, ECX

00411EC1 JB SHORT Electrob.00411EA5

; 把字符"ElectrObalz"各位的hex值相加取低位=57==>SS:[0012F48C]

00411EC3 LEA EDX, DWORD PTR SS:[ESP+14]

00411EC7 PUSH EDX

00411EC8 CALL Electrob.00418208 ; EAX=3EA101EF

00411ECD LEA EAX, DWORD PTR SS:[ESP+18]

00411ED1 PUSH EAX

00411ED2 CALL Electrob.004180A8

00411ED7 MOV ESI, DWORD PTR DS:[EAX+14]

00411EDA MOV EDI, DWORD PTR DS:[EAX+1C]

00411EDD ADD ESP, 8

00411EE0 SUB ESI, 64

00411EE3 CMP EDI, 3E7

00411EE9 JLE SHORT Electrob.00411EF0

00411EEB MOV EDI, 3E7

00411EF0 CMP ESI, 64

00411EF3 JLE SHORT Electrob.00411EFA

00411EF5 MOV ESI, 63

00411EFA TEST EDI, EDI

00411EFC JGE SHORT Electrob.00411F00

00411EFE XOR EDI, EDI

00411F00 TEST ESI, ESI

00411F02 JGE SHORT Electrob.00411F06

00411F04 XOR ESI, ESI

00411F06 CALL Electrob.00417FDA

00411F0B CDQ

00411F0C MOV ECX, 0A

00411F11 IDIV ECX

00411F13 MOV EAX, DWORD PTR SS:[ESP+10]

00411F17 AND EAX, 0FF

00411F1C PUSH EDX

00411F1D PUSH ESI

00411F1E CDQ

00411F1F IDIV ECX

00411F21 PUSH EDI

00411F22 PUSH EDX

00411F23 PUSH 0

00411F25 CALL Electrob.00417FDA

00411F2A CDQ

00411F2B MOV ECX, 0A

00411F30 MOV ESI, DWORD PTR SS:[ESP+3C]

00411F34 IDIV ECX

00411F36 PUSH EDX

00411F37 PUSH Electrob.0042A54C

; ASCII "%01d%01d%02d%03d%02dXXXXXXXX%01d" <--字符串的格式

00411F3C PUSH ESI

00411F3D CALL Electrob.00417EFE

; <--计算出来常数串0012F4B0 ASCII "400710803XXXXXXXX6"

; 这个字符串是随机的格式如上

00411F42 ADD ESP, 20

00411F45 XOR ECX, ECX

00411F47 XOR EAX, EAX

00411F49 MOV EDI, 0A

00411F4E MOV AL, BYTE PTR DS:[ECX+EBP] //开始真正的注册码计算

; AL=DS:[ECX+EBP]=45 ('E') <--上面计算的串的第一位

00411F51 CDQ

00411F52 IDIV EDI

; EAX=45 IDIV EDI=A ==>EAX= 6 EDX=9

00411F54 ADD DL, 30

; DL=9+30=39

; 变成数字

00411F57 MOV BYTE PTR DS:[ESI+ECX+9], DL ; DS:[ESI+ECX+9]<--DL=39

00411F5B INC ECX

00411F5C CMP ECX, 8 ; <--计算8位

00411F5F JB SHORT Electrob.00411F47

00411F61 PUSH EBP

; 计算8位填上面的x位

; 0012F4B0 ASCII "400710803910876135"<--完成计算后的字符串

; 说明以上计算实际上就是把每个字节的16进制值转变成10进制,然后取个位做注册码

; 取值的长度是八位

00411F62 CALL Electrob.00417486

00411F67 ADD ESP, 4

00411F6A MOV EAX, 1

00411F6F POP EDI

00411F70 POP ESI

00411F71 POP EBP

00411F72 POP EBX

00411F73 ADD ESP, 8

00411F76 RETN

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

到这里算法跟踪已完成,现在总结一下

条件--注册码的长度是18位

算法总结:

1.用字符串"ElectrObalz"和用户名,E_mail连接成一个新字符串

2.把新字符串的前一位hex值和后一位的hex值相加,值放在后一位.然后继续

3.把计算后的串从最后一位开始的hex值加前一位的hex值,值放在前一位上.

然后继续.

4.最后取前八个字节,把它的16进制值转变成10进制,然后取个位做注册码

把这个值替换在第10-17位的位置上,就是18位的注册码.也就是说,注册

码的1-9位和第18位是任何数字即可.另外注册码应该与E_mail无关,因为

计算注册码时只取前8字节.

by fxyang[OCN]

2003.4.19

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

相关文章:

·ASProtect的加密算法初步分析

·MD5算法研究

·Active Ebook Compiler的注册算法

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

·简单算法——小护士 V1.2

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

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

·加密算法之RSA算法

·加密算法之DES算法

·加密算法之ElGamal算法

相关软件:

·胜新通用人事工资管理系统 V5.01注册码算法

·胜新出纳-支票打印软件 V4.0X 的注册码算法

·胜新现代办公百宝箱 V5.01 的注册码算法

·胜新信函宝典-信封打印软件 V2.02 注册码的算法

·胜新通用企业计划管理系统的注册码算法

·共享软件加密算法库 2.5

·操作系统内存分配银行家算法模拟系统 XP

→ 特别推荐

→ 热点TOP10

关于我们 |

帮助(?)

| 广告服务 |

版权声明 |

商业合作 |

发展历程 |

加盟我们 |

联系我们

Copyright © 1999-2003

winzheng.com All Rights Reserved.

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

Powered

by:MeSky.Net

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

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

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