必备绝技Hook大法 上Word格式文档下载.docx

上传人:b****5 文档编号:15782307 上传时间:2022-11-16 格式:DOCX 页数:19 大小:23.79KB
下载 相关 举报
必备绝技Hook大法 上Word格式文档下载.docx_第1页
第1页 / 共19页
必备绝技Hook大法 上Word格式文档下载.docx_第2页
第2页 / 共19页
必备绝技Hook大法 上Word格式文档下载.docx_第3页
第3页 / 共19页
必备绝技Hook大法 上Word格式文档下载.docx_第4页
第4页 / 共19页
必备绝技Hook大法 上Word格式文档下载.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

必备绝技Hook大法 上Word格式文档下载.docx

《必备绝技Hook大法 上Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《必备绝技Hook大法 上Word格式文档下载.docx(19页珍藏版)》请在冰豆网上搜索。

必备绝技Hook大法 上Word格式文档下载.docx

用途:

现在这种方法普遍运用于各类程序中,如加壳,杀软,病毒,Rootkits等等。

本文从难以程度上主要分三块详细介绍:

一.用户模式Hook:

IAT-hook,Dll-inject二.内核模式Hook:

ssdt-hook,idt-hook,int 

2e/sysenter-hook三.Inline 

Hook;

这次先来看第一部分

Ⅰ.用户模式Hook

一.IAT-hooking

(一)一般原理:

IAT是Import 

Address 

Table(输入地址表)的简写,这需要你知道关于win 

PE格式的了解。

现在应用程序中的大多数函数都是windows 

api,而这些函数一般都由几个系统dll导出,如user32.dll,kernel32.dll,advapi32.dll等。

如果程序要运用这些函数,就的从这些dll文件中导入,程序会把导入的函数放到一个叫IAT的数据结构中。

我们可以先找到自己需要hook的函数,然后把目标函数的地址改成我们自己的hook函数,最后在恢复到目标函数的地址。

这样一来,目标函数被调用时,我们的hook函数也就别调用了。

如果这个hook函数是病毒,是后门,是。

由于是在目标函数进程的空间内,所以这个hook函数也就不会被发现。

关于WIN 

PE格式的详细知识可参见:

(二)大体框架:

这里用伪码给个一般框架,以便有个大体印象。

文件1:

myhookfun()

{

可以创建一个新的线程,去执行木马或后门等功能

}

文件2:

include 

<

文件1>

寻找目标模块(GetModuleHandle)

if(目标模块找到)

根据pe结构,在目标模块中定位目标函数的IAT地址(这个地址在加载时就确定了)

if 

(目标函数在IAT中的地址找到)

用我们的myhookfun()地址取代

esle 

退出

当然也可以合成一个文件,但这样分开的好处是可以实现模块化,可以分别关心各自的功能,也便于以后重用。

(三)代码实例:

.486 

.model 

flat, 

stdcall 

option 

casemap:

none 

windows.inc 

kernel32.inc 

includelib 

kernel32.lib 

user32.inc 

user32.lib 

.data 

szMsgTitle 

db 

"

IAT 

Hook"

 

szModule 

user32.dll"

szTargetFunc 

GetForegroundWindow"

szHooked 

This 

is 

in 

the 

hooked 

function 

Seems 

to 

have 

worked."

szFail 

Failed."

.data?

IATHook 

PROTO 

STDCALL 

:

DWORD, 

DWORD 

HookProc 

LPVOID 

.code 

proc 

Arg1:

invoke 

MessageBox, 

NULL, 

addr 

szHooked, 

szMsgTitle, 

MB_OK 

ret 

endp 

pDLLName:

LPVOID, 

pOldAddr:

pNewAddr:

LOCAL 

hModule:

HANDLE 

dwVirtualAddr:

dwOrigProtect:

dwDllFound:

dwFunctionFound:

;

Local 

variables 

.if 

pDLLName 

== 

NULL 

Check 

for 

pointer 

xor 

eax, 

eax 

.endif 

pOldAddr 

mov 

dwDllFound, 

dwFunctionFound, 

Initialize 

GetModuleHandle, 

Get 

main 

module'

base 

address 

hModule, 

Copy 

it 

into 

hModule 

edi, 

assume 

edi:

ptr 

IMAGE_DOS_HEADER 

Make 

edi 

act 

as 

struct 

Return 

[edi].e_magic 

!

IMAGE_DOS_SIGNATURE 

0x4D 

0x5A 

(MZ) 

add 

[edi].e_lfanew 

pNtHeader 

(IMAGE_NT_HEADERS*)((DWORD)pDosHeader 

(DWORD)pDosHeader->

e_lfanew);

IMAGE_NT_HEADERS 

[edi].Signature 

IMAGE_NT_SIGNATURE 

If 

it'

an 

invalid 

NT 

header 

0x50 

0x45 

0x00 

(PE\0\0) 

edx, 

[edi].OptionalHeader.DataDirectory[sizeof 

IMAGE_DATA_DIRECTORY].VirtualAddress 

dwVirtualAddr, 

edx 

VirtualAddress 

dwVirtualAddr 

Invalid 

virtual 

pImportHeader 

(IMAGE_IMPORT_DESCRIPTOR*)((DWORD)pDosHeader 

dwVirtualAddr);

IMAGE_IMPORT_DESCRIPTOR 

IMAGE_IMPORT_DESCRIPT

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 合同协议

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1