老文章档案 · 2003 年

幼儿学语言 2003.4 (P-Code)

天下资讯 · 破解文章 · 2003-10-20 · 作者:fly 人气: · 出处:赢政天下整理收藏)

算法分析——幼儿学语言 2003.4 (P-Code)

开 发 商: http://www.mykidhome.com

【软件限制】:功能限制

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

【破解工具】:TRW2000娃娃修改版、Ollydbg1.09、PEiD、W32Dasm 9.0白金版

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

【过 程】:

朋友拿来这个大家伙,说要给他未来的baby找一个好玩的程序。^O^ ^O^ 打开一看又是P-Code!哎,再看看,知道碰上难缠的“对手”了。重新静下心来细心跟踪,也想试试WKTVBDE,无奈字体太小,只好还是用我顺手的武器。

曾有朋友问是如何找到某某核心代码的,我有点哑口无言。一般的程序用那些常用的断点就差不多了,看看相关的资料及其他朋友的笔记就能明白。但是还有一些东东比较奇特,作者或许自己就是CRACK高手吧,让人有点无处下手的感觉。这时就需要耐心和细心了,最好还能有一点点的运气。 ^O^ ^O^

譬如下面的这点代码,我整整分析了一个通宵才追出来!作者尽量避开了我们常用的拦截断点,中间还搀杂了大量的其它运算,让人转的头晕目眩。^O^ ^O^ 但是,秘密总会藏在里面的,就让我们披沙沥金吧。

幼儿学语言.exe 无壳。 Visual Basic 6.0 编写,P-Code。

序列号:555490825

试炼码:123456789-54321

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

一、注册码中间要有-(2D)

660146D5 55 PUSH EBP

660146D6 8BEC MOV EBP,ESP

660146D8 57 PUSH EDI

660146D9 8B7D 08 MOV EDI,DWORD PTR SS:[EBP+8]

====>EDI=123456789-54321 试炼码

660146DC 8B4D 10 MOV ECX,DWORD PTR SS:[EBP+10]

660146DF 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]

====>AX=2D

660146E2 0BE4 OR ESP,ESP

660146E4 F2:66:AF REPNE SCAS WORD PTR ES:[EDI]

====>逐位比较输入的试炼码中是否有-

660146E7 B8 00000000 MOV EAX,0

660146EC 75 03 JNZ SHORT MSVBVM60.660146F1

====>有 - 则不跳

660146EE 8D47 FE LEA EAX,DWORD PTR DS:[EDI-2]

660146F1 5F POP EDI

660146F2 5D POP EBP

660146F3 C2 0C00 RETN 0C

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

二、分别取试炼码-前后的2部分

660F91D1 8D0451 LEA EAX,DWORD PTR DS:[ECX+EDX*2]

660F91D4 50 PUSH EAX

660F91D5 FF15 E8190066 CALL DWORD PTR DS:[<&OLEAUT32.#4_SysAllo>; OLEAUT32.SysAllocStringLen

660F91DB 85C0 TEST EAX,EAX

1、 ====>EAX=123456789 试炼码的第一部分

2、 ====>EAX=54321 试炼码的第二部分

660F91DD 8907 MOV DWORD PTR DS:[EDI],EAX

660F91DF 75 22 JNZ SHORT MSVBVM60.660F9203

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

三、分别求试炼码-前后2部分数字的16进制值

653733DD 8D0C9B LEA ECX,DWORD PTR DS:[EBX+EBX*4]

653733E0 33DB XOR EBX,EBX

653733E2 8A18 MOV BL,BYTE PTR DS:[EAX]

====>依次取试炼码的数字

653733E4 40 INC EAX

653733E5 4E DEC ESI

653733E6 8D1C4B LEA EBX,DWORD PTR DS:[EBX+ECX*2]

653733E9 8B4D E0 MOV ECX,DWORD PTR SS:[EBP-20]

653733EC 49 DEC ECX

====>计数器

653733ED 894D E0 MOV DWORD PTR SS:[EBP-20],ECX

653733F0 ^ 75 EB JNZ SHORT OLEAUT32.653733DD

====>循环运算!

653733F2 8945 F4 MOV DWORD PTR SS:[EBP-C],EAX

653733F5 895D F8 MOV DWORD PTR SS:[EBP-8],EBX

1、 ====>[ESP-8]=075BCD15(H)=123456789(D) 试炼码的第一部分

2、 ====>[ESP-8]=0000D431(H)=54321(D) 试炼码的第二部分

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

四、其实下面得到的参数可以看作是固定值 ^-^ ^-^

66105191 58 POP EAX

66105192 66:010424 ADD WORD PTR SS:[ESP],AX

66105196 ^ 0F80 C6EEFFFF JO MSVBVM60.66104062

6610519C 33C0 XOR EAX,EAX

6610519E 8A06 MOV AL,BYTE PTR DS:[ESI]

661051A0 46 INC ESI

661051A1 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

661051A8 58 POP EAX

661051A9 010424 ADD DWORD PTR SS:[ESP],EAX

1、 ====>[ESP]=0000674E + 00006EE8=D636 参数①

2、 ====>[ESP]=00005F20 + 0000666F=C58F

4、 ====>[ESP]=0000674E + 00005FB7=C705

5、 ====>[ESP]=0000C705 + 000051EF=118F4 参数③

661051AC ^ 0F80 B0EEFFFF JO MSVBVM60.66104062

661051B2 33C0 XOR EAX,EAX

661051B4 8A06 MOV AL,BYTE PTR DS:[ESI]

661051B6 46 INC ESI

661051B7 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

661051BE 58 POP EAX

661051BF 5B POP EBX

661051C0 010424 ADD DWORD PTR SS:[ESP],EAX

661051C3 115C24 04 ADC DWORD PTR SS:[ESP+4],EBX

661051C7 ^ 0F80 95EEFFFF JO MSVBVM60.66104062

661051CD 33C0 XOR EAX,EAX

661051CF 8A06 MOV AL,BYTE PTR DS:[ESI]

661051D1 46 INC ESI

661051D2 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

661051D9 DEC1 FADDP ST(1),ST

661051DB 33C0 XOR EAX,EAX

661051DD 8A06 MOV AL,BYTE PTR DS:[ESI]

661051DF 46 INC ESI

661051E0 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

661051E7 58 POP EAX

661051E8 280424 SUB BYTE PTR SS:[ESP],AL

661051EB ^ 0F82 71EEFFFF JB MSVBVM60.66104062

661051F1 33C0 XOR EAX,EAX

661051F3 8A06 MOV AL,BYTE PTR DS:[ESI]

661051F5 46 INC ESI

661051F6 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

661051FD 58 POP EAX

661051FE 66:290424 SUB WORD PTR SS:[ESP],AX

66105202 ^ 0F80 5AEEFFFF JO MSVBVM60.66104062

66105208 33C0 XOR EAX,EAX

6610520A 8A06 MOV AL,BYTE PTR DS:[ESI]

6610520C 46 INC ESI

6610520D FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

66105214 58 POP EAX

66105215 290424 SUB DWORD PTR SS:[ESP],EAX

3、 ====>[ESP]=0000C58F - 0000749F=50F0 参数②

66105218 ^ 0F80 44EEFFFF JO MSVBVM60.66104062

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

五、对序列号进行运算

6610534D 59 POP ECX

6610534E 58 POP EAX

6610534F 99 CDQ

66105350 F7F9 IDIV ECX

====>EAX=211C1E09(H)=555490825(D) 序列号

1、 ====>EDX=211C1E09 % 0000D636=00008F73

2、 ====>EDX=211C1E09 % 000050F0=00002099

3、 ====>EDX=211C1E09 % 000118F4=0000550D(H)=21773(D) ★★

66105352 52 PUSH EDX

66105353 33C0 XOR EAX,EAX

66105355 8A06 MOV AL,BYTE PTR DS:[ESI]

66105357 46 INC ESI

66105358 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

…… ……省略…… ……

66105282 59 POP ECX

66105283 58 POP EAX

66105284 F7E9 IMUL ECX

4、 ====>ECX=00008F73 * 00002099=12441BBB(H)=306453435(D) ★★

66105286 ^ 0F80 D6EDFFFF JO MSVBVM60.66104062

6610528C 50 PUSH EAX

6610528D 33C0 XOR EAX,EAX

6610528F 8A06 MOV AL,BYTE PTR DS:[ESI]

66105291 46 INC ESI

66105292 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

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

…… ……省略…… ……

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

六、比较注册码:呵呵,没有用 __VarBstrCmp、__vbaVarTstEq 等常用的函数呀。

660FE925 5A POP EDX

660FE926 58 POP EAX

660FE927 2BC2 SUB EAX,EDX

====>其实这里的相减就是比较2部分的值是否相等!

1、 ====>EAX=12441BBB(H)=306453435(D) 这就是注册码的第一部分

====>EDX=075BCD15(H)=123456789(D) 试炼码的第一部分

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

2、 ====>EAX=0000D431(H)=54321(D) 试炼码的第二部分

====>EDX=0000550D(H)=21773(D) 这就是注册码的第二部分

660FE929 83F8 01 CMP EAX,1

660FE92C 1BC0 SBB EAX,EAX

660FE92E 50 PUSH EAX

660FE92F 33C0 XOR EAX,EAX

660FE931 8A06 MOV AL,BYTE PTR DS:[ESI]

660FE933 46 INC ESI

660FE934 FF2485 58EA0F66 JMP DWORD PTR DS:[EAX*4+660FEA58]

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

七、最后的结局:恭喜或是Sorry ^O^ ^O^ 看你的选择了 ^O^ ^O^

6608613D FFD6 CALL ESI

====>BAD BOY!

====>呵呵,胜利女神!

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

【算 法 总 结】:

1、注册码为2部分构成:s1-s2 中间有 -

2、取序列号的16进制值 其实就是当前系统盘的硬盘序列号 设为:m

3、s1=(m%0X0000D636)*(m%0X000050F0)

4、s2=m%000118F4

看完了才知道只是这简单的几句,可是…… ……

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

【C++ KeyGen】:

#include<iostream.h>

void main()

{

unsigned long int m,s1,s2;

cout<<"\n\n★★★★幼儿学语言 2003.4 KeyGen{14th}★★★★\n\n\n\n";

cout<<"请输入序列号:";

cin >>m;

s1=(m%0X0000D636)*(m%0X000050F0);

s2=m%0X000118F4;

cout<<"\n呵呵,注册码:"<<s1<<"-"<<s2<<endl;

cout<<"\n\n\nCracked By 巢水工作坊——fly [OCN][FCG] 2003-06-06 16:00 COMPILE";

cout<<"\n\n\n * * * 按回车退出!* * *";cin.get();cin.get();

}

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

【注册信息保存】:

同目录下的 ldk.pas 文件中。

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

【整 理】:

序列号:555490825

注册码:306453435-21773

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

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

相关资讯:

·语音界面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 © 1998-2003

winzheng.com All Rights Reserved.

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

Powered

by:MeSky.Net

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

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

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