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
PYG-优雅DLL劫持补丁制作工具
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], 0x1
004012B0 |. |0F85 D7000000jnz 2.0040138D
004012B6 |. |68 40726A00 push 2.006A7240
004012BB |. |8B0424 mov eax, dword ptr ss:[esp]
004012BE |. |8B00 mov eax, dword ptr ds:[eax]
004012C0 |. |8B00 mov eax, dword ptr ds:[eax]
004012C2 |. |FF50 28 call dword ptr ds:[eax+0x28]
004012C5 |. |8945 FC mov [local.1], eax
004012C8 |. |FF75 FC push [local.1]
004012CB |. |68 7E844700 push 2.0047847E ; 到期时间:
004012D0 |. |B9 02000000 mov ecx, 0x2
004012D5 |. |E8 AAFEFFFF call 2.00401184
004012DA |. |83C4 08 add esp, 0x8
004012DD |. |8945 F8 mov [local.2], eax
004012E0 |. |8B5D FC mov ebx, [local.1]
004012E3 |. |85DB test ebx, ebx
004012E5 |. |74 09 je short 2.004012F0
004012E7 |. |53 push ebx
004012E8 |. |E8 156F0000 call 2.00408202
004012ED |. |83C4 04 add esp, 0x4
004012F0 |> |6A 00 push 0x0
004012F2 |. |6A 00 push 0x0
004012F4 |. |6A 00 push 0x0
004012F6 |. |68 01030080 push 0x80000301
004012FB |. |6A 00 push 0x0
004012FD |. |68 00000000 push 0x0
00401302 |. |68 04000080 push 0x80000004
00401307 |. |6A 00 push 0x0
00401309 |. |8B45 F8 mov eax, [local.2]
0040130C |. |85C0 test eax, eax
0040130E |. |75 05 jnz short 2.00401315
00401310 |. |B8 79844700 mov eax, 2.00478479
00401315 |> |50 push eax
00401316 |. |68 03000000 push 0x3
0040131B |. |BB 608D4000 mov ebx, 2.00408D60
00401320 |. |E8 E36E0000 call 2.00408208
00401325 |. |83C4 28 add esp, 0x28
00401328 |. |8B5D F8 mov ebx, [local.2]
0040132B |. |85DB test ebx, ebx
0040132D |. |74 09 je short 2.00401338
0040132F |. |53 push ebx
00401330 |. |E8 CD6E0000 call 2.00408202
00401335 |. |83C4 04 add esp, 0x4
00401338 |> |6A 00 push 0x0
0040133A |. |68 00000000 push 0x0
0040133F |. |6A FF push -0x1
00401341 |. |6A 05 push 0x5
00401343 |. |68 00000106 push 0x6010000
00401348 |. |68 01000152 push 0x52010001
0040134D |. |E8 DA6E0000 call 2.0040822C
00401352 |. |83C4 18 add esp, 0x18
00401355 |. |68 02000080 push 0x80000002
0040135A |. |6A 00 push 0x0
0040135C |. |68