DLL:
由于输入表中只包含 DLL 名而没有它的路径名,因此加载程序必须在磁盘上搜索 DLL 文件。首先会尝试从当前程序所在的目录加载 DLL,如果没找到,则在Windows 系统目录中查找,最后是在环境变量中列出的各个目录下查找。利用这个特点,先伪造一个系统同名的 DLL,提供同样的输出表,每个输出函数转向真正的系统 DLL。程序调用系统 DLL 时会先调用当前目录下伪造的 DLL,完成相关功能后,再跳到系统DLL同名函数里执行。这个过程用个形象的词来描述就是系统 DLL 被劫持(hijack)了。
利用这种方法取得控制权后,可以对主程序进行补丁。此种方法只对除kernel32.dll、ntdll.dll等核心系统库以外的DLL有效,如网络应用程序的ws2_32.dll、游戏程序中的d3d8.dll,还有大部分应用程序都调用的lpk.dll、sxs.dll,这些DLL都可被劫持。
伪造的 dll 制作好后,放到程序当前目录下,这样当原程序调用原函数时就调用了伪造的dll的同名函数,进入劫持DLL的代码,处理完毕后,再调用原DLL此函数。
案例软件也是从某个破解论坛上找的,算是拿着做课后练习,边学边记录.
0x01
OD
0x02
这个软件是比较低的版本,跟现在升级之后的网络验证有很多不同,本篇是讲的DLL补丁劫持
0x03
PEID查壳
无壳,C++编写的,不用在意字符串找不到的问题
0x04
载入OD,CTRL+G,到401000
因为之前没有加壳,80%的可能是可以查找到字符串的
来到最上边,找到到期时间双击到代码处,我们就干掉试用时间,达到长久试用的效果
00401291 |. /0F85 2B010000jnz 2.004013C2
00401297 |. |68 40726A00 push 2.006A7240
0040129C |. |8B0424 mov eax, dword ptr ss:[esp]
0040129F |. |8B00 mov eax, dword ptr ds:[eax]
004012A1 |. |8B00 mov eax, dword ptr ds:[eax]
004012A3 |. |FF90 88000000call dword ptr ds:[eax+0x88]
004012A9 |. |8945 F8 mov [local.2], eax
004012AC |. |837D F8 01 cmp [local.2],