InlineHook】的更多相关文章

我查阅了一下相关C#方面的资料,却没有发现有提供过关于api-hook方面的资 料包括应用库由此本人编写一套inline-hook的库用于支持x64.x86上的基于在 clr的公共语言,如: c#.c+/clr.vb.net 全部都可以使用该类库改变底层api执 行结果,如我们需要制作抓包工具,或者拦截某个ActiveX对象内部调用的函数 用处广泛 有些人在制作“截包”工具时是通过使用SPI,但也可以通过本技术实现 调用MessageBox.Show("Hello world", &q…
InineHook通过修改函数指令实现,此次以内核层的PspCreateProcess()为例. 本来是想写NtCreateProcess()的Inlinehook,但是想到PCHunter对于SSDT和ShadowSSDT的检测,就想试一下PCHunter对于更底层函数的检测功能,虽然最后还是被检测出来了 /桑心.通过查看wrk的源代码,NtCreateprocess() 紧接着调用了NtCreateProcessEx(),在NtCreateProcessEx()函数中又调用了 PspCrea…
BOOL GetProcHookStatus(LPCSTR lpModuleName, LPCSTR lpProcName) { HMODULE hModule = GetModuleHandleA(lpModuleName); if (NULL == hModule) { hModule = LoadLibraryA(lpModuleName); if (NULL == hModule) ; } FARPROC farProc = GetProcAddress(hModule, lpProcN…
前言 IATHOOK局限性较大,当我们想HOOK一个普通函数,并不是API,或者IAT表里并没有这个API函数(有可能他自己LoadLibrary,自己加载的),那我们根本就从导入表中找不到这个函数,自然也就在IAT表中无法找到,InlineHook算是对IATHOOK一个升级版吧 大体思路 用JMP改变函数入口,JMP到我们自己的函数,然后又JMP回去执行刚刚的没执行完的函数. 过程无论怎么变,一定要让堆栈平衡和保留原来的寄存器,这是Hook是否成功的关键. 具体实现 创建钩子 1 DWORD…
Ring0 InLineHook 和UnHook 如果是要在R0里hook,作者的建议是InLine HOOK,毕竟SSDT HOOK 和 SHADOW SSDT HOOK比较麻烦,不好修改.目前R3的InLine HOOK 我比较喜欢的是 MINI HOOK ENGINE,但是今天要解决的是R0的InLine HOOK问题. 下面说下InLine HOOK的思路: 一 . 实现  RING0 INLINE HOOK 无论是用户态 Inline Hook 还是内核级 Inline Hook,都要…
目录 x64 InlineHook 黑魔法 为什么不能用X86 的HOOK方式? 原理:jmp + rip 进行寻址6字节方式跳转 手动InlineHook 临时地址x(找一块空内存) 计算偏移 源地址(内容 )= jmp + rip + 偏移(HOOK代码) 临时地址x(内容) = 目标地址 最终效果 代码InlineHook 例子说明 构造InlineHook Inline HOOK代码 最终运行程序的效果 x64 InlineHook 黑魔法 网上x64 InlineHook资料挺少的,我…
在上一章<驱动开发:内核LDE64引擎计算汇编长度>中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook函数挂钩其实与应用层一致,都是使用劫持执行流并跳转到我们自己的函数上来做处理,唯一的不同的是内核Hook只针对内核API函数,但由于其身处在最底层所以一旦被挂钩其整个应用层都将会受到影响,这就直接决定了在内核层挂钩的效果是应用层无法比拟的,对于安全从业者来说学会使用内核挂钩也是很重要. 挂钩的原理可以总结为,通…
在x86平台上,无论是在调试器中跟到系统DLL中时,还是反汇编某个系统DLL时,经常会发现很多API的第一条汇编指令都是mov edi, edi.根据经验来讲,C函数的汇编形式,应该是首先push ebp保存原始栈顶,然后mov ebp, esp构造新的栈帧,接下来sub esp, 0nnh分配局部变量空间,之后就是函数体了,结束时先mov esp, ebp恢复栈指针,然后pop ebp恢复栈顶指针,最后retn. push ebp ; 保存原始栈顶指针到栈 mov ebp, esp ; 获取新…
APIHook64Class.h #ifndef APIHOOK64CLASS_H_ #define APIHOOK64CLASS_H_ #include <Windows.h> class APIHook64 { private: unsigned ]; unsigned ]; FARPROC addr; public: APIHook64(); BOOL Hook(char *dllName,char *apiName,long long callfunc,BOOL bHook=TRUE)…
目录 x64下手工HOOK的方法 一丶HOOK的几种方法之远跳 1. 远跳 不影响寄存器 + 15字节方法 2.远跳 影响寄存器 + 12字节方法 3.影响寄存器,恢复寄存器 进行跳转. 4. 常用 jmp + rip方式跳转 大小6个字节 二丶Call的几种方式. 1. CALL PUSH + RET 方式 2.正常call x64下手工HOOK的方法 关于64位程序.网上HOOK方法一大堆.这里也记录一下. 了解跨平台HOOK的真相与本质. 一丶HOOK的几种方法之远跳 1. 远跳 不影响寄…