名称 :- EyeCU v1.1
下载 :- ;
保护 :- 使用时有警告窗和十分钟的限时
工具 :- SoftICE, WDasm89,
一种十六进制编辑器 .
DLL : VB6 dll
...
( 这里省略了作者一段废话)
...
准备工作
首先{dy}件事是运行 EyeCU v1.1
,出现{dy}画面是告诉我们 'THIS IS NOT REGISTERED'
,还有告诉我们使用这个“优秀”程序多少时间(实际上每次 10
分钟),按 OK 你进入工作界面,面对的是标量栏上丑陋的 'UNREGISTERED'
。
我通常{dy}件事是看 'ABOUT' 对话框,因此点
'HELP' 然后 'ABOUT', 再次出现在你面前是未登记的告示。这个 'UNREGISTERED'
太讨厌了,让我们干掉它。我们现在面对的三种情况:刚运行的警示窗( NAG BOX ),时间限制,
ABOUT 对话框。该怎么办呢?用 bpx MessageBoxA
拦截
NAG BOX 不能中断,这是因为这是
'Visual Basic' 程序。
如令用以前的方法拦截是靠不住了,这是 VB 程序,那是
VB5 还是 VB6 呢?你用十六进制工具打开文件,看偏移地址: 240h 。你将看到 DLL 名称。结果这是
VB6 程序。
你必须能在 VB6 dll
内设断,因此将 MSVBVM60.DLL 加入到你的
WINICE.DAT 中去。
exp=c:\\system\msvbvm60.dll
;exp=c:\\system\msvbvm50.dll
这行前有分号不被装载
(注:再次声明一点,不要两者同时装载,可参考本课{dy}节)
你重新启动后,即可在 VB dll
中设断点了。你可用 W32Dasm 装载程序,你可在
'IMPORT FUNCTIONS' 部分发现相关的
MSVBVM60.DLL 内部函数,它们一般在代码的开端处。
开始 crack
Ok, 首先我们需知道以什么函数设断点,以前我说过{dy}目标是告诉我们 'NOT REGISTERED' 的警示窗(
NAG BOX ),此时你用
W32Dasm
观察会发现 VB dll
中的函数类似 API 函数,寻找怀疑的函数,通常你可从它们的函数名能了解其功能。
为了节省时间,我将告诉你们在这一步需要些什么函数,在这里仅仅很少几个函数看起来有用,
rtcMsgBox 函数比较可能。现在我们进入 SOFTICE ,下命令:
bpx rtcMsgBox [RETURN]
你己xx了 rtcMsgBox 函数 .
下一步,按 CTRL+D 退出 SOFTICE ,用 SOFTICE 的 LOAD 功能装载目标软件, he ,我们很快中断,按
F11 允许 rtcMsgBox 函数工作,
NAG BOX
窗口将出现,按 Ok,SOFTICE 马上拦截,你看到:
:00462180 CALL DWORD PTR [0040109C] <------- Call NAG BOX
窗口
.
:00462186 LEA EAX, DWORD PTR [EBP-24] <-------
在你按
F11 后将来到这 .
:00462189 LEA ECX, DWORD PTR [EBP-20]
:0046218C PUSH EAX
我们现在知道 NAG BOX
地址了,我们现在xx rtcMsgBox 断点,因为我们己找到所要的了,用下面命令xx:
bc* [RETURN]
现在我们设 NAG BOX
断点,你可用鼠标双击那一行,或键入:
bpx 462180 [RETURN]
多做些笔记是个好习惯,我们把 NAG 处地址记下。我们开始跟踪,我们知道程序一定有个地方检测是注册版还是共享版。
不管怎样,一个方法是向上(用向上光标键)寻找条件指令 jump (jnz or jz
等
.) ,看哪个刚好跳过 NAG BOX.
你不需走太远,就会看到:
:004620C2 CALL 00461450 <-----------
程序检测是否注册版 .
:004620C7 TEST AX, AX <-----------
测试
AX 判断是否注册 .
:004620CA JNZ 00462207 <-----------
如没注册跳走 .
代码 004620CA JNZ 00462207
处可使我们摆脱 NAG BOX
,这里是我们需修改的,但是时间保护仍存在。如果我们修改代码:把 :004620CA 一行改为:
[JZ 00462207]
NAG BOX 将不会出现,它也能去除标量栏的
UNREGISTERED ,但你还能在
ABOUT 菜单处看到 UNREGISTERED 。所以还没xx
crack 。
如果你们观察 [:004620C2 CALL 00461450]
这个
CALL, 会发现它是判断我们是注册者还是未注册,由于程序作者懒惰,它所有的保护都是用这个
CALL 判断。好,我们从此下手,键入 ...
bpx 4620C2 [RETURN]
我们现在重新运行程序, SOFTICE 会在这个
CALL 中断,这时你按 F8 跟进去 ...
:00461450 PUSH EBP <-----------
进去后将在这里 .
:00461451 MOV EBP, ESP
:00461453 SUB ESP, 00000008
:00461456 PUSH 00402026
我们现在在其“保护核心处”,该软件以后还要检测这个 CALL 以判断是否注册。因此我们在
[:00461450 PUSH EBP]
设断
现在我们按 F11 将来到:
:004620C2 CALL 00461450 <-----------
程序检测是否注册版 .
:004620C7 TEST AX, AX <-----------
测试
AX 判断是否注册 .
:004620CA JNZ 00462207 <-----------
如没注册跳走 .
现在我们要在这部分打补丁,上面己讨论过了, :004620CA 改成 [JZ 00462207] 将路过 NAG BOX, 如何改呢?
首先下命令: code on
(此命令是显示程序的十六进制代码)(译者注:这里改的不是 VB dll ,而是软件本身代码,
VB dll 不能乱改,不然会死机的)
:004620C2 E889F3FFFF CALL 00461450
:004620C7 6685C0 TEST AX, AX
:004620CA 0F8537010000 JNZ 00462207
我们来分析一下上面代码:{dy}柱是内存地址;第二柱是程序的本身代码;第三柱是程序汇编指令。
如果你的 SOFTICE 没看到第二柱数字,请用命令:
code on 。我们现在将要修补
:
004620CA 0F8537010000 JNZ 00462207
请写下第二柱程序操作码, 66,85,C0,0F,85,37,01,00,00
请尽量多记些操作码,以便在十六进制编辑器中能找到{wy}处,不然太简单,一程序中可能会有重复,你就不能准确定位了。
现在按 F10 来到时这一行:
[:004620CA JNZ 00462207]
在这一行下命令 A, (此命令是反汇编)
然后键入: JZ 462207
,回车两次
这时你己改好指令了,此时把改好的操行码记下来:
0F,85,37,01,00,00,66,89,1D,40,50,46,00 <---
原“操作码” .
0F,84,37,01,00,00,66,89,1D,40,50,46,00 <---
我们新的“操作码” .
你看到实际只是变动一小部分 [0F,85,37 变成 0F,84,37] ,而正是这小改动xx了
NAG BOX,Ok 你将两行代码记在纸上,过会用。——(补丁 1
,
NAG 去除)
我们现将进行下一步,按 CTRL+D 退出 SOFTICE ,现在还有个地方存在 UNREGISTERED ,那就是“
ABOUT ”窗口,按“ HELP ”“ ABOUT ”这时 SOFTICE 中断。我们将看到以来到刚才的保护核心处。
按
F11 离开此处,你将来到 ...
:0045DC0E E83D380000 CALL 00461450 <---
肥大的保护检测中心 .
:0045DC13 6685C0 TEST AX, AX <---
我们是好人 ?.
:0045DC16 0F85C3000000 JNZ 0045DCDF <--- YES
跳
!.
这次我们要改 :0045DC16 JNZ 0045DCDF
,成
[JZ 0045DCDF]
,重复上面的工作,把改动的操作码记下来。
———— ( 补丁 2 About Box REG).
啊,我们差不多完成打猎了,我听到有人大喊:“我们还没有移去 10
分钟的限制呢”。好,你们做那里等大约 60 秒 ...SOFTICE 将再次中断,爽啊,按 F11 将来到 ....
:0044E9EA E8612A0100 CALL 00461450 <---
保护检测中心
:0044E9EF 663DFFFF CMP AX, FFFF <---
我们是好人? .
:0044E9F3 7546 JNZ 0044EA3B <---
如是坏人,就跳 .
我们这次打猎结束,我捕猎了所有的保护限制,现在我们需要做重复工作记下操作码 ...
75,46,66,A3,40,50 <---
原操作码
.
74,46,66,A3,40,50 <---
改后操作码 . ————(补丁三)
开始修补程序
1 、用你常用的十六进制编辑器打开主程序;
2 、在菜单“ FIND ”打开查找框(确信你选中是
HEX 而不是 ASCII );
3 、键入{dy}个原操作码(补丁 1 );
4 、按 find (查找),它将找到你指定的操作码;
5 、把原操作码改成 crack 过的操作码。
6 、重复工作完成所有改动;
7 、存盘,运行,你完成所有的 crack 工作。
有许多方法能对付这类保护方式,本文这种方法需花费较多时间,走较长的路线,但是不需了解程序的核心判断是如何工作的。
作者: SHEEP14 SHEEP140@MAILCITY.COM