必备绝技--Hook大法(上).docVIP

  • 2
  • 0
  • 约 20页
  • 2017-08-18 发布于重庆
  • 举报
必备绝技--Hook大法(上)

标 题: 【原创】必备绝技--Hook大法( 上 ) 【作者声明】:?这没有什么新鲜东西,其内容全部来自于前辈,姑且当作学习笔记。文字用自己的话写出,四段代码均出自别人(知道作者的,以注明),但短小精悍,就写在一起了,便于察看。欢迎指正。 【详细过程】 ??hook概念:是一种通过更改程序的数据结构或代码结构从而改变程序运行路线的一种方法。(纯属本人自己观点)? ??????分类:从上面的概念来看,一种是改变程序的数据结构,如:IAT-hook,Dll-inject及Direct?Kernel?Object?Manipulation(DKOM)。一种是Inline?Function?Hooking。 ??????用途:现在这种方法普遍运用于各类程序中,如加壳,杀软,病毒,Rootkits等等。 ??本文从难以程度上主要分三块详细介绍:一.用户模式Hook:IAT-hook,Dll-inject二.内核模式Hook:ssdt-hook,idt-hook,int?2e/sysenter-hook三.Inline?Function?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格式的详细知识可参见:/showthread.php?t=31840及加密与解密。 ??(二)大体框架:这里用伪码给个一般框架,以便有个大体印象。 ??文件1:myhookfun() ????????{ ?????????????可以创建一个新的线程,去执行木马或后门等功能 ????????} ??文件2:?include?文件1 ?????寻找目标模块(GetModuleHandle) ????if(目标模块找到) ???????根据pe结构,在目标模块中定位目标函数的IAT地址(这个地址在加载时就确定了) ???????if?(目标函数在IAT中的地址找到) ???????????用我们的myhookfun()地址取代 ???????esle?退出 ????esle?退出 ???? ??当然也可以合成一个文件,但这样分开的好处是可以实现模块化,可以分别关心各自的功能,也便于以后重用。 ??(三)代码实例: ??????.486? ??????.model?flat,?stdcall? ??????option?casemap:none? ?? ??include???windows.inc? ??include???kernel32.inc? ??includelib???kernel32.lib?牋include牋爑ser32.inc?牋includelib牋爑ser32.lib?牋 牋牋牋.data?牋szMsgTitle牋db牋?IAT燞ook,??牋szModule牋燿b牋?user32.dll,??牋szTargetFunc牋燿b牋?GetForegroundWindow,??牋szHooked牋燿b牋?This爄s爄n爐he爃ooked爁unction?燬eems爐o爃ave?worked.,??牋szFail牋牋燿b牋?Failed.,??牋 牋牋牋.data??牋 牋IATHook牋燩ROTO牋燬TDCALL?DWORD,?DWORD,?DWORD?牋HookProc燩ROTO牋燬TDCALL?LPVOID?牋 牋牋牋.code?牋HookProc牋爌roc牋燗rg1:LPVOID?牋牋牋牋牋牋invoke牋燤essageBox,燦ULL,燼ddr爏zHooked,?addr爏zMsgTitle,燤B_OK?牋牋牋牋牋牋ret?牋HookProc牋爀ndp?牋 牋IATHook牋爌roc牋爌

文档评论(0)

1亿VIP精品文档

相关文档