您的位置:首页精文荟萃破解文章 → 幼儿学语言 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破解如何给软件脱壳基础教程