【破文标题】:完美爆破《驾照模拟考试系统2005》+去NAG 手记
【破文作者】:KuNgBiM[DFCG]
【作者邮箱】:gb_1227@163.com
【软件名称】:驾照模拟考试系统2005 1.0版
【整理日期】:2005-03-28
【软件大小】:17.04 MB
【软件授权】:国产软件 / 共享版 / 教育考试
【使用平台】:Win9x/Me/NT/2000/XP
【发布公司】:http://www.btjs.com.cn/download.asp?fid=93
【下载地址】:http://www.shareware.cn/pub/2833.html
【软件简介】:考驾照必备软件---驾照考试模拟系统2005
《驾照考试模拟系统2005》是一套机动车驾驶员理论考试专用最新应考工具软件,软件界面简洁优美,用户操作全部仿真正式考试的小键盘操作,采用最新版全国通用试题库,具体功能如下:
1、交通法规查询功能:本软件含有国家颁布现行的十种交通法规和交通标识等相关资料,以供用户查阅学习。
2、交通标识查询功能:本软件含有国家颁布现行的各种交通标识等相关资料,以供用户查阅学习。
3、提供顺序练习功能:用户可以按照题库的顺序,以便逐个击破,确保覆盖面100%。
4、提供随机练习功能:用户可以通过随机综合练习进行整个通用题库的强化练习,以便全面掌握所需要学习的知识点,系统将动态反馈练习的准确率及错题的查询功能。
5、提供即时批阅功能:用户在进行仿真考试、练习时,全部采用结束时立刻批阅。
6、提供仿真考试功能:本软件按国家考试出题标准进行智能组卷,模拟出题,试题采取无序排列,所有操作全部采用正式考试时的小键盘操作,与正式考试时一致,确保极高的仿真度。
7、答案同步提示功能:在练习时可以同步提示您标准答案,确保快速了解题目。
本软件将帮助您进行机动车驾驶员理科考试的各种训练,题型丰富,图文并茂,覆盖了应考的全部知识点。
通过训练,极大提高您的应考技能、增加知识,使您驾照考试必备软件。
驾照模拟考试系统2005是一套用于驾驶证理论考试训练的专用软件,该软件先以科学的循序渐近的方法进行各类别的训练,最后以一种仿真考试的形式进行水平测试。该软件的主要特点是能够为您提供真实的考试环境,其电脑小键盘布局与真实考试键盘完全对应,使您平时就能在考试环境中练习,因而能够轻松进入考试状态,在最短的时间内获得最佳的成绩。
【加密方式】:功能限制+NAG
【编译语言】:Microsoft Visual Basic 5.0 / 6.0
【调试环境】:WinXP 、W32Dasm、PEiD、Ollydbg、GetVBRes
【破解日期】:2005-05-03
【破解目的】:解除所有的功能限制 及 NAG
【作者声明】:初学Crack,只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
―――――――――――――――――――――――――――――――――
【破解过程】:
1.
查壳:用PEiD0.92查壳,无壳,程序由 Microsoft Visual Basic 5.0 / 6.0 编译。
2.
初试:运行主程序注册,输入注册码,确认!程序无提示,回到主界面。(郁闷ing...)
3.
断点:用OD载入主程序,下断程序可能用到的几个基本API函数断点(VB程序特有的),我用到了以下几个:
消息框函数:rtcMsgBox
字符串比对函数:__vbaStrCmp
窗口启动函数:rtcVarStrFromVar
断点下完后,F9运行程序!
(因为VB程序里窗体调用rtcVarStrFromVar这个API函数有很多,所以我F9运行,F2取消断点,都不知道用了多少回,呵呵,总算是看到了程序主界面)
**********
用敏锐的眼光看程序,做到“知己知彼,百战不殆” **********
这里有一点可以证实,程序是读取程序目录下“sysdata”文件夹内的“regcode.dat”进行启动验证:
第一次验证:
008B0DCF 6A 50
push 50
008B0DD1 68 40694000
push 驾照考试.00406940
008B0DD6 57
push edi
008B0DD7 50
push eax
008B0DD8 FF15 58104000
call dword ptr ds:[<&MSVBVM60.__vbaHresultC>
; MSVBVM60.__vbaHresultCheckObj
008B0DDE 8B55 C4
mov edx,
dword ptr ss:[
ebp-3C]
008B0DE1 52
push edx
008B0DE2 68 107C4000
push 驾照考试.00407C10 ; UNICODE "\sysdata\regcode.dat" //看这里!
008B0DE7 FF15 4C104000
call dword ptr ds:[<&MSVBVM60.__vbaStrCat>]
; MSVBVM60.__vbaStrCat
008B0DED 8BD0
mov edx,
eax
008B0DEF 8D4D D0
lea ecx,
dword ptr ss:[
ebp-30]
008B0DF2 8B3D A4114000
mov edi,
dword ptr ds:[<&MSVBVM60.__vbaStrMo>
; MSVBVM60.__vbaStrMove
008B0DF8 FFD7
call edi
008B0DFA 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
008B0DFD 8B1D C4114000
mov ebx,
dword ptr ds:[<&MSVBVM60.__vbaFreeS>
; MSVBVM60.__vbaFreeStr
008B0E03 FFD3
call ebx
008B0E05 8D4D BC
lea ecx,
dword ptr ss:[
ebp-44]
008B0E08 FF15 C0114000
call dword ptr ds:[<&MSVBVM60.__vbaFreeObj>>
; MSVBVM60.__vbaFreeObj
008B0E0E 8D45 D0
lea eax,
dword ptr ss:[
ebp-30]
008B0E11 8945 94
mov dword ptr ss:[
ebp-6C],
eax
008B0E14 C745 8C 0840000>
mov dword ptr ss:[
ebp-74],4008
008B0E1B 56
push esi
008B0E1C 8D4D 8C
lea ecx,
dword ptr ss:[
ebp-74]
008B0E1F 51
push ecx
008B0E20 FF15 3C114000
call dword ptr ds:[<&MSVBVM60.#645>]
; MSVBVM60.rtcDir
008B0E26 8BD0
mov edx,
eax
008B0E28 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
008B0E2B FFD7
call edi
008B0E2D 50
push eax //
eax=0014B74C, (UNICODE
"regcode.dat")
008B0E2E 68 E0694000
push 驾照考试.004069E0
008B0E33 FF15 B8104000
call dword ptr ds:[<&MSVBVM60.__vbaStrCmp>]
; MSVBVM60.__vbaStrCmp //比对“regcode.dat”中数据
008B0E39 8BF0
mov esi,
eax
008B0E3B F7DE
neg esi
008B0E3D 1BF6
sbb esi,
esi
008B0E3F 46
inc esi
008B0E40 F7DE
neg esi
008B0E42 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
来到主界面后,再次验证:
008B0E2D 50
push eax //
eax=0021BD74, (UNICODE
"regcode.dat")
008B0E2E 68 E0694000
push 驾照考试.004069E0
008B0E33 FF15 B8104000
call dword ptr ds:[<&MSVBVM60.__vbaStrCmp>]
; MSVBVM60.__vbaStrCmp //比对“regcode.dat”中数据
008B0E39 8BF0
mov esi,
eax
008B0E3B F7DE
neg esi
008B0E3D 1BF6
sbb esi,
esi
008B0E3F 46
inc esi
008B0E40 F7DE
neg esi
008B0E42 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
直捣程序的老巢!我们直接奔向“系统注册”,不过这又验证了N次:(愤怒之下,偶取消了 008B0E33 处的 __vbaStrCmp 断点)
008B0E2D 50
push eax //
eax=001A0E34, (UNICODE
"regcode.dat")
008B0E2E 68 E0694000
push 驾照考试.004069E0
008B0E33 FF15 B8104000
call dword ptr ds:[<&MSVBVM60.__vbaStrCmp>]
; MSVBVM60.__vbaStrCmp //比对“regcode.dat”中数据
008B0E39 8BF0
mov esi,
eax
008B0E3B F7DE
neg esi
008B0E3D 1BF6
sbb esi,
esi
008B0E3F 46
inc esi
008B0E40 F7DE
neg esi
008B0E42 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
【小结】:
经过证实,程序是通过计时器,每2秒检验一次注册文件“regcode.dat”里的序列号是否合法,从而维护自身利益,这里我不敢恭维作者的能力,So。。。^o^ 偶决定用 Cracker 最基本的看家本领――爆掉它!(心中暗爽~~~~)**********
软硬兼施,“既然你不吃软的,那我就来硬的,看我怎么收拾‘你’!!!” **********
这里主要用到了vb的API函数断点:rtcMsgBox
试着去找找那些调用rtcMsgBox函数的地方,哟~~~还真多啊~~~~一共有7处,下面我们一处一处来看:
(为了节省篇幅,我把“使用大于40道题数据题库部分”一块讲解)
第一处:
0089C1F2 66:833D 28408B0>
cmp word ptr ds:[8B4028],0FFFF //
验证无误后,无限制做题,变量范围65535
0089C1FA 75 12
jnz short
驾照考试.0089C20E //爆破点A’
0089C1FC 66:C786 8800000>
mov word ptr ds:[
esi+88],1
0089C205 66:C786 8A00000>
mov word ptr ds:[
esi+8A],97
0089C20E 66:833D 28408B0>
cmp word ptr ds:[8B4028],0 //
验证失败后,弹出提示框,变量范围0
0089C216 0F85 AF000000
jnz 驾照考试.0089C2CB //爆破点A
0089C21C B9 04000280
mov ecx,80020004
0089C221 B8 0A000000
mov eax,0A
0089C226 894D 9C
mov dword ptr ss:[
ebp-64],
ecx
0089C229 894D AC
mov dword ptr ss:[
ebp-54],
ecx
0089C22C 8D95 64FFFFFF
lea edx,
dword ptr ss:[
ebp-9C]
0089C232 8D4D B4
lea ecx,
dword ptr ss:[
ebp-4C]
0089C235 8945 94
mov dword ptr ss:[
ebp-6C],
eax
0089C238 8945 A4
mov dword ptr ss:[
ebp-5C],
eax
0089C23B C785 6CFFFFFF F>
mov dword ptr ss:[
ebp-94],
驾照考试.004068F4
0089C245 C785 64FFFFFF 0>
mov dword ptr ss:[
ebp-9C],8
0089C24F FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089C255 8D95 74FFFFFF
lea edx,
dword ptr ss:[
ebp-8C]
0089C25B 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
0089C25E C785 7CFFFFFF D>
mov dword ptr ss:[
ebp-84],
驾照考试.004070DC
0089C268 C785 74FFFFFF 0>
mov dword ptr ss:[
ebp-8C],8
0089C272 FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089C278 8D45 94
lea eax,
dword ptr ss:[
ebp-6C]
0089C27B 8D4D A4
lea ecx,
dword ptr ss:[
ebp-5C]
0089C27E 50
push eax
0089C27F 8D55 B4
lea edx,
dword ptr ss:[
ebp-4C]
0089C282 51
push ecx
0089C283 52
push edx
0089C284 8D45 C4
lea eax,
dword ptr ss:[
ebp-3C]
0089C287 6A 40
push 40 //40
道题做完后就压栈
0089C289 50
push eax
0089C28A FF15 7C104000
call dword ptr ds:[<&MSVBVM60.#595>]
; MSVBVM60.rtcMsgBox //非注册用户只能做前40道题!
0089C290 8BC8
mov ecx,
eax
第二处:
0089C6EC 66:833D 28408B0>
cmp word ptr ds:[8B4028],0FFFF //
验证无误后,无限制做题,变量范围65535
0089C6F4 75 12
jnz short
驾照考试.0089C708 //爆破点B’
0089C6F6 66:C786 8800000>
mov word ptr ds:[
esi+88],98
0089C6FF 66:C786 8A00000>
mov word ptr ds:[
esi+8A],0E1
0089C708 66:833D 28408B0>
cmp word ptr ds:[8B4028],0 //
验证失败后,弹出提示框,变量范围0
0089C710 0F85 AF000000
jnz 驾照考试.0089C7C5 //爆破点B
0089C716 B9 04000280
mov ecx,80020004
0089C71B B8 0A000000
mov eax,0A
0089C720 894D 9C
mov dword ptr ss:[
ebp-64],
ecx
0089C723 894D AC
mov dword ptr ss:[
ebp-54],
ecx
0089C726 8D95 64FFFFFF
lea edx,
dword ptr ss:[
ebp-9C]
0089C72C 8D4D B4
lea ecx,
dword ptr ss:[
ebp-4C]
0089C72F 8945 94
mov dword ptr ss:[
ebp-6C],
eax
0089C732 8945 A4
mov dword ptr ss:[
ebp-5C],
eax
0089C735 C785 6CFFFFFF F>
mov dword ptr ss:[
ebp-94],
驾照考试.004068F4
0089C73F C785 64FFFFFF 0>
mov dword ptr ss:[
ebp-9C],8
0089C749 FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089C74F 8D95 74FFFFFF
lea edx,
dword ptr ss:[
ebp-8C]
0089C755 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
0089C758 C785 7CFFFFFF D>
mov dword ptr ss:[
ebp-84],
驾照考试.004070DC
0089C762 C785 74FFFFFF 0>
mov dword ptr ss:[
ebp-8C],8
0089C76C FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089C772 8D45 94
lea eax,
dword ptr ss:[
ebp-6C]
0089C775 8D4D A4
lea ecx,
dword ptr ss:[
ebp-5C]
0089C778 50
push eax
0089C779 8D55 B4
lea edx,
dword ptr ss:[
ebp-4C]
0089C77C 51
push ecx
0089C77D 52
push edx
0089C77E 8D45 C4
lea eax,
dword ptr ss:[
ebp-3C]
0089C781 6A 40
push 40 //40
道题做完后就压栈
0089C783 50
push eax
0089C784 FF15 7C104000
call dword ptr ds:[<&MSVBVM60.#595>]
; MSVBVM60.rtcMsgBox //非注册用户只能做前40道题!
0089C78A 8BC8
mov ecx,
eax
第三处:
0089CAE2 66:833D 28408B0>
cmp word ptr ds:[8B4028],0FFFF //
验证无误后,无限制做题,变量范围65535
0089CAEA 75 12
jnz short
驾照考试.0089CAFE //爆破点C’
0089CAEC 66:C786 8800000>
mov word ptr ds:[
esi+88],0E2
0089CAF5 66:C786 8A00000>
mov word ptr ds:[
esi+8A],15F
0089CAFE 66:833D 28408B0>
cmp word ptr ds:[8B4028],0 //
验证失败后,弹出提示框,变量范围0
0089CB06 0F85 AF000000
jnz 驾照考试.0089CBBB //爆破点C
0089CB0C B9 04000280
mov ecx,80020004
0089CB11 B8 0A000000
mov eax,0A
0089CB16 894D 9C
mov dword ptr ss:[
ebp-64],
ecx
0089CB19 894D AC
mov dword ptr ss:[
ebp-54],
ecx
0089CB1C 8D95 64FFFFFF
lea edx,
dword ptr ss:[
ebp-9C]
0089CB22 8D4D B4
lea ecx,
dword ptr ss:[
ebp-4C]
0089CB25 8945 94
mov dword ptr ss:[
ebp-6C],
eax
0089CB28 8945 A4
mov dword ptr ss:[
ebp-5C],
eax
0089CB2B C785 6CFFFFFF F>
mov dword ptr ss:[
ebp-94],
驾照考试.004068F4
0089CB35 C785 64FFFFFF 0>
mov dword ptr ss:[
ebp-9C],8
0089CB3F FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089CB45 8D95 74FFFFFF
lea edx,
dword ptr ss:[
ebp-8C]
0089CB4B 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
0089CB4E C785 7CFFFFFF D>
mov dword ptr ss:[
ebp-84],
驾照考试.004070DC
0089CB58 C785 74FFFFFF 0>
mov dword ptr ss:[
ebp-8C],8
0089CB62 FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089CB68 8D45 94
lea eax,
dword ptr ss:[
ebp-6C]
0089CB6B 8D4D A4
lea ecx,
dword ptr ss:[
ebp-5C]
0089CB6E 50
push eax
0089CB6F 8D55 B4
lea edx,
dword ptr ss:[
ebp-4C]
0089CB72 51
push ecx
0089CB73 52
push edx
0089CB74 8D45 C4
lea eax,
dword ptr ss:[
ebp-3C]
0089CB77 6A 40
push 40 //40
道题做完后就压栈
0089CB79 50
push eax
0089CB7A FF15 7C104000
call dword ptr ds:[<&MSVBVM60.#595>]
; MSVBVM60.rtcMsgBox //非注册用户只能做前40道题!
0089CB80 8BC8
mov ecx,
eax
第四处:
0089CED8 66:833D 28408B0>
cmp word ptr ds:[8B4028],0FFFF //
验证无误后,无限制做题,变量范围65535
0089CEE0 75 12
jnz short
驾照考试.0089CEF4 //爆破点D’
0089CEE2 66:C786 8800000>
mov word ptr ds:[
esi+88],160
0089CEEB 66:C786 8A00000>
mov word ptr ds:[
esi+8A],1A6
0089CEF4 66:833D 28408B0>
cmp word ptr ds:[8B4028],0 //
验证失败后,弹出提示框,变量范围0
0089CEFC 0F85 AF000000
jnz 驾照考试.0089CFB1 //爆破点D
0089CF02 B9 04000280
mov ecx,80020004
0089CF07 B8 0A000000
mov eax,0A
0089CF0C 894D 9C
mov dword ptr ss:[
ebp-64],
ecx
0089CF0F 894D AC
mov dword ptr ss:[
ebp-54],
ecx
0089CF12 8D95 64FFFFFF
lea edx,
dword ptr ss:[
ebp-9C]
0089CF18 8D4D B4
lea ecx,
dword ptr ss:[
ebp-4C]
0089CF1B 8945 94
mov dword ptr ss:[
ebp-6C],
eax
0089CF1E 8945 A4
mov dword ptr ss:[
ebp-5C],
eax
0089CF21 C785 6CFFFFFF F>
mov dword ptr ss:[
ebp-94],
驾照考试.004068F4
0089CF2B C785 64FFFFFF 0>
mov dword ptr ss:[
ebp-9C],8
0089CF35 FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089CF3B 8D95 74FFFFFF
lea edx,
dword ptr ss:[
ebp-8C]
0089CF41 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
0089CF44 C785 7CFFFFFF D>
mov dword ptr ss:[
ebp-84],
驾照考试.004070DC
0089CF4E C785 74FFFFFF 0>
mov dword ptr ss:[
ebp-8C],8
0089CF58 FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089CF5E 8D45 94
lea eax,
dword ptr ss:[
ebp-6C]
0089CF61 8D4D A4
lea ecx,
dword ptr ss:[
ebp-5C]
0089CF64 50
push eax
0089CF65 8D55 B4
lea edx,
dword ptr ss:[
ebp-4C]
0089CF68 51
push ecx
0089CF69 52
push edx
0089CF6A 8D45 C4
lea eax,
dword ptr ss:[
ebp-3C]
0089CF6D 6A 40
push 40 //40
道题做完后就压栈
0089CF6F 50
push eax
0089CF70 FF15 7C104000
call dword ptr ds:[<&MSVBVM60.#595>]
; MSVBVM60.rtcMsgBox //非注册用户只能做前40道题!
0089CF76 8BC8
mov ecx,
eax
第五处:
0089D92C 66:833D 28408B0>
cmp word ptr ds:[8B4028],0FFFF //
验证无误后,无限制做题,变量范围65535
0089D934 75 12
jnz short
驾照考试.0089D948 //爆破点E’
0089D936 66:C786 8800000>
mov word ptr ds:[
esi+88],1D1
0089D93F 66:C786 8A00000>
mov word ptr ds:[
esi+8A],200
0089D948 66:833D 28408B0>
cmp word ptr ds:[8B4028],0 //
验证失败后,弹出提示框,变量范围0
0089D950 0F85 AF000000
jnz 驾照考试.0089DA05 //爆破点E
0089D956 B9 04000280
mov ecx,80020004
0089D95B B8 0A000000
mov eax,0A
0089D960 894D 9C
mov dword ptr ss:[
ebp-64],
ecx
0089D963 894D AC
mov dword ptr ss:[
ebp-54],
ecx
0089D966 8D95 64FFFFFF
lea edx,
dword ptr ss:[
ebp-9C]
0089D96C 8D4D B4
lea ecx,
dword ptr ss:[
ebp-4C]
0089D96F 8945 94
mov dword ptr ss:[
ebp-6C],
eax
0089D972 8945 A4
mov dword ptr ss:[
ebp-5C],
eax
0089D975 C785 6CFFFFFF F>
mov dword ptr ss:[
ebp-94],
驾照考试.004068F4
0089D97F C785 64FFFFFF 0>
mov dword ptr ss:[
ebp-9C],8
0089D989 FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089D98F 8D95 74FFFFFF
lea edx,
dword ptr ss:[
ebp-8C]
0089D995 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
0089D998 C785 7CFFFFFF D>
mov dword ptr ss:[
ebp-84],
驾照考试.004070DC
0089D9A2 C785 74FFFFFF 0>
mov dword ptr ss:[
ebp-8C],8
0089D9AC FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089D9B2 8D45 94
lea eax,
dword ptr ss:[
ebp-6C]
0089D9B5 8D4D A4
lea ecx,
dword ptr ss:[
ebp-5C]
0089D9B8 50
push eax
0089D9B9 8D55 B4
lea edx,
dword ptr ss:[
ebp-4C]
0089D9BC 51
push ecx
0089D9BD 52
push edx
0089D9BE 8D45 C4
lea eax,
dword ptr ss:[
ebp-3C]
0089D9C1 6A 40
push 40 //40
道题做完后就压栈
0089D9C3 50
push eax
0089D9C4 FF15 7C104000
call dword ptr ds:[<&MSVBVM60.#595>]
; MSVBVM60.rtcMsgBox //非注册用户只能做前40道题!
0089D9CA 8BC8
mov ecx,
eax
第六处:
0089F03C 66:833D 28408B0>
cmp word ptr ds:[8B4028],0FFFF //
验证无误后,无限制做题,变量范围65535
0089F044 75 12
jnz short
驾照考试.0089F058 //爆破点F’
0089F046 66:C786 8800000>
mov word ptr ds:[
esi+88],262
0089F04F 66:C786 8A00000>
mov word ptr ds:[
esi+8A],2B2
0089F058 66:833D 28408B0>
cmp word ptr ds:[8B4028],0 //
验证失败后,弹出提示框,变量范围0
0089F060 0F85 AF000000
jnz 驾照考试.0089F115 //爆破点F
0089F066 B9 04000280
mov ecx,80020004
0089F06B B8 0A000000
mov eax,0A
0089F070 894D 9C
mov dword ptr ss:[
ebp-64],
ecx
0089F073 894D AC
mov dword ptr ss:[
ebp-54],
ecx
0089F076 8D95 64FFFFFF
lea edx,
dword ptr ss:[
ebp-9C]
0089F07C 8D4D B4
lea ecx,
dword ptr ss:[
ebp-4C]
0089F07F 8945 94
mov dword ptr ss:[
ebp-6C],
eax
0089F082 8945 A4
mov dword ptr ss:[
ebp-5C],
eax
0089F085 C785 6CFFFFFF F>
mov dword ptr ss:[
ebp-94],
驾照考试.004068F4
0089F08F C785 64FFFFFF 0>
mov dword ptr ss:[
ebp-9C],8
0089F099 FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089F09F 8D95 74FFFFFF
lea edx,
dword ptr ss:[
ebp-8C]
0089F0A5 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
0089F0A8 C785 7CFFFFFF D>
mov dword ptr ss:[
ebp-84],
驾照考试.004070DC
0089F0B2 C785 74FFFFFF 0>
mov dword ptr ss:[
ebp-8C],8
0089F0BC FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
0089F0C2 8D45 94
lea eax,
dword ptr ss:[
ebp-6C]
0089F0C5 8D4D A4
lea ecx,
dword ptr ss:[
ebp-5C]
0089F0C8 50
push eax
0089F0C9 8D55 B4
lea edx,
dword ptr ss:[
ebp-4C]
0089F0CC 51
push ecx
0089F0CD 52
push edx
0089F0CE 8D45 C4
lea eax,
dword ptr ss:[
ebp-3C]
0089F0D1 6A 40
push 40 //40
道题做完后就压栈
0089F0D3 50
push eax
0089F0D4 FF15 7C104000
call dword ptr ds:[<&MSVBVM60.#595>]
; MSVBVM60.rtcMsgBox //非注册用户只能做前40道题!
0089F0DA 8BC8
mov ecx,
eax
最后一处:
008A10DA 66:833D 28408B0>
cmp word ptr ds:[8B4028],0FFFF //
验证无误后,无限制做题,变量范围65535
008A10E2 75 12
jnz short
驾照考试.008A10F6 //爆破点G’
008A10E4 66:C786 8800000>
mov word ptr ds:[
esi+88],321
008A10ED 66:C786 8A00000>
mov word ptr ds:[
esi+8A],39F
008A10F6 66:833D 28408B0>
cmp word ptr ds:[8B4028],0 //
验证失败后,弹出提示框,变量范围0
008A10FE 0F85 AF000000
jnz 驾照考试.008A11B3 //爆破点G
008A1104 B9 04000280
mov ecx,80020004
008A1109 B8 0A000000
mov eax,0A
008A110E 894D 9C
mov dword ptr ss:[
ebp-64],
ecx
008A1111 894D AC
mov dword ptr ss:[
ebp-54],
ecx
008A1114 8D95 64FFFFFF
lea edx,
dword ptr ss:[
ebp-9C]
008A111A 8D4D B4
lea ecx,
dword ptr ss:[
ebp-4C]
008A111D 8945 94
mov dword ptr ss:[
ebp-6C],
eax
008A1120 8945 A4
mov dword ptr ss:[
ebp-5C],
eax
008A1123 C785 6CFFFFFF F>
mov dword ptr ss:[
ebp-94],
驾照考试.004068F4
008A112D C785 64FFFFFF 0>
mov dword ptr ss:[
ebp-9C],8
008A1137 FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
008A113D 8D95 74FFFFFF
lea edx,
dword ptr ss:[
ebp-8C]
008A1143 8D4D C4
lea ecx,
dword ptr ss:[
ebp-3C]
008A1146 C785 7CFFFFFF D>
mov dword ptr ss:[
ebp-84],
驾照考试.004070DC
008A1150 C785 74FFFFFF 0>
mov dword ptr ss:[
ebp-8C],8
008A115A FF15 88114000
call dword ptr ds:[<&MSVBVM60.__vbaVarDup>]
; MSVBVM60.__vbaVarDup
008A1160 8D45 94
lea eax,
dword ptr ss:[
ebp-6C]
008A1163 8D4D A4
lea ecx,
dword ptr ss:[
ebp-5C]
008A1166 50
push eax
008A1167 8D55 B4
lea edx,
dword ptr ss:[
ebp-4C]
008A116A 51
push ecx
008A116B 52
push edx
008A116C 8D45 C4
lea eax,
dword ptr ss:[
ebp-3C]
008A116F 6A 40
push 40 //40
道题做完后就压栈
008A1171 50
push eax
008A1172 FF15 7C104000
call dword ptr ds:[<&MSVBVM60.#595>]
; MSVBVM60.rtcMsgBox //非注册用户只能做前40道题!
008A1178 8BC8
mov ecx,
eax
【小结】:
总算把烦人的“非注册用户只能做前40道题!”的提示框 和 它所限制的40道题的数据完美解决了,但下面又有新问题了:“在考试时,老师在给我们批阅试卷的时候,某些题是错了的,但也不能让我们不明不白错下去撒~~~“得一失,长一智”,下面我们就来解决它的这个功能限制!
**********
失足之地,患得患失 “江山是靠我们打回来的~~~哈哈哈哈~~” **********
这里主要还是借助我们刚才对程序所下的vb的API函数断点:rtcMsgBox
0088F92A 66:393D 28408B0>
cmp word ptr ds:[8B4028],
di //
注册码验证失败后,弹出提示框,di=0
0088F931 897D E8
mov dword ptr ss:[
ebp-18],
edi //
计数器全部逐一清零,edi=0
0088F934 897D D8
mov dword ptr ss:[
ebp-28],
edi
0088F937 897D C8
mov dword ptr ss:[
ebp-38],
edi
0088F93A 897D B8
mov dword ptr ss:[
ebp-48],
edi
0088F93D 897D A8
mov dword ptr ss:[
ebp-58],
edi
0088F940 897D 98
mov dword ptr ss:[
ebp-68],
edi
0088F943 897D 88
mov dword ptr ss:[
ebp-78],
edi
0088F946 0F85 8B000000
jnz 驾照考试.0088F9D7 //爆破点H
0088F94C 8B35 88114000
mov esi,
dword ptr ds:[<&MSVBVM60.__vbaVarDu>
; MSVBVM60.__vbaVarDup
0088F952 B9 04000280
mov ecx,80020004
0088F957 894D B0
mov dword ptr ss:[
ebp-50],
ecx
0088F95A B8 0A000000
mov eax,0A //
eax=5
0088F95F 894D C0
mov dword ptr ss:[
ebp-40],
ecx
0088F962 BF 08000000
mov edi,8 //
edi=0
0088F967 8D55 88
lea edx,
dword ptr ss:[
ebp-78]
0088F96A 8D4D C8
lea ecx,
dword ptr ss:[
ebp-38]
0088F96D 8945 A8
mov dword ptr ss:[
ebp-58],
eax //
eax=0A
0088F970 8945 B8
mov dword ptr ss:[
ebp-48],
eax //
eax=0A
0088F973 C745 90 F468400>
mov dword ptr ss:[
ebp-70],
驾照考试.004068F4
0088F97A 897D 88
mov dword ptr ss:[
ebp-78],
edi //
edi=8
0088F97D FFD6
call esi
0088F97F 8D55 98
lea edx,
dword ptr ss:[
ebp-68] //
eax=4
0088F982 8D4D D8
lea ecx,
dword ptr ss:[
ebp-28]
0088F985 C745 A0 D468400>
mov dword ptr ss:[
ebp-60],
驾照考试.004068D4
0088F98C 897D 98
mov dword ptr ss:[
ebp-68],
edi //
edi=8
0088F98F FFD6
call esi
0088F991 8D4D A8
lea ecx,
dword ptr ss:[
ebp-58]
0088F994 8D55 B8
lea edx,
dword ptr ss:[
ebp-48] //
edx=18
0088F997 51
push ecx
0088F998 8D45 C8
lea eax,
dword ptr ss:[
ebp-38]
0088F99B 52
push edx
0088F99C 50
push eax
0088F99D 8D4D D8
lea ecx,
dword ptr ss:[
ebp-28]
0088F9A0 6A 40
push 40
0088F9A2 51
push ecx
0088F9A3 FF15 7C104000
call dword ptr ds:[<&MSVBVM60.#595>]
; MSVBVM60.rtcMsgBox //注册用户可以使用此功能!
0088F9A9 8BC8
mov ecx,
eax //
eax=1
【小结】:
解决上面的问题是我们大家最容易做到的,但有时也会往往疏忽这一点,能做到这一步我们“势在必得”**********
道高一尺,魔高一丈 “杀掉烦人的NAG注册框” **********
最难的一个关卡来咯:程序通过计时器来,做不定时验证,并附带烦人的“注册NAG框”,我们决定一起来把他Kill!!
这里所用到的vb的API函数断点:rtcVarStrFromVar
(这个断点让我很受伤。。。。。来回折腾了半天,主要是因为在VB里所有的窗体文件“Form.frm”都会调用到它!!所以。。。)
经过N次的F9运行,F2取消断点,最终来到了主界面,又由于程序做不定时验证,我点了只烟,经过漫长的的等待。。。。终于断下了:
008AD1CB 83C4 10
add esp,10
008AD1CE 8D45 D4
lea eax,
dword ptr ss:[
ebp-2C]
008AD1D1 8D4D B0
lea ecx,
dword ptr ss:[
ebp-50]
008AD1D4 50
push eax
008AD1D5 51
push ecx
008AD1D6 FF15 8C114000
call dword ptr ds:[<&MSVBVM60.#613>]
; MSVBVM60.rtcVarStrFromVar //这里断下 爆破TNT
008AD1DC 8D55 B0
lea edx,
dword ptr ss:[
ebp-50]
008AD1DF 8D45 A0
lea eax,
dword ptr ss:[
ebp-60]
008AD1E2 52
push edx
008AD1E3 50
push eax
008AD1E4 FF15 90104000
call dword ptr ds:[<&MSVBVM60.#520>]
; MSVBVM60.rtcTrimVar //搞鬼的计时器
008AD1EA 8D4D A0
lea ecx,
dword ptr ss:[
ebp-60]
008AD1ED 51
push ecx
008AD1EE FF15 24104000
call dword ptr ds:[<&MSVBVM60.__vbaStrVarMo>
; MSVBVM60.__vbaStrVarMove
008AD1F4 8BD0
mov edx,
eax
008AD1F6 8D4D E8
lea ecx,
dword ptr ss:[
ebp-18] //(UNICODE
"-464848367")
edx=14
【小结】:
反复跟了几次,我还是“硬性”去掉了那个烦人的NAG窗,哈哈,总算做完了,不过打开修改后的程序,看到那几个大大的“驾照考试模拟系统2005 V1.0版(未注册)”就是不爽,我决定把它“美”一下,呵呵~~~
**********
人不可貌像,海水不可斗量 **********
美化部分(略)
【补充】:
文件:jzsjk.mdb 数据库密码:kjq88880327
【爆破点总结①】:(硬性之道 篇)
============================================
大于40道题数据题库部分:
008A10E2 7512
jne 008A10F6 //
jne 改 je
0089C1FA 7512
jne 0089C20E //
jne 改 je
0089C6F4 7512
jne 0089C708 //
jne 改 je
0089CAEA 7512
jne 0089CAFE //
jne 改 je
0089CEE0 7512
jne 0089CEF4 //
jne 改 je
0089D934 7512
jne 0089D948 //
jne 改 je
0089F044 7512
jne 0089F058 //
jne 改 je
“非注册用户只能做前40道题!”提示框部分:
008A10FE 0F85AF000000
jne 008A11B3 //
jne 改 je
0089C216 0F85AF000000
jne 0089C2CB //
jne 改 je
0089C710 0F85AF000000
jne 0089C7C5 //
jne 改 je
0089CB06 0F85AF000000
jne 0089CBBB //
jne 改 je
0089CEFC 0F85AF000000
jne 0089CFB1 //
jne 改 je
0089D950 0F85AF000000
jne 0089DA05 //
jne 改 je
0089F060 0F85AF000000
jne 0089F115 //
jne 改 je“驾照考试模拟系统2005 V1.0版(未注册)”窗口部分:
008AC27A 7520
jne 008AC29C //
jne 改 je
“驾照考试模拟系统2005 V1.0版”窗口部分:
008AC2A4 7520
jne 008AC2C6 //
jne 改 je
“驾照考试模拟系统2005 V1.0版(已注册)”窗口部分:
008B2501 7510
jne 008B2513 //
jne 改 je
008B276B 7510
jne 008B277D //
jne 改 je
“注册用户可以使用此功能!”提示框部分:
0088F946 0F858B000000
jne 0088F9D7 //
jne 改 je
============================================
【爆破点总结②】:(里刚外柔 篇)
============================================
008AD1D6 FF15 8C114000
call dword ptr ds:[<&MSVBVM60.#613>] //nop
掉
然后使用本人提供的“破解版通用注册码”注册:
S/N
:9B8CB-8CFBG-R9EBU-MF7G5-2AR49
============================================
【内存注册机】:(顺气自然 篇)
中断地址:008B0A97
中断次数:1
第一字节:5F
指令长度:1
内存方式---->EAX---->宽字符串
============================================
【精彩一刻】:
============================================
008B0A97 5F
pop edi ; MSVBVM60.__vbaStrMove //Find Serial Number !!!
============================================
【文章总结】:
这个软件的算法太BT了,看都看花眼了,不过这次还是被我跟到了Serial Number,呵呵~~~~,本来我是帮我一个准备考驾照的姨爹找一套考试模拟软件的,不过“当”下来,先是看到是VB的程序,眼睛都大了,没办法,帮人帮到底嘛,经过了漫长的时间,终于完美爆掉了,后来想研究一下该程序的算法,不过初跟了一下,真是BT啊~~~~所以最终还是放弃了,闲话就不多说了,收工,和朋友喝茶咯~~~~〓全文完〓
Copyright (C) 2005 KuNgBiM[DFCG]
2005.05.03
[招生]科锐逆向工程师培训46期预科班将于 2023年02月09日 正式开班