-
-
还是VB的-无忧全国计算机等级考试模拟软件二级JAVA-1[原创]
-
发表于: 2005-7-8 14:35 3484
-
2005年上半年版 全国计算机等级考试模拟软件 北京无忧电脑技术开发有限责任公司
网址:WWW.WUYOUSCHOOL.COM.CN
本来我想考一下,但是,唉,贪多嚼不烂啊,半途而废了。以后再说吧。出了这个副产品。
二级JAVA,不过从文件内容看,它的考试系列应该都用这个KS.EXE,真那么自信吗?
不过确实,我头都大了,才弄个不完全方案。
文件:KS.EXE 2,714,624bytes 2005-02-24 11:52:00(加参数y可进入练习模式) VB native程序
by zzhzihui@tom.com 学习研究 勿作其他用途
(原来VB也可以编写比较牛的东西,连等考的考试系统都用VB写,我一直以为自己学VB没多大用)
工具:ollydbg,hiew
★最终方法:
最终得到的假激活码:G5060-BBBBB-CCQ2L-23XL6-O2323-3434I
0067956A . 50 PUSH EAX
0067956B . FFD7 CALL EDI
0067956D > 66:83BD 38FFF>CMP WORD PTR SS:[EBP-C8],0FFFF
00679575 . 0F85 7D020000 JNZ ks.006797F8
0067957B . 66:8B55 0C MOV DX,WORD PTR SS:[EBP+C]
0067957F . 66:3B55 D4 CMP DX,WORD PTR SS:[EBP-2C]
00679583 . 0F85 C2000000 JNZ ks.0067964B ; no jmp,跳走会显示无产品项目
;这样可以强制激活成功
00679589 . 8D45 AC LEA EAX,DWORD PTR SS:[EBP-54]
0067958C . 50 PUSH EAX
0067958D . FF15 74B66800 CALL DWORD PTR DS:[<&MSVBVM50.#610>] ; MSVBVM50.rtcGetDateVar
00679593 . 8B7D CC MOV EDI,DWORD PTR SS:[EBP-34]
00679596 . 3BFB CMP EDI,EBX
00679598 . 75 12 JNZ SHORT ks.006795AC
0067959A . 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
0067959D . 51 PUSH ECX
0067959E . 68 D0924000 PUSH ks.004092D0
这样会生成c:\WINXP\system32\Microsoft\MSJET1.INI文件,把它复制一份,改名为MSJET6.INI
注意:MSJETx.INI是最后的1是算出来的,会自动保存,但那个6却不能自动生成,怎样知道是6呢?可以在这里:
0066AB3F . 50 PUSH EAX
0066AB40 . 68 A0874200 PUSH ks.004287A0 ; UNICODE ".INI"
0066AB45 . FF15 20B46800 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrCa>; MSVBVM50.__vbaStrCat
;这个操作可以看到6
0066AB4B . 8BD0 MOV EDX,EAX
0066AB4D . 8D8D 78FFFFFF LEA ECX,DWORD PTR SS:[EBP-88]
实际上,程序下次启动时只访问那个带6的数据,带1的不访问,因为程序内部校验发现错误,生成了带1的数据,而下次抽题或启动检验时,却要访问带6的,这时没有,所以激活就失败了.
再加下面两个爆破就可以了,但是还有提示激活成功,可用x次..
其实在注册表里还有HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MsMCWY\1
把它复制一个命名为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MsMCWY\6
即可去掉提示.
============
0066AED2 . /0F85 B6050000 JNZ ks.0066B48E
0066AED8 . |66:8B55 0C MOV DX,WORD PTR SS:[EBP+C]
0066AEDC . |66:3955 D8 CMP WORD PTR SS:[EBP-28],DX
0066AEE0 . |74 0C JE SHORT ks.0066AEEE ; JMP ZZH(EB0C)
;改为JMP 66aeee即可
0066AEE2 . |C745 B8 EC030>MOV DWORD PTR SS:[EBP-48],3EC
0066AEE9 . |E9 DF050000 JMP ks.0066B4CD
0066AEEE > |BA 0C894200 MOV EDX,ks.0042890C ; UNICODE "userinfo1"
0066AEF3 . |8D4D 84 LEA ECX,DWORD PTR SS:[EBP-7C]
============
0061D184 > \66:3975 88 CMP WORD PTR SS:[EBP-78],SI
0061D188 . 75 16 JNZ SHORT ks.0061D1A0 ; NO Jmp (SYS) EAX<=1 ZZH
;上行不要跳,改为MOV EAX,1,覆盖下行指令即可
0061D18A . 83C8 FF OR EAX,FFFFFFFF
0061D18D . 68 0ED56100 PUSH ks.0061D50E ; EAX<=1
0061D192 . 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
0061D195 . 66:A3 DCB0670>MOV WORD PTR DS:[67B0DC],AX
0061D19B . E9 4F030000 JMP ks.0061D4EF
0061D1A0 > 66:3935 DCB06>CMP WORD PTR DS:[67B0DC],SI
0061D1A7 . 0F85 07030000 JNZ ks.0061D4B4
0061D1AD . 8B4D 14 MOV ECX,DWORD PTR SS:[EBP+14]
...
OK,CRACKED! 19:53 2005-4-22
重新注册方法请看 文件:0-FINAL.txt
★通用注册
%SYSTEM%\PCINFO.DLL
导出函数:
GetDriveSerialNumberIn9X
GetDriveSerialNumberInNT
都是取硬盘序列号的,而软件是根据硬盘序列号来生成ID和激活码的,所以可以改造这个DLL,让它返回固定的序列 号.这样就可以做通用的CRK.
那么,我们可以补丁主程序ks.exe:
0066DF7F . 0F84 98010000 JE ks.0066E11D;取得SMART版本失败,跳走,改为JMP让他永远调用DLL
然后修改PCINFO.DLL
把文件偏移 1000EFE0处修改为字符串"4JV10H8M"
PCINFO.GetDriveSerialNumberInNT函数:
1000152E |> \C74424 04 E0EF0010 MOV DWORD PTR SS:[ESP+4],pcinfo.1000EFE0;ASCII "4JV10H8M"
;永远返回固定序列号
10001536 \. C2 0400 RETN 4
PCINFO.GetDriveSerialNumberIn9X函数:
100012BE |. 64:890D 00000000 MOV DWORD PTR FS:[0],ECX
100012C5 |. 81C4 88000000 ADD ESP,88
100012CB \. C2 0400 RETN 4
100012CE 8BFF MOV EDI,EDI ;这个被覆盖不知道有没有影响
修改为:
100012CB /E9 5E020000 JMP PCINFOHK.1000152E
这样就可以保证在9X和NT下都会返回唯一的硬盘序列号.^_^
网址:WWW.WUYOUSCHOOL.COM.CN
本来我想考一下,但是,唉,贪多嚼不烂啊,半途而废了。以后再说吧。出了这个副产品。
二级JAVA,不过从文件内容看,它的考试系列应该都用这个KS.EXE,真那么自信吗?
不过确实,我头都大了,才弄个不完全方案。
文件:KS.EXE 2,714,624bytes 2005-02-24 11:52:00(加参数y可进入练习模式) VB native程序
by zzhzihui@tom.com 学习研究 勿作其他用途
(原来VB也可以编写比较牛的东西,连等考的考试系统都用VB写,我一直以为自己学VB没多大用)
工具:ollydbg,hiew
★最终方法:
最终得到的假激活码:G5060-BBBBB-CCQ2L-23XL6-O2323-3434I
0067956A . 50 PUSH EAX
0067956B . FFD7 CALL EDI
0067956D > 66:83BD 38FFF>CMP WORD PTR SS:[EBP-C8],0FFFF
00679575 . 0F85 7D020000 JNZ ks.006797F8
0067957B . 66:8B55 0C MOV DX,WORD PTR SS:[EBP+C]
0067957F . 66:3B55 D4 CMP DX,WORD PTR SS:[EBP-2C]
00679583 . 0F85 C2000000 JNZ ks.0067964B ; no jmp,跳走会显示无产品项目
;这样可以强制激活成功
00679589 . 8D45 AC LEA EAX,DWORD PTR SS:[EBP-54]
0067958C . 50 PUSH EAX
0067958D . FF15 74B66800 CALL DWORD PTR DS:[<&MSVBVM50.#610>] ; MSVBVM50.rtcGetDateVar
00679593 . 8B7D CC MOV EDI,DWORD PTR SS:[EBP-34]
00679596 . 3BFB CMP EDI,EBX
00679598 . 75 12 JNZ SHORT ks.006795AC
0067959A . 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
0067959D . 51 PUSH ECX
0067959E . 68 D0924000 PUSH ks.004092D0
这样会生成c:\WINXP\system32\Microsoft\MSJET1.INI文件,把它复制一份,改名为MSJET6.INI
注意:MSJETx.INI是最后的1是算出来的,会自动保存,但那个6却不能自动生成,怎样知道是6呢?可以在这里:
0066AB3F . 50 PUSH EAX
0066AB40 . 68 A0874200 PUSH ks.004287A0 ; UNICODE ".INI"
0066AB45 . FF15 20B46800 CALL DWORD PTR DS:[<&MSVBVM50.__vbaStrCa>; MSVBVM50.__vbaStrCat
;这个操作可以看到6
0066AB4B . 8BD0 MOV EDX,EAX
0066AB4D . 8D8D 78FFFFFF LEA ECX,DWORD PTR SS:[EBP-88]
实际上,程序下次启动时只访问那个带6的数据,带1的不访问,因为程序内部校验发现错误,生成了带1的数据,而下次抽题或启动检验时,却要访问带6的,这时没有,所以激活就失败了.
再加下面两个爆破就可以了,但是还有提示激活成功,可用x次..
其实在注册表里还有HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MsMCWY\1
把它复制一个命名为HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\MsMCWY\6
即可去掉提示.
============
0066AED2 . /0F85 B6050000 JNZ ks.0066B48E
0066AED8 . |66:8B55 0C MOV DX,WORD PTR SS:[EBP+C]
0066AEDC . |66:3955 D8 CMP WORD PTR SS:[EBP-28],DX
0066AEE0 . |74 0C JE SHORT ks.0066AEEE ; JMP ZZH(EB0C)
;改为JMP 66aeee即可
0066AEE2 . |C745 B8 EC030>MOV DWORD PTR SS:[EBP-48],3EC
0066AEE9 . |E9 DF050000 JMP ks.0066B4CD
0066AEEE > |BA 0C894200 MOV EDX,ks.0042890C ; UNICODE "userinfo1"
0066AEF3 . |8D4D 84 LEA ECX,DWORD PTR SS:[EBP-7C]
============
0061D184 > \66:3975 88 CMP WORD PTR SS:[EBP-78],SI
0061D188 . 75 16 JNZ SHORT ks.0061D1A0 ; NO Jmp (SYS) EAX<=1 ZZH
;上行不要跳,改为MOV EAX,1,覆盖下行指令即可
0061D18A . 83C8 FF OR EAX,FFFFFFFF
0061D18D . 68 0ED56100 PUSH ks.0061D50E ; EAX<=1
0061D192 . 8945 E4 MOV DWORD PTR SS:[EBP-1C],EAX
0061D195 . 66:A3 DCB0670>MOV WORD PTR DS:[67B0DC],AX
0061D19B . E9 4F030000 JMP ks.0061D4EF
0061D1A0 > 66:3935 DCB06>CMP WORD PTR DS:[67B0DC],SI
0061D1A7 . 0F85 07030000 JNZ ks.0061D4B4
0061D1AD . 8B4D 14 MOV ECX,DWORD PTR SS:[EBP+14]
...
OK,CRACKED! 19:53 2005-4-22
重新注册方法请看 文件:0-FINAL.txt
★通用注册
%SYSTEM%\PCINFO.DLL
导出函数:
GetDriveSerialNumberIn9X
GetDriveSerialNumberInNT
都是取硬盘序列号的,而软件是根据硬盘序列号来生成ID和激活码的,所以可以改造这个DLL,让它返回固定的序列 号.这样就可以做通用的CRK.
那么,我们可以补丁主程序ks.exe:
0066DF7F . 0F84 98010000 JE ks.0066E11D;取得SMART版本失败,跳走,改为JMP让他永远调用DLL
然后修改PCINFO.DLL
把文件偏移 1000EFE0处修改为字符串"4JV10H8M"
PCINFO.GetDriveSerialNumberInNT函数:
1000152E |> \C74424 04 E0EF0010 MOV DWORD PTR SS:[ESP+4],pcinfo.1000EFE0;ASCII "4JV10H8M"
;永远返回固定序列号
10001536 \. C2 0400 RETN 4
PCINFO.GetDriveSerialNumberIn9X函数:
100012BE |. 64:890D 00000000 MOV DWORD PTR FS:[0],ECX
100012C5 |. 81C4 88000000 ADD ESP,88
100012CB \. C2 0400 RETN 4
100012CE 8BFF MOV EDI,EDI ;这个被覆盖不知道有没有影响
修改为:
100012CB /E9 5E020000 JMP PCINFOHK.1000152E
这样就可以保证在9X和NT下都会返回唯一的硬盘序列号.^_^
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: