作者:aqtata 标题:C语言学习系统 3.2
【破文作者】:aqtata
【作者主页】:
http://poptown.gamewan.com
【软件名称】:C语言学习系统 3.2
【软件限制】:功能限制
【保护方式】:无
【破解工具】:Ollydbg + C32Asm + vbde
【编程语言】:VB6
【下载地址】:
www.skycn.com 或者
www.baidu.com
【软件简介】:C语言学习软件
―――――――――――――――――――――――――――――――――
【破解过程】:
这个和VB学习系统破解方法是差不多是一样的
首先运行程序,看到一个注册画面,我同意按钮经过延迟1-2秒好才能点击进入程序界面
先解除NAG画面
运行vbde载入主程序,看到它得到类似DEDE分析DEPHI语言的窗体名和各种事件和具体偏移地址
点Forms按钮,查看frmSplit窗口,很容易知道它是启动画面
仔细一看frmSplit窗口里面的4个事件,找需要看2个关键的,另外2个一个是退出,一个是帮助,无须关心
CmdAgree "我同意"按钮,入口地址:4B2300
Timer1_timer 控制按钮1~2秒后可用,入口地址:4B28A0
OD加载,来到4B2300
004B2300 > 55 PUSH EBP ====>跳转来自405038
004B2301 . 8BEC MOV EBP,ESP
004B2303 . 83EC 0C SUB ESP,0C
再看看timer事件入口
004B28A0 > 55 PUSH EBP ====>跳转来自40506C
004B28A1 . 8BEC MOV EBP,ESP
004B28A3 . 83EC 0C SUB ESP,0C
找到跳转
00405030 . 816C24 04 4700>SUB DWORD PTR SS:[ESP+4],47
00405038 . E9 C3D20A00 JMP 123.004B2300 ====>跳向"我同意"
0040503D . 816C24 04 5F00>SUB DWORD PTR SS:[ESP+4],5F
00405045 . E9 06D40A00 JMP 123.004B2450
0040504A . 816C24 04 3300>SUB DWORD PTR SS:[ESP+4],33
00405052 . E9 C9D40A00 JMP 123.004B2520
00405057 . 816C24 04 4300>SUB DWORD PTR SS:[ESP+4],43
0040505F E9 8CD60A00 JMP 123.004B26F0
00405064 . 816C24 04 4F00>SUB DWORD PTR SS:[ESP+4],4F
0040506C . E9 2FD80A00 JMP 123.004B28A0 ====>跳向Timer事件
我们直接把跳向时间事件的地方改成跳到"我同意"
将 JMP 004B28A0 改为 jmp 004B2300 保存修改
运行试试,直接进入主窗体
然后要隐藏NAG,不让在屏幕中出现,眼不见为净
点VBDE的From按钮,看frmRegInfo的属性值
'offset: 00016361 ====>窗体入口地址
VERSION 5.00
Begin VB.Form frmRegInfo
Caption = "注册"
BorderStyle = 3 ====>窗口样式,改为0,窗口就没有边框
LinkTopic = "Form1"
MaxButton = 0 'False
MinButton = 0 'False
ClientLeft = 45
ClientTop = 330
ClientWidth = 5880 ====>窗体的宽度,改为0
ClientHeight = 4575
ShowInTaskbar = 0 'False
StartUpsituation = 1 'CenterOwner
怎么改?随便用16进制编辑工具,我这里用UE,习惯了
窗体入口地址是16361,UE里按ctrl+g输入0x16361h来到这,如图
OK了,运行程序后1~2秒显示主窗口
接着破解了,使用"函数说明"的例题导出时会提示"只有注册用户才可以看。。。。。"
c32asm反汇编,因为是VB程序,当然把"使用Unicode分析字符串"打上勾勾了
居然找到23处之多
::0045F849:: C745 94 7C8E4000 MOV DWORD PTR [EBP-6C],408E7C
::00463AFB:: C785 D4FEFFFF 7C8E4000 MOV DWORD PTR [EBP-12C],408E7C
::00463DF5:: C745 A4 7C8E4000 MOV DWORD PTR [EBP-5C],408E7C
::00465598:: C745 88 7C8E4000 MOV DWORD PTR [EBP-78],408E7C
::0046B74D:: C745 94 7C8E4000 MOV DWORD PTR [EBP-6C],408E7C
::0046F1CB:: C785 D4FEFFFF 7C8E4000 MOV DWORD PTR [EBP-12C],408E7C
::0046FA3D:: C745 8C 7C8E4000 MOV DWORD PTR [EBP-74],408E7C
::004711F1:: C785 D4FEFFFF 7C8E4000 MOV DWORD PTR [EBP-12C],408E7C
::00474724:: C745 94 7C8E4000 MOV DWORD PTR [EBP-6C],408E7C
::00475047:: C745 98 7C8E4000 MOV DWORD PTR [EBP-68],408E7C
::00477146:: C785 60FFFFFF 7C8E4000 MOV DWORD PTR [EBP-A0],408E7C
::0047889B:: C785 D4FEFFFF 7C8E4000 MOV DWORD PTR [EBP-12C],408E7C
::00478DF5:: C745 A4 7C8E4000 MOV DWORD PTR [EBP-5C],408E7C
::00479D38:: C745 88 7C8E4000 MOV DWORD PTR [EBP-78],408E7C
::0047DFFD:: C745 94 7C8E4000 MOV DWORD PTR [EBP-6C],408E7C
::00480DD1:: C785 D4FEFFFF 7C8E4000 MOV DWORD PTR [EBP-12C],408E7C
::0048EEDB:: C785 D4FEFFFF 7C8E4000 MOV DWORD PTR [EBP-12C],408E7C
::0048F229:: C745 94 7C8E4000 MOV DWORD PTR [EBP-6C],408E7C
::0048F8ED:: C745 8C 7C8E4000 MOV DWORD PTR [EBP-74],408E7C
::00494606:: C785 60FFFFFF 7C8E4000 MOV DWORD PTR [EBP-A0],408E7C
::004A4DDD:: C745 94 7C8E4000 MOV DWORD PTR [EBP-6C],408E7C
::004B35E3:: C745 9C 7C8E4000 MOV DWORD PTR [EBP-64],408E7C
::004B3813:: C745 9C 7C8E4000 MOV DWORD PTR [EBP-64],408E7C
先来0045F849
0045F808 . EB 7E JMP SHORT 123.0045F888
0045F80A > 8B35 A8114000 MOV ESI,DWORD PTR DS:[<&MSVBVM60.__vbaVa>; MSVBVM60.__vbaVarDup ====>跳转来自45F6FD
0045F810 . B9 04000280 MOV ECX,80020004
0045F815 . 894D A4 MOV DWORD PTR SS:[EBP-5C],ECX
0045F818 . B8 0A000000 MOV EAX,0A
0045F81D . 894D B4 MOV DWORD PTR SS:[EBP-4C],ECX
0045F820 . BF 08000000 MOV EDI,8
0045F825 . 8D95 7CFFFFFF LEA EDX,DWORD PTR SS:[EBP-84]
0045F82B . 8D4D BC LEA ECX,DWORD PTR SS:[EBP-44]
0045F82E . 8945 9C MOV DWORD PTR SS:[EBP-64],EAX
0045F831 . 8945 AC MOV DWORD PTR SS:[EBP-54],EAX
0045F834 . C745 84 E08E40>MOV DWORD PTR SS:[EBP-7C],123.00408EE0
0045F83B . 89BD 7CFFFFFF MOV DWORD PTR SS:[EBP-84],EDI
0045F841 . FFD6 CALL ESI ; <&MSVBVM60.__vbaVarDup>
0045F843 . 8D55 8C LEA EDX,DWORD PTR SS:[EBP-74]
0045F846 . 8D4D CC LEA ECX,DWORD PTR SS:[EBP-34]
0045F849 . C745 94 7C8E40>MOV DWORD PTR SS:[EBP-6C],123.00408E7C ====>这
所以来到45F6FD
0045F6F5 . 66:833D 24A04B>CMP WORD PTR DS:[4BA024],0FFFF
0045F6FD . 0F85 07010000 JNZ 123.0045F80A ====>跳走出错
一个个的改跳转吗?太麻烦了,23处啊,再分析几个跳转,仔细看看发现一个共同的规律
每个关键的地方都是这种形式
00****** . 66:833D 24A04B>CMP WORD PTR DS:[4BA024],0FFFF
………………
00****** . 0F85 07010000 JNZ 123.00******
也就是说4BA024这的值影响是否成功,这里的值必须是0FFFF
OD重新加载,在4BA024设置内存写入断点,f9运行中断第1次
此时并不在程序领空里,继续f9运行中断第2次
004AB11E 66:C705 24A04B>MOV WORD PTR DS:[4BA024],0 ====>断在这里
果然送0了,把0改成0FFFF即可!
―――――――――――――――――――――――――――――――――
【暴 破】:
解除NAG见文章开头
破解这样改
004AB11E 66:C705 24A04B000000>MOV WORD PTR DS:[4BA024],0
改成
004AB11E 66:C705 24A04B00FFFF>MOV WORD PTR DS:[4BA024],0FFFF