TORN@DO's Cracking Tutorial for
Babylon Translator 3.50
你需要的工具:WinIce和一个十六进制编辑器。我的意见是用Hacker's View。如果你没有这些工具,你可以到一些破解软件的网站去下载。
Banylon是一个免费软件,但是它在使用过一段时间后仍然会过期(试用期?)。你可以到它的网站下载新版本继续试用(骗取访问量?)。而象你和我一样的人不想一直去升级。你应当明白我为什么破解一个有时间限制的免费软件,这是我见过的第一个有时间限制的免费软件。我想你已经读过《Cracker's
Notes》,所以我们现在可以开始了。不过不要问我要那个Notes,自己到破解网站去找!
Step 1
安装Babylon并且看一下“关于”窗口。你会看见“You've x Days left ...”的消息,然后退出。将你的系统日期向前推至少101天。再次启动时你会看到过期的窗口。从我的其他教程你会发现我总是会看一下入口函数和出口函数,因为这将节省我很多时间。
ADAVPI32.RegCloseKey
ADAVPI32.RegOpenKeyExA
ADAVPI32.RegQueryValueExA
这些是很重要的函数。但是我们知道它们不能检查日期。它们只能存储程序设置。我们再看一下CAPTLIB.DLL
IsBabylonPastExpiryDate
Kernel32.GetLocalTime
Kernel32.GetSystemTime
看见这个“IsBabylonPastExpiryDate”了?知道这意味着什么吗?对了! 把CAPTLIB.DLL拷到C:\,在WINICE.DAT中加入:
EXP="C:\CAPTLIB.DLL"
使winice加载CAPTLIB.DLL。重启动你的计算机,不要忘了加载WinIce!
Step 2
让我们开始吧!Ctrl+D调出winice,在函数IsBabylonPastExpiryDate处设置断点(BPX IsBabylonPastExpiryDate)。如果出现错误,那么你肯定忘了改变winice.dat了,或者你没有重启动你的计算机。运行Babylon,你会在函数被调用的地方回到WinIce中。按F10跳过此函数,哦,过期窗口!我们再在MessageBoxA设断点。按F11回到呼叫此函数的程序。现在你会看到这些代码:
0137:00AA141B FF75E8
PUSH
DWORD PTR [EBP-18]
0137:00AA141E E8BFC60000
CALL ADAVPI32!RegCloseKey
0137:00AA1423 85DB
TEST
EBX, EBX
0137:00AA1425 7431
JZ
00AA1458
...
0137:00AA1442 BD95C4FDFFFF
LEA EDX, [EBP-023C]
0137:00AA1448 52
PUSH
EDX
0137:00AA1449 E9C4C60000
CALL USER32!GetFocus
0137:00AA144E 50
PUSH
EAX
0137:00AA144F E8A6C60000
CALL USER32!MessageBoxA
0137:00AA1454 33C0
XOR
EAX,EAX
0137:00AA1456 EB04
JMP
00AA145C
0137:00AA1458 0FBF45F2
MOVSX EAX,WORD PTR
[EBP-0E]
现在你会发现程序比较了某个值,如果没有时间剩下,那么就会出现过期对话框。所以我们先破解这里。将JZ 00AA1458改为JMP 00AA1458。你可以实验一下,如果ZF被置位或者没有会发生什么情况。重新运行Babylon,还看的见那个窗口吗?当然看不见了!在下一步,我们将要除掉IsBabylonPastExpired中的数据检查,退出吧。
Step 3
你已经知道,IsBabylonPastExpired是CAPTLIB.DLL的一个输出函数。当一个程序有一个出口时,这个口往往被用到。所以我们在IsBabylonPastExpiryDate处设了一个断点。运行程序,将会回到winice。按F10直到你看见这样的代码:
0137:00AA11F0 E851C80000
CALL KERNEL32!GetSystemTime
现在你知道时间就是在这里检查的。当你按F10的时候,看一下esi,你会发现esi突然改变了!用“? VALUE”你会看见在第一次运行程序后你新设置的时间。往下翻,你会看见这样的代码:
0137:00AA12B9 7D0A
JGE
00AA12C5
0137:00AA12BB BB01000000
MOV EAX,00000001
0137:00AA12C0 E956010000
JMP 00AA141B
这个JGE的意思是:如果日期已经到过期时间或以后,那么禁止你“试用”Babylon...如果不是,那么程序仍然可用(JMP 00AA141)。所以你可以改变esi的值来看看是不是这样,或者你可以输入“A”然后NOP回车NOP回车,回车(是两个!)。然后Babylon会完全可用!
Step 4
现在你已经知道MessageBox出现的地方和日期检查的地方。你可以用一个简单的JZ或者JMP跳过MessageBox;用JMP 00AA141B替代JGE
00AA12C5或者NOP掉这个JGE 00AA12C5。最后用FC比较CAPTLIB.OLD和CAPTLIB.DLL,并在PATCH.TXT储存两者的不同之处(FC
/B CAPTLIB.OLD CAPTLIB.DLL > PATCH.TXT)。现在编一下你的pacth并编译。把CAPTLIB.DLL改名为CAPTLIB.CRK,CAPTLIB.OLD改名为CAPTLIB.DLL。执行你的pacth。比较CAPTLIB.DLL和CAPTLIB.CRK直到两者完全相同。好好享受这个翻译工具吧,哦,别忘了删除C:\CAPTLIB.DLL和WINICE.DAT的EXP="C:\CAPTLIB.DLL一行。
- 标 题:翻译:TORN@DO's Cracking Tutorial for (4千字)
- 作 者:bood
- 时 间:2001-2-10 18:59:48
- 链 接:http://bbs.pediy.com