文章导航PC6首页软件下载单机游戏安卓资源苹果资源

pc软件新闻网络操作系统办公工具编程服务器软件评测

安卓新闻资讯应用教程刷机教程安卓游戏攻略tv资讯深度阅读综合安卓评测

苹果ios资讯苹果手机越狱备份教程美化教程ios软件教程mac教程

单机游戏角色扮演即时战略动作射击棋牌游戏体育竞技模拟经营其它游戏游戏工具

网游cf活动dnf活动lol周免英雄lol礼包

手游最新动态手游评测手游活动新游预告手游问答

您的位置:首页精文荟萃破解文章 → 幼儿学语言 2003.4 (P-Code)

幼儿学语言 2003.4 (P-Code)

时间:2004/10/15 1:03:00来源:本站整理作者:蓝点我要评论(2)

 





 








算法分析——幼儿学语言 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
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呵呵,注册码:"<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
—————————————————————————————————

    
    
     
    
    
     

相关阅读 Windows错误代码大全 Windows错误代码查询激活windows有什么用Mac QQ和Windows QQ聊天记录怎么合并 Mac QQ和Windows QQ聊天记录Windows 10自动更新怎么关闭 如何关闭Windows 10自动更新windows 10 rs4快速预览版17017下载错误问题Win10秋季创意者更新16291更新了什么 win10 16291更新内容windows10秋季创意者更新时间 windows10秋季创意者更新内容kb3150513补丁更新了什么 Windows 10补丁kb3150513是什么

文章评论
发表评论

热门文章 去除winrar注册框方法

最新文章 比特币病毒怎么破解 比去除winrar注册框方法 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)通过Access破解MSSQL获得数据

人气排行 华为无线路由器HG522-C破解教程(附超级密码JEB格式文件京东电子书下载和阅读限制破解教UltraISO注册码全集(最新)qq相册密码破解方法去除winrar注册框方法(适应任何版本)怎么用手机破解收费游戏华为无线猫HG522破解如何给软件脱壳基础教程