ElectrObalz 破解(3)

时间:2005-12-20 来源: 作者: 点击:
; 把字符"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.004
  ; 把字符"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

------分隔线----------------------------
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 密码: 验证码:
推荐内容