藏经阁是比较著名的盗版系列,它对盗版光盘采取了保护措施。如果你将里面的安装程序拷贝到硬盘直接安装的话,会出现如下的提示:
你买的不是gamez88的盘,请去退盘
显然猫腻在光盘上。如果你用UltraISO打开光盘,可以看到隐藏的9999目录,里面有一个300000000字节的8888.dat文件(注:每期盘的隐藏文件都不尽相同)
我们用ProcMon跟踪一下就会发现,安装程序会尝试打开隐藏文件。根据ProcMon提供的文件名和call stack对程序进行分析的话,可以发现,程序会获取隐藏文件的大小,然后进行检查。如果文件不存在或者大小不符,就会弹出错误对话框。
以第十期的dk4.exe(大航海时代4)为例,检测代码在安装时生成的临时文件~GLC0000.tmp中:
loc_100050E7:
xor ebx, ebx
lea eax, [ebp+sz]
push ebx
push ebx
push eax
call sub_10011D6A ;open file
mov edi, eax
add esp, 0Ch
cmp edi, 0FFFFFFFFh
jz loc_10005278
push 2
push ebx
push edi
call sub_10011E33 ;seek to end
add esp, 0Ch
mov ebx, eax
push edi
call ds:CloseHandle
loc_1000511A:
push ebx
push offset aLd
push esi
call ds:wsprintfA ;print file length into buffer
add esp, 0Ch
为此,只需要用windbg attach到dk4.exe,执行
bp 100050E7;g
选择安装路径后点Next触发断点,然后再执行
r ebx=11E1A300;r eip=1000511A;g
即可。
当然,如果你不想用调试器那么麻烦,可以直接挂载光盘或者将光盘上的隐藏文件拷到硬盘,这样也是可以绕过保护的。