下载页面:
http://www.skycn.com/soft/7063.html
软件大小:
8480 KB
软件语言: 简体中文
软件类别: 国产软件 / 共享版 / 外语学习
应用平台: Win9x/NT/2000/XP
加入时间:
2003-04-28 18:35:04
下载次数: 320349
推荐等级: ****
开 发 商:
http://www.8ge.net/
【软件简介】:英语八哥为你提供完整的“听说读写”功能,激发学习英语的持久兴趣!主要功能:《→听》以可爱的卡通人物的对话形式,以纯正英语朗读精选的口语例句及小说文章,富于娱乐性;《→说》即跟读对比功能。通过与标准英语的对比,可以纠正自己的发音错误,检查重音和语调是否正确。反复大声地说,反复地对比,一直到能够脱口而出标准的英语;《→读》所有资料均可选择英汉对照显示或只显示英文(单击时提示该段中文)、只显示中文(单击时提示该段英文)。《→写》英语日记本功能,包含基本写作教程、上百篇范文、上万条例句、几十种分类词汇,每天写一点,进步看得见。《→记忆单词》包含初高中、大学四六级、托福等各级别词汇,功能和易用性远胜过多款商业背单词软件。《→原声播放》可以整理和播放英语语音文件,如MP3文件、RM文件等流行的绝大多数格式媒体文件,可以自己增加英文原文和中文译文并自动保存。包含资料:《→句子、对话》生意英语、求职英语、社交英语、旅游英语、英语900句、新英语900句、一起练口语3000句、各种时态例句、谚语1500句、走遍美国情景对话。《→小说、诗哥、剧本》查太莱夫人的情人、傲慢与偏见、爱丽丝漫游记、呼啸山庄、简·爱、鲁宾逊飘流记、茶花女、汤姆叔叔的小屋、飞鸟集、外国短诗、飘、西雅图不眠夜、赛斯名言、羊皮卷。《→课文、笔记》初中高中英语课文、大学英语精读、大学英语泛读、大学英语自学辅导课文、四十二天写作教程、新概念英语、许国璋英语。
【软件限制】:功能限制
【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:TRW2000娃娃修改版、Ollydbg1.09、PEiD、W32Dasm 9.0白金版
—————————————————————————————————
【过
程】:
英语八哥.exe 无壳。 P-Code 的东东。
据说完整注册还需要一个DLL文件,我这里只是简单探讨一下其注册码的保护方式,我也没有那个DLL文件。
哎,非要碰上这个难缠的P-Code,用了我2天的宝贵时间来分析,许多的指令不知道其涵义,只能是猜测+调试了。
不明白P-Code的许多命令都要来两次,呵呵,我现在已然是晕头转向了。错误之处烦请方家指正!
点“注册”没有一点提示,于是用TRW的万能断点,简单就找到了比较的地方,但是找算法却花了20倍的时间!
我的水平很低,许多地方无法写清楚了。抱歉!
突然想起作者推崇的“黄金分割定律”,或许这个程序的算法也运用了“黄金分割比率”的某些方面呀。
向作者道歉了!佩服作者的编程功夫!真的奢望某某年之后我也能达到这个水平呀!
机器码:6004111345232619
试炼码:13572468
—————————————————————————————————
一、调用MSVBVM60.rtcMidCharBstr取5KA089DJ的字符:
5KA089DJ应该是我硬盘的某个信息,依稀记得曾调试过的某个软件也是取这个参数。
66024808
E8 1E000000 CALL MSVBVM60.rtcMidBstr
6602480D
C9 LEAVE
6602480E
C2 0C00 RETN 0C
66024811 33C9
XOR ECX,ECX
66024813 ^ EB E2
JMP SHORT MSVBVM60.660247F7
66024815
50 PUSH EAX
66024816
66:C745 F0 0300 MOV WORD PTR SS:[EBP-10],3
6602481C E8
7A010000 CALL MSVBVM60.6602499B
66024821 D1E0
SHL EAX,1
66024823 8945 F8
MOV DWORD PTR SS:[EBP-8],EAX
66024826 8D45
F0 LEA EAX,DWORD PTR SS:[EBP-10]
66024829 ^
EB D1 JMP SHORT MSVBVM60.660247FC
6602482B
> 8B4424 08 MOV EAX,DWORD PTR SS:[ESP+8]
6602482F
53 PUSH EBX
66024830
56 PUSH ESI
66024831
57 PUSH EDI
66024832
8D78 FF LEA EDI,DWORD PTR DS:[EAX-1]
66024835
85FF TEST EDI,EDI
66024837
0F8C 91260200 JL MSVBVM60.66046ECE
6602483D 81FF
FFFFFF7F CMP EDI,7FFFFFFF
66024843 0F8F 85260200
JG MSVBVM60.66046ECE
66024849 8B4424 10 MOV
EAX,DWORD PTR SS:[ESP+10]
6602484D 8BDF
MOV EBX,EDI
6602484F 85C0
TEST EAX,EAX
66024851 0F84 7E260200 JE MSVBVM60.66046ED5
66024857
8B70 FC MOV ESI,DWORD PTR DS:[EAX-4]
6602485A
3BFE CMP EDI,ESI
6602485C
0F87 7A260200 JA MSVBVM60.66046EDC
66024862 8B4C24
18 MOV ECX,DWORD PTR SS:[ESP+18]
66024866 66:8339
0A CMP WORD PTR DS:[ECX],0A
6602486A 75 35
JNZ SHORT MSVBVM60.660248A1
6602486C
8179 08 0400028>CMP DWORD PTR DS:[ECX+8],80020004
66024873
75 2C JNZ SHORT MSVBVM60.660248A1
66024875
83C8 FF OR EAX,FFFFFFFF
66024878
66:85C0 TEST AX,AX
6602487B 74
28 JE SHORT MSVBVM60.660248A5
6602487D
2BF3 SUB ESI,EBX
6602487F
8BC6 MOV EAX,ESI
66024881
50 PUSH EAX
66024882
8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
====>EAX=5KA089DJ
66024886
03D8 ADD EBX,EAX
====>EBX=依次取5KA089DJ字符的HEX值
66024888
53 PUSH EBX
66024889
FF15 EC190066 CALL DWORD PTR DS:[<&OLEAUT32.#150>];
OLEAUT32.SysAllocStringByteLen
6602488F 8BF0
MOV ESI,EAX
66024891 85F6
TEST ESI,ESI
66024893 0F84 51260200
JE MSVBVM60.66046EEA
66024899 8BC6
MOV EAX,ESI
6602489B 5F
POP EDI
6602489C 5E
POP ESI
6602489D 5B
POP EBX
6602489E C2 0C00
RETN 0C
—————————————————————————————————
比较取的字符是否是数字:
77A32A0E
F3:66:A7 REPE CMPS WORD PTR ES:[EDI],WORD
PTR DS:>
====>比较所取的字符是否是数字。每个字符都比较2次,呵呵。
6610344F
E8 03CDFFFF CALL MSVBVM60.__vbaBoolVarNull
====>晕,再比较一次
取硬盘参数5KA089DJ。如果是数字则直接保留;是字母则取其字符的HEX值的10进制值并加上其所在的位数。
5KA089DJ得出577680897582
呵呵,这个答案是猜测的,抱歉没能找到转换的地方。
—————————————————————————————————
调用OLEAUT32.VarBstrCat
连接所得出的字符:
66025324 > 55
PUSH EBP
66025325 8BEC
MOV EBP,ESP
66025327 8D45 08
LEA EAX,DWORD PTR SS:[EBP+8]
6602532A
50 PUSH EAX
6602532B
FF75 08 PUSH DWORD PTR SS:[EBP+8]
6602532E
FF75 0C PUSH DWORD PTR SS:[EBP+C]
66025331
FF15 6CFE1066 CALL DWORD PTR DS:[6610FE6C]; OLEAUT32.VarBstrCat
66025337
85C0 TEST EAX,EAX
66025339
0F8C D11A0200 JL MSVBVM60.66046E10
6602533F
8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
====>5KA089DJ最后得出 EAX=577680897582
66025342
5D POP EBP
66025343
C2 0800 RETN 8
—————————————————————————————————
下面再取577680897582:
66024882
8B4424 14 MOV EAX,DWORD PTR SS:[ESP+14]
====>EAX=577680897582
66024886
03D8 ADD EBX,EAX
1、 ====>EBX=897582
从第7位取577680897582
2、 ====>EBX=7680897582
从第3位取577680897582
66024888 53
PUSH EBX
66024889 FF15
EC190066 CALL DWORD PTR DS:[<&OLEAUT32.#150>] ; OLEAUT32.SysAllocStringByteLen
6602488F
8BF0 MOV ESI,EAX
66024891
85F6 TEST ESI,ESI
66024893
0F84 51260200 JE MSVBVM60.66046EEA
66024899 8BC6
MOV EAX,ESI
1、 ====>897
取897582的前3位
2、 ====>768 取7680897582的前3位
6602489B
5F POP EDI
6602489C
5E POP ESI
6602489D
5B POP EBX
6602489E
C2 0C00 RETN 0C
66024A2A
8B41 FC MOV EAX,DWORD PTR DS:[ECX-4]
66024A2D
2BC2 SUB EAX,EDX
66024A2F
52 PUSH EDX
66024A30
03C1 ADD EAX,ECX
66024A32
50 PUSH EAX
3、
====>EAX=582
4、 ====>EAX=768582
66024A33
FF15 EC190066 CALL DWORD PTR DS:[<&OLEAUT32.#150>]
; OLEAUT32.SysAllocStringByteLen
66024A39
8BF0 MOV ESI,EAX
66024A3B
85F6 TEST ESI,ESI
66024A3D
0F84 84240200 JE MSVBVM60.66046EC7
66024A43
8BC6 MOV EAX,ESI
66024A45
5E POP ESI
66024A46
C2 0800 RETN 8
—————————————————————————————————
对上面所取的字符进行连接:
66105616
FFD3 CALL EBX ;
MSVBVM60.__vbaVarAdd
66105618 57
PUSH EDI
66105619 33C0
XOR EAX,EAX
6610561B 8A46 02
MOV AL,BYTE PTR DS:[ESI+2]
6610561E 83C6 03
ADD ESI,3
66105621 FF2485 58EA0F66
JMP DWORD PTR DS:[EAX*4+660FEA58]
跟进MSVBVM60.__vbaVarAdd:
77A2F04D
>/$ 55 PUSH EBP
77A2F04E
|. 8BEC MOV EBP,ESP
77A2F050
|. 53 PUSH EBX
77A2F051
|. 56 PUSH ESI
77A2F052
|. 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
77A2F055
|. 57 PUSH EDI
77A2F056
|. 85F6 TEST ESI,ESI
77A2F058
|. 75 2E JNZ SHORT OLEAUT32.77A2F088
77A2F05A
|. 33DB XOR EBX,EBX
77A2F05C
|> 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
77A2F05F
|. 85C0 TEST EAX,EAX
77A2F061
|. 75 2A JNZ SHORT OLEAUT32.77A2F08D
77A2F063
|. 2145 08 AND DWORD PTR SS:[EBP+8],EAX
77A2F066
|> 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
77A2F069
|. 03C3 ADD EAX,EBX
77A2F06B
|. 50 PUSH EAX
77A2F06C
|. 6A 00 PUSH 0
77A2F06E |.
E8 194EF8FF CALL OLEAUT32.SysAllocStringByteLen
77A2F073
|. 8B4D 10 MOV ECX,DWORD PTR SS:[EBP+10]
77A2F076
|. 85C0 TEST EAX,EAX
77A2F078
|. 8901 MOV DWORD PTR DS:[ECX],EAX
77A2F07A
|. 75 19 JNZ SHORT OLEAUT32.77A2F095
77A2F07C
|. B8 0E000780 MOV EAX,8007000E
77A2F081 |>
5F POP EDI
77A2F082 |.
5E POP ESI
77A2F083 |.
5B POP EBX
77A2F084 |.
5D POP EBP
77A2F085 |.
C2 0C00 RETN 0C
577680897582重新连接的结果为:577897768582
然后再分别取前6位、后6位运算。
—————————————————————————————————
分别取768582、577897与程序给的654321相加:
77A2F546
E8 B420F8FF CALL OLEAUT32.VariantChangeTypeEx
77A2F54B
85C0 TEST EAX,EAX
77A2F54D
8945 08 MOV DWORD PTR SS:[EBP+8],EAX
77A2F550
^ 0F8C ADFDFFFF JL OLEAUT32.77A2F303
77A2F556 DD45
E0 FLD QWORD PTR SS:[EBP-20]
====>SS:[EBP-20]=654321.0000000000
程序自给
77A2F559 DC45
F0 FADD QWORD PTR SS:[EBP-10]
1、====>ST=654321.0000000000
+ 768582.0000000000=1422903.0000000000000
2、====>ST=654321.0000000000
+ 577897.0000000000=701353.00000000000000
77A2F55C
DD55 F8 FST QWORD PTR SS:[EBP-8]
77A2F55F
8B4D FC MOV ECX,DWORD PTR SS:[EBP-4]
77A2F562
B8 0000F07F MOV EAX,7FF00000
77A2F567 23C8
AND ECX,EAX
77A2F569 6A
05 PUSH 5
77A2F56B 3BC8
CMP ECX,EAX
77A2F56D 5B
POP EBX
77A2F56E 0F85
E0000000 JNZ OLEAUT32.77A2F654
77A2F574 DDD8
FSTP ST
77A2F576 DBE2
FCLEX
77A2F578 C745 08 0A00028>MOV
DWORD PTR SS:[EBP+8],8002000A
77A2F57F ^ E9 9FFDFFFF JMP
OLEAUT32.77A2F323
—————————————————————————————————
将1422903和701053转换成UNICODE格式:
661034CF
E8 FA15FEFF CALL MSVBVM60.__vbaStrI4
661034D4
50 PUSH EAX
1、====>EAX=1422903
2、====>EAX=701353
661034D5 33C0
XOR EAX,EAX
661034D7 8A06
MOV AL,BYTE PTR DS:[ESI]
661034D9
46 INC ESI
661034DA
FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]
—————————————————————————————————
将1422903和701053 连接起来:
660FE996 E8
8969F2FF CALL MSVBVM60.__vbaStrCat
660FE99B 50
PUSH EAX
660FE99C 33C0
XOR EAX,EAX
660FE99E 8A06
MOV AL,BYTE PTR DS:[ESI]
660FE9A0
46 INC ESI
660FE9A1
FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]
66025324
> 55 PUSH EBP
66025325
8BEC MOV EBP,ESP
66025327
8D45 08 LEA EAX,DWORD PTR SS:[EBP+8]
6602532A
50 PUSH EAX
6602532B
FF75 08 PUSH DWORD PTR SS:[EBP+8]
6602532E
FF75 0C PUSH DWORD PTR SS:[EBP+C]
66025331
FF15 6CFE1066 CALL DWORD PTR DS:[6610FE6C]; OLEAUT32.VarBstrCat
66025337
85C0 TEST EAX,EAX
66025339
0F8C D11A0200 JL MSVBVM60.66046E10
6602533F 8B45
08 MOV EAX,DWORD PTR SS:[EBP+8]
====>EAX=1422903701053
66025342
5D POP EBP
66025343
C2 0800 RETN 8
—————————————————————————————————
取1422903701053的前8位14229037的16进制值:
66103650
E8 7150FEFF CALL MSVBVM60.__vbaI4ErrVar
66103655
50 PUSH EAX
====>EAX=00D91E2D(H)=14229037(D)
66103656
33C0 XOR EAX,EAX
66103658
8A06 MOV AL,BYTE PTR DS:[ESI]
6610365A
46 INC ESI
6610365B
FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]
00D91E2D就是运算注册码的核心参数!!!
—————————————————————————————————
用14229037生成软件上所显示的机器码:
呵呵,我实在是太累了,这一步无法详细跟踪了,最后再给个简单的求逆方式。^O^^O^
66103675
E8 6315FEFF CALL MSVBVM60.rtBstrFromErrVar
6610367A
50 PUSH EAX
====>EAX=140069162 很象我的机器码的某些位呀^O^^O^
6610367B
33C0 XOR EAX,EAX
6610367D
8A06 MOV AL,BYTE PTR DS:[ESI]
6610367F
46 INC ESI
66103680
FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]
660F99F0
57 PUSH EDI
660F99F1
56 PUSH ESI
660F99F2
8B73 FC MOV ESI,DWORD PTR DS:[EBX-4]
660F99F5
D1EE SHR ESI,1
660F99F7
56 PUSH ESI
660F99F8
6A 00 PUSH 0
660F99FA
FF15 E8190066 CALL DWORD PTR DS:[<&OLEAUT32.#4>] ;
OLEAUT32.SysAllocStringLen
660F9A00 8BF8
MOV EDI,EAX
660F9A02 85FF
TEST EDI,EDI
660F9A04 75 07
JNZ SHORT MSVBVM60.660F9A0D
660F9A06 6A 0E
PUSH 0E
660F9A08 E8 85BBF2FF
CALL MSVBVM60.66025592
660F9A0D 66:832477 00
AND WORD PTR DS:[EDI+ESI*2],0
660F9A12 8D0477
LEA EAX,DWORD PTR DS:[EDI+ESI*2]
660F9A15 8BD6
MOV EDX,ESI
660F9A17 4E
DEC ESI
660F9A18 85D2
TEST EDX,EDX
660F9A1A 8BCB
MOV ECX,EBX
660F9A1C 76
10 JBE SHORT MSVBVM60.660F9A2E
660F9A1E
8D56 01 LEA EDX,DWORD PTR DS:[ESI+1]
660F9A21
66:8B31 MOV SI,WORD PTR DS:[ECX]
660F9A24
48 DEC EAX
660F9A25
48 DEC EAX
660F9A26
41 INC ECX
660F9A27
41 INC ECX
660F9A28
4A DEC EDX
660F9A29
66:8930 MOV WORD PTR DS:[EAX],SI
660F9A2C
^ 75 F3 JNZ SHORT MSVBVM60.660F9A21
660F9A2E
8BC7 MOV EAX,EDI
660F9A30
5E POP ESI
660F9A31
5F POP EDI
660F9A32
^ EB B8 JMP SHORT MSVBVM60.660F99EC
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
====>下面是填入试炼码后拦截的关键部分:
—————————————————————————————————
分别取试炼码13572468和核心参数14229037。并转换成UNICODE格式:
6601B79B
FFD6 CALL ESI
6601B79D
837D 0C FF CMP DWORD PTR SS:[EBP+C],-1
6601B7A1
8BF8 MOV EDI,EAX
6601B7A3
75 01 JNZ SHORT MSVBVM60.6601B7A6
6601B7A5
4F DEC EDI
6601B7A6
57 PUSH EDI
6601B7A7
53 PUSH EBX
6601B7A8
FF15 E8190066 CALL DWORD PTR DS:[<&OLEAUT32.#4>];
OLEAUT32.SysAllocStringLen
6601B7AE 3BC3
CMP EAX,EBX
6601B7B0 8945 FC
MOV DWORD PTR SS:,EAX
====>[EBP-4]=EAX=14229037
机器码生成的核心参数
6601B7B3 0F84
E9F90100 JE MSVBVM60.6603B1A2
6601B7B9 47
INC EDI
6601B7BA 57
PUSH EDI
6601B7BB 50
PUSH EAX
6601B7BC FF75
0C PUSH DWORD PTR SS:[EBP+C]
6601B7BF FF75
08 PUSH DWORD PTR SS:[EBP+8]
====>[EBP+8]=13572468
试炼码
6601B7C2
53 PUSH EBX
6601B7C3
53 PUSH EBX
6601B7C4
FFD6 CALL ESI
====>将试炼码和14229037转换成UNICODE格式
6601B7C6
8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
1、
====>EAX=1357248
2、 ====>EAX=14229037
6601B7C9
5F POP EDI
6601B7CA
5E POP ESI
6601B7CB
5B POP EBX
6601B7CC
C9 LEAVE
6601B7CD
C2 0800 RETN 8
—————————————————————————————————
下面是调用 MSVBVM60.__vbaI4Str 取14229037的16进制值
66103597
E8 BB1FFEFF CALL MSVBVM60.__vbaI4Str
====>取14229037的16进制值00D91E2D
6610359C
50 PUSH EAX
====>EAX=00D91E2D
6610359D 33C0
XOR EAX,EAX
6610359F 8A06
MOV AL,BYTE PTR DS:[ESI]
661035A1
46 INC ESI
661035A2
FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]
—————————————————————————————————
下面是对00D91E2D进行简单的
除2 运算,取得商:
6610533B 59
POP ECX
6610533C 58
POP EAX
6610533D 99
CDQ
6610533E F7F9
IDIV ECX
====>EAX=00D91E2D
/ 2=006C8F16(H)=7114518(D)
66105340 50
PUSH EAX
66105341 33C0
XOR EAX,EAX
66105343 8A06
MOV AL,BYTE PTR DS:[ESI]
66105345
46 INC ESI
66105346
FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]
—————————————————————————————————
下面是取商006C8F16的10进制值:
661034CF E8
FA15FEFF CALL MSVBVM60.__vbaStrI4
661034D4 50
PUSH EAX
====>EAX=7114518
661034D5
33C0 XOR EAX,EAX
661034D7
8A06 MOV AL,BYTE PTR DS:[ESI]
661034D9
46 INC ESI
661034DA
FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]
—————————————————————————————————
下面是调用 rtcStrReverse 命令将7114518倒序排列:^O^^O^
660F9A00
8BF8 MOV EDI,EAX
====>EDI=EAX=7114518
660F9A02 85FF
TEST EDI,EDI
660F9A04 75
07 JNZ SHORT MSVBVM60.660F9A0D
660F9A06
6A 0E PUSH 0E
660F9A08
E8 85BBF2FF CALL MSVBVM60.66025592
660F9A0D
66:832477 00 AND WORD PTR DS:[EDI+ESI*2],0
660F9A12
8D0477 LEA EAX,DWORD PTR DS:[EDI+ESI*2]
660F9A15
8BD6 MOV EDX,ESI
660F9A17
4E DEC ESI
660F9A18
85D2 TEST EDX,EDX
660F9A1A
8BCB MOV ECX,EBX
660F9A1C
76 10 JBE SHORT MSVBVM60.660F9A2E
660F9A1E
8D56 01 LEA EDX,DWORD PTR DS:[ESI+1]
660F9A21
66:8B31 MOV SI,WORD PTR DS:[ECX]
660F9A24
48 DEC EAX
660F9A25
48 DEC EAX
660F9A26
41 INC ECX
660F9A27
41 INC ECX
660F9A28
4A DEC EDX
660F9A29
66:8930 MOV WORD PTR DS:[EAX],SI
660F9A2C
^ 75 F3 JNZ SHORT MSVBVM60.660F9A21
660F9A2E
8BC7 MOV EAX,EDI
====>EAX=8154117 倒序排列的结果!注意!!
660F9A30
5E POP ESI
660F9A31
5F POP EDI
660F9A32
^ EB B8 JMP SHORT MSVBVM60.660F99EC
—————————————————————————————————
下面是调用 MSVBVM60.__vbaLenBstr 命令取8154117的长度:
661071D4
E8 F2D6F1FF CALL MSVBVM60.__vbaLenBstr
661071D9
50 PUSH EAX
====>EAX=7 以此长度取下面的试炼码进行比较!
661071DA
33C0 XOR EAX,EAX
661071DC
8A06 MOV AL,BYTE PTR DS:[ESI]
661071DE
46 INC ESI
—————————————————————————————————
下面是调用 MSVBVM60.rtcLeftVar 命令取试炼码的前7位字符:
660248EE
> 55 PUSH EBP
660248EF
8BEC MOV EBP,ESP
660248F1
83EC 10 SUB ESP,10
660248F4
8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
660248F7
56 PUSH ESI
660248F8
03C0 ADD EAX,EAX
660248FA
57 PUSH EDI
660248FB
50 PUSH EAX
660248FC
8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
660248FF
FF75 0C PUSH DWORD PTR SS:[EBP+C]
66024902
50 PUSH EAX
66024903
E8 11000000 CALL MSVBVM60.rtcLeftVar
66024908
8BF0 MOV ESI,EAX
6602490A
8B45 08 MOV EAX,DWORD PTR SS:[EBP+8]
6602490D
8BF8 MOV EDI,EAX
6602490F
A5 MOVS DWORD PTR
ES:[EDI],DWORD PTR DS:[ESI]
66024910 A5
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024911
A5 MOVS DWORD PTR ES:[EDI],DWORD
PTR DS:[ESI]
66024912 A5
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024913 5F
POP EDI
66024914 5E
POP ESI
66024915 C9
LEAVE
66024916 C2
0C00 RETN 0C
66024919
> 55 PUSH EBP
6602491A
8BEC MOV EBP,ESP
6602491C
83EC 10 SUB ESP,10
6602491F
56 PUSH ESI
66024920
57 PUSH EDI
66024921
FF35 B0FE1066 PUSH DWORD PTR DS:[6610FEB0]
66024927
FF15 AC100066 CALL DWORD PTR DS:[<&KERNEL32.TlsGetvalue>]
6602492D
8D70 50 LEA ESI,DWORD PTR DS:[EAX+50]
66024930
56 PUSH ESI
66024931
FF75 0C PUSH DWORD PTR SS:[EBP+C]
66024934
E8 37000000 CALL MSVBVM60.66024970
66024939
83F8 FF CMP EAX,-1
6602493C
0F84 52250200 JE MSVBVM60.66046E94
66024942
FF75 10 PUSH DWORD PTR SS:[EBP+10]
66024945
50 PUSH EAX
====>EAX=13572468 试炼码
66024946
E8 18FEFFFF CALL MSVBVM60.rtcLeftBstr
====>取试炼码的前7位!
6602494B 66:833E
08 CMP WORD PTR DS:[ESI],8
6602494F 8945
F8 MOV DWORD PTR SS:[EBP-8],EAX
====>[EBP-8]=EAX=1357246 试炼码的前7位
66024952
66:C745 F0 0800 MOV WORD PTR SS:[EBP-10],8
66024958
0F84 24250200 JE MSVBVM60.66046E82
6602495E 8B45
08 MOV EAX,DWORD PTR SS:[EBP+8]
66024961
8D75 F0 LEA ESI,DWORD PTR SS:[EBP-10]
66024964
8BF8 MOV EDI,EAX
66024966
A5 MOVS DWORD PTR
ES:[EDI],DWORD PTR DS:[ESI]
66024967 A5
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
66024968
A5 MOVS DWORD PTR ES:[EDI],DWORD
PTR DS:[ESI]
66024969 A5
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
6602496A 5F
POP EDI
6602496B 5E
POP ESI
6602496C C9
LEAVE
6602496D C2
0C00 RETN 0C
—————————————————————————————————
下面是调用 OLEAUT32.VarCmp 进行比较了:^O^^O^^O^^O^
66100055
FF15 60FE1066 CALL DWORD PTR DS:[6610FE60] ; OLEAUT32.VarCmp
6610005B
8945 08 MOV DWORD PTR SS:[EBP+8],EAX
6610005E
8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
66100061
85F6 TEST ESI,ESI
66100063
0F8C E9780000 JL MSVBVM60.66107952
====>不跳则OVER! 呵呵,可惜无法爆破了。
66100069
8D46 FF LEA EAX,DWORD PTR DS:[ESI-1]
6610006C
5F POP EDI
6610006D
5E POP ESI
6610006E
5B POP EBX
6610006F
C9 LEAVE
66100070
C2 0C00 RETN 0C
跟进OLEAUT32.VarCmp:
77A329D3
|. 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
====>ESI=1357246 试炼码的前7位!
77A329D6
|. 57 PUSH EDI
77A329D7
|. 85F6 TEST ESI,ESI
77A329D9
|. 75 4C JNZ SHORT OLEAUT32.77A32A27
77A329DB
|. 2175 FC AND DWORD PTR SS:[EBP-4],ESI
77A329DE
|> 8B4D 0C MOV ECX,DWORD PTR SS:[EBP+C]
====>ECX=8154117 呵呵,这就是我的注册码了!
77A329E1
|. 85C9 TEST ECX,ECX
77A329E3
|. 75 4A JNZ SHORT OLEAUT32.77A32A2F
77A329E5
|. 33DB XOR EBX,EBX
77A329E7
|> 395D FC CMP DWORD PTR SS:[EBP-4],EBX
77A329EA
|. 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
77A329ED
|. 72 02 JB SHORT OLEAUT32.77A329F1
77A329EF
|. 8BD3 MOV EDX,EBX
77A329F1
|> 8B45 10 MOV EAX,DWORD PTR SS:[EBP+10]
77A329F4
|. 85C0 TEST EAX,EAX
77A329F6
|. 75 5B JNZ SHORT OLEAUT32.77A32A53
77A329F8
|. 85D2 TEST EDX,EDX
77A329FA
|. 74 60 JE SHORT OLEAUT32.77A32A5C
77A329FC
|. 8BC2 MOV EAX,EDX
77A329FE
|. D1E8 SHR EAX,1
77A32A00 |.
8945 10 MOV DWORD PTR SS:[EBP+10],EAX
77A32A03
|. 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C]
77A32A06
|. 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
77A32A09
|. 8B4D 10 MOV ECX,DWORD PTR SS:[EBP+10]
77A32A0C
|. 33C0 XOR EAX,EAX
77A32A0E
|. F3:66:A7 REPE CMPS WORD PTR ES:[EDI],WORD
PTR DS:[ESI]
====>逐位比较!有一个不同就OVER了!
77A32A11
|. 74 05 JE SHORT OLEAUT32.77A32A18
====>不跳则OVER!
77A32A13 |.
1BC0 SBB EAX,EAX
77A32A15 |.
83D8 FF SBB EAX,-1
77A32A18 |> 85C0
TEST EAX,EAX
77A32A1A |. 7F
45 JG SHORT OLEAUT32.77A32A61
77A32A1C |.
7D 16 JGE SHORT OLEAUT32.77A32A34
77A32A1E
|. 33C0 XOR EAX,EAX
77A32A20
|> 5F POP EDI
77A32A21
|. 5E POP ESI
77A32A22
|. 5B POP EBX
77A32A23
|. C9 LEAVE
77A32A24
|. C2 1000 RETN 10
—————————————————————————————————
【算
法 总 结】:
这应该是我跟踪过的最麻烦的P-Code程序了。
程序首先取我的硬盘某个参数5KA089DJ生成运算注册码的核心参数14229037,再用14229037生成显示出来的机器码。
呵呵,我学习
SIMONYAN 大侠的教材简单猜测一下过程,感谢 SIMONYAN 大侠!
1、我的机器码是6004111345232619 取机器码的前5位60041 和后4位 2619
2、分别倒序排列:60041->14006 2619->9162
3、将这2部分连接起来:140069162
4、140069162-125840125=14229037 (125840125应该是固定参数)这样就得出了我上面的核心参数了。
5、14229037 / 2=7114518 (取商)
6、7114518 倒序排列:8154117 这个就是我的注册码了!
当然,这个求逆过程有些是我的猜测,并不一定是完全正确的。
以前有人说过其注册码是10位的,但是我分析的这个3.6版却没有这个限制,或许程序还有其它的暗桩。
限于我的水平太低,只能分析到这一步了,欢迎老师们指教!^O^^O^^O^^O^
—————————————————————————————————
【注册信息保存】:
REGEDIT4
[HKEY_CURRENT_USER\Software\VB
and VBA Program Settings\bogo\enbogo]
"englishbogo"="7114518"
—————————————————————————————————
【整 理】:
机器码:6004111345232619
注册码:8154117
—————————————————————————————————
, _/
/| _.-~/
\_ , 青春都一饷
( /~ / \~-._
|\
`\\ _/
\ ~\ ) 忍把浮名
_-~~~-.) )__/;;,. \_ //'
/'_,\ --~ \ ~~~- ,;;\___( (.-~~~-.
换了破解轻狂
`~ _( ,_..--\ ( ,;'' /
~-- /._`\
/~~//' /' `~\
) /--.._, )_ `~
" `~" "
`" /~'`\ `\\~~\
"
" "~' ""
Cracked By 巢水工作坊——fly [OCN][FCG]
2003-05-03 3:15