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此函數。工具
案例軟件也是從某個破解論壇上找的,算是拿着作課後練習,邊學邊記錄.學習
0x01ui
ODspa
PYG-優雅DLL劫持補丁製做工具3d
0x02指針
這個軟件是比較低的版本,跟如今升級以後的網絡驗證有不少不一樣,本篇是講的DLL補丁劫持code
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 01000000 push 0x1 00401361 |. |6A 00