首页
学习
活动
专区
圈层
工具
发布

利用eBPF探测Rootkit漏洞

在本文中,我们将探索控制eBPF事件的方法,并研究一个使用BPF事件捕获rootkit的案例。...一旦获得系统调用函数地址,攻击者将保存原始地址,并试图用包含恶意代码的新函数覆盖它。 攻击者如何Hook内核函数? 现在,让我们研究一下攻击者如何在真实环境下的网络攻击中劫持内核函数。...为了Hook内核函数,必须首先获得想要钩住的对象访问权。例如,它可以是保存所有系统调用函数地址的系统调用表。然后,保存函数的原始地址并覆盖它。...使用Tracee可以确定函数是否被钩住,即使钩子是在Tracee执行之前放置的。 首先创建一个在用户空间中触发的BPF程序,并在内核空间中捕获相应BPF事件。...如果它被钩住了,继续将创建一个派生事件(由内核另一个事件而创建的事件),它将提示系统调用钩住的情况,如下: 先使用libbpfgo的helper来获取系统调用表地址,并将其添加到事件内核符号依赖项中。

1.7K10

4.5 MinHook 挂钩技术

MinHook是一个轻量级的Hooking库,可以在运行时劫持函数调用。它支持钩子API函数和普通函数,并且可以运行在32位和64位Windows操作系统上。其特点包括易于使用、高性能和低内存占用。...,而MyMessageBoxA函数会将调用信息改成Hook Inject。...而UnHook函数用于禁用和释放hook,使用MH_DisableHook禁用钩子,然后使用MH_Uninitialize释放MinHook库资源。...SetWindowTextA来实现的,我们可以Hook这个函数对其进行处理后返回新标题即可,当然也可以钩挂住GetWindowTextA函数,同样可以实现标题的修改。...return TRUE; } 当读者将hook.dll注入到程序中后,我们再次点击设置标题按钮,此时标题将被修改为破解版本,如下图所示; 实现监控进程创建 要实现监控进程创建,我们可以通过MinHook库来钩住

71720
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    4.5 MinHook 挂钩技术

    MinHook是一个轻量级的Hooking库,可以在运行时劫持函数调用。它支持钩子API函数和普通函数,并且可以运行在32位和64位Windows操作系统上。其特点包括易于使用、高性能和低内存占用。...,而MyMessageBoxA函数会将调用信息改成Hook Inject。...而UnHook函数用于禁用和释放hook,使用MH_DisableHook禁用钩子,然后使用MH_Uninitialize释放MinHook库资源。...SetWindowTextA来实现的,我们可以Hook这个函数对其进行处理后返回新标题即可,当然也可以钩挂住GetWindowTextA函数,同样可以实现标题的修改。...return TRUE;}当读者将hook.dll注入到程序中后,我们再次点击设置标题按钮,此时标题将被修改为破解版本,如下图所示;图片实现监控进程创建要实现监控进程创建,我们可以通过MinHook库来钩住

    97340

    bypass Bitdefender

    ZeroBits, SIZE_T StackSize, SIZE_T MaximumStackSize, LPVOID pUnkown ); #else typedef DWORD(WINAPI...,是否被钩住了 使用disasm WriteProcessMemory找到这个API [image.png] 跟进去看看,这里是比WriteProcessMemory更为底层的NtWriteVirtualMemory...[image.png] 似乎是被钩住了,看看本来NtWriteVirtualMemory的样子 [image.png] 这里证明确实是被Bitdefender的那个atcuf64.dll钩住了,会发送到这个...[image.png] 再看VirtualAllocEx 似乎并没有被hook [image.png] 先放到一边 再看ZwCreateThreadEx,这个底层的函数同样被hook了 [image.png...hook API,包括静态检测这些方面甚至我不用混淆都能过,但是他的动态扫描内存却是非常头疼的,而Bitdenfender是hook API并且监控敏感流量,但运行过后就没扫描内存,各种杀软都有他们各自擅长的领域

    95540

    bypass Bitdefender

    ZeroBits, SIZE_T StackSize, SIZE_T MaximumStackSize, LPVOID pUnkown ); #else typedef DWORD(WINAPI...,是否被钩住了 使用disasm WriteProcessMemory找到这个API 跟进去看看,这里是比WriteProcessMemory更为底层的NtWriteVirtualMemory 跟进去看看...似乎是被钩住了,看看本来NtWriteVirtualMemory的样子 这里证明确实是被Bitdefender的那个atcuf64.dll钩住了,会发送到这个dll中那里进行检查,监控 这里我希望进行一个...再看VirtualAllocEx 似乎并没有被hook 先放到一边 再看ZwCreateThreadEx,这个底层的函数同样被hook了 同样的,我们unhook,改为原来的硬编码 4C 8B D1...,但是他的动态扫描内存却是非常头疼的,而Bitdenfender是hook API并且监控敏感流量,但运行过后就没扫描内存,各种杀软都有他们各自擅长的领域,但不可能每个方面都兼顾。

    47310

    干货 | 通过HOOK底层API实现进程隐藏

    实现原理 在正向开发中,要想做到进程遍历,往往需要使用EnumProcess或是快照CreateToolhelp32Snapshot这些函数 而这些函数的底层(ring 3),都是调用的ZwQuerySystemInformation...64位下该函数的名称已经改为RtlGetNativeSystemInformation。将hookZwQuerySystemInformation函数写在dll中,这样方便注入到任何进程中。...实现代码 hook函数 void hookZwQuerySystemInformation(){ //获取ZwQuerySystemInformation的地址 HMODULE hntdll...\n"; return status; } //调用原来的函数,第二个参数是返回请求的信息 status = ZwQuerySystemInformation(SystemInformationClass...可以看到QQ进程信息已经剔除 思考 如何将所有进程钩住? 使用全局钩子,这里我认为是两个知识点,就不继续展开说了。 ?

    2.7K70

    CC++ x32 Inline Hook 代码封装

    Hook 技术常被叫做挂钩技术,挂钩技术其实早在DOS时代就已经存在了,该技术是Windows系统用于替代DOS中断机制的具体实现,钩子的含义就是在程序还没有调用系统函数之前,钩子捕获调用消息并获得控制权...HOOK技术的实现方法比较多,常见的HOOK方法有 Inline Hook、IAT Hook、EAT Hook 这三种,钩子的应用范围非常广泛,比如输入监控、API拦截、消息捕获、改变程序执行流程等,杀毒软件也会...HOOK钩住一些特殊的API函数,起到监控系统运行状态的目的,黑客们也会通过钩子技术截获一些有价值的数据,例如键盘消息等....的地方,如下所示我们为了完成弹窗转向功能,只需要在函数开头写入jmp无条件跳转指令即可,在32位系统中JMP指令默认占用5个字节,前三条指令恰好5个字节,为了能够保持堆栈平衡,我们需要记下前三条指令,并在自己的中转函数中补齐...,析构函数用来清空并恢复钩子,Hook则是具体实现挂钩的细节,在Hook()成员函数中完成了3项工作,首先是获得了被HOOK函数的函数地址,接下来是保存了被HOOK函数的前5字节,最后是用构造好的跳转指令来修改被

    63810

    HOOK消息钩子

    钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,即钩子函数先得到控制权。...这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。...此时在钩子函数中就可以对截获的消息进行各种修改处理,甚至强行终止该消息的继续传递。 钩子的应用范围非常广泛,比如输入监控、API拦截、消息捕获、改变程序执行流程等方面。...1、杀毒软件会用Hook技术钩住一些API函数,比如钩住注册表读写函数,从而防止病毒对注册表进行写入; 2、病毒使用Hook技术有针对性的捕获键盘的输入,从而记录用户的密码等敏感信息; 3、文件加密系统通过...最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。 Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。

    1K10

    CC++ HOOK 全局 API

    全局 Hook 不一定需要用到 Dll ,比如全局的鼠标钩子、键盘钩子都是不需要 Dll 的,但是要钩住 API,就需要 Dll 的协助了,下面直接放上 Dll 的代码,注意这里使用的是 MFC DLL...) BYTE OldCodeW[5]; // 老的系统API入口代码 BYTE NewCodeW[5]; // 要跳转的API代码 (jmp xxxx) int WINAPI MyMessageBoxA...(HWND hWnd,LPCSTR lpText,LPCSTR lpCaption,UINT uType); // 我们自己的 MessageBoxA 函数 int WINAPI MyMessageBoxW...// 则从此 DLL 导出的任何调入 // MFC 的函数必须将 AFX_MANAGE_STATE 宏添加到 // 该函数的最前面。...这意味着 // 它必须作为函数中的第一个语句 // 出现,甚至先于所有对象变量声明, // 这是因为它们的构造函数可能生成 MFC // DLL 调用。

    1.3K10

    4.2 Inline Hook 挂钩技术

    HOOK函数的函数地址,接下来是保存了被HOOK函数的前5字节,最后是用构造好的跳转指令来修改被HOOK函数的前5字节的内容。...Hook():成员函数,通过将函数入口代码的前5个字节替换为JMP指令,将控制流重定向到指定的钩子函数,从而在指定的模块中钩子指定的函数。此函数返回一个BOOL,指示挂钩是否成功。...MsgHook.Hook()函数,挂钩住user32.dll模块内的MessageBoxA函数,并将该函数请求转发到MyMessageBoxA上面做处理,当此时调用MessageBoxA时读者可观察弹出提示是否为我们所期望的...lpText, LPCTSTR lpCaption, UINT uType) = MessageBoxW; // 执行自己的弹窗 int WINAPI MyMessageBoxW(HWND hWnd...,为了能更加通用,我们将其封装成MyHook类,这样后期可以直接引入项目调用了。

    75130

    4.2 Inline Hook 挂钩技术

    HOOK函数的函数地址,接下来是保存了被HOOK函数的前5字节,最后是用构造好的跳转指令来修改被HOOK函数的前5字节的内容。...Hook():成员函数,通过将函数入口代码的前5个字节替换为JMP指令,将控制流重定向到指定的钩子函数,从而在指定的模块中钩子指定的函数。此函数返回一个BOOL,指示挂钩是否成功。...()函数,挂钩住user32.dll模块内的MessageBoxA函数,并将该函数请求转发到MyMessageBoxA上面做处理,当此时调用MessageBoxA时读者可观察弹出提示是否为我们所期望的,..., LPCTSTR lpCaption, UINT uType) = MessageBoxW;// 执行自己的弹窗int WINAPI MyMessageBoxW(HWND hWnd, LPCTSTR...,为了能更加通用,我们将其封装成MyHook类,这样后期可以直接引入项目调用了。

    1.2K20

    漫漫学习路之Hook总结

    举个例子:鱼钩是用来钓鱼的,一旦鱼咬了钩,钩子就一直钩住鱼了,任凭鱼在水里怎么游,也逃不出鱼钩的控制。...最常见的就是鼠标和键盘钩子,用Hook钩子钩住鼠标、键盘,当你的鼠标、键盘有任何操作时,通过Hook就能知道他们都做了什么了,不管你干什么,都逃不过我钩子Hook的手掌心。...例如:原本该回调的函数是A函数,但是现在我自己创建一个B函数,使其回调时用的是B函数(对象)。 要实现捕获全局消息功能的钩子,是否要写在单独的DLL里面,取决于钩子的类型以及相应的作用域。...也就是如果钩子本身的作用域是全局的,那无论是放在线程还是DLL中,它都可以捕获全局消息; ---- 以上的总结是对Hook机制的理解总结,我会按以下几个方向继续描述 1....当前钩子处理结束后应把钩子信息传递给下一个钩子函数。而且最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。

    1.6K50

    疯狂!美国一公司将用直升飞机在半空接住火箭,实现重复利用

    作者 / 来自镁客星球的王饱饱 当地时间周二,美国火箭制造商火箭实验室(Rocket Lab)证实,其计划在本周五用旗下“电子号”火箭发射卫星时,再次尝试用直升机捕获火箭的一级助推器部分。...火箭实验室将尝试用一架改进型西科斯基 S-92 直升机在半空中捕获从太空返回的火箭一级助推器,并带回奥克兰基地,由工程师和技术人员进行处理和评估,看能否重复使用。...西科斯基S-92是一种双引擎直升机,能够以每小时190英里的速度飞行并携带巨大的有效载荷。...在发射两分钟以后,“电子号”的二级火箭将进行分离并继续携带卫星升空;而一级火箭则以每小时5150英里的速度,并伴随着4352华氏度的高温下降;在分离5分钟后,一级火箭将打开降落伞,并将速度逐渐下降到每小时...22英里,与此同时,西科斯基S-92将以同样的速度飞到附近,通过长绳末端的钩子钩住降落伞,从而完成回收。

    33210

    利用键盘钩子捕捉linux键盘动作,利用键盘钩子捕获Windows键盘动作

    在本程序中我们需要捕获在任意窗口上的键盘输入,这就需要采用全局钩子以便拦截整个系统的消息,而全局钩子函数必须以DLL(动态连接库)为载体进行封装,VC6中有三种形式的MFC DLL可供选择,即Regular...之后,在相应的头文件中添加宏定义和待导出函数的声明: #define DllExport __declspec(dllexport)……DllExport void WINAPI InstallLaunchEv...在本程序中我们需要捕获在任意窗口上的键盘输入,这就需要采用全局钩子以便拦截整个系统的消息,而全局钩子函数必须以DLL(动态连接库)为载体进行封装,VC6中有三种形式的MFC DLL可供选择,即Regular...之后,在相应的头文件中添加宏定义和待导出函数的声明: #define DllExport __declspec(dllexport)……DllExport void WINAPI InstallLaunchEv...下载本文示例代码 利用键盘钩子捕获Windows键盘动作利用键盘钩子捕获Windows键盘动作利用键盘钩子捕获Windows键盘动作利用键盘钩子捕获Windows键盘动作利用键盘钩子捕获Windows键盘动作利用键盘钩子捕获

    4K10

    1.12 进程注入ShellCode套接字

    读者需要理解,套接字(socket)是计算机网络中一种特殊的文件,是网络通信中的一种技术,用于实现进程之间的通信和网络中数据的传输。在网络通信中,套接字就像一条传送数据的管道,负责数据的传输和接收。...而socket(套接字)是在网络通信中最常用的一种通信协议,它定义了一组用于网络通信的API。通过使用socket,程序员可以在不同的计算机之间进行通信。读者可以将两者理解为一个意思。...1.12.1 读入Kernel32模块基址 为了能让读者更清晰的认识功能实现细节,首先笔者先来实现一个简单的读取特定模块内函数的入口地址,并输出该模块地址的功能,需要注意的是,在之前的文章中笔者已经介绍了这种读取技术...MESSAGEBOX:MessageBox函数的函数指针类型,用于创建、显示和操作消息框。WINAPI调用约定指定了如何传递函数参数和清理堆栈。...这些函数与动态链接库、套接字通信、网络编程、创建进程等有关。

    52140

    1.12 进程注入ShellCode套接字

    读者需要理解,套接字(socket)是计算机网络中一种特殊的文件,是网络通信中的一种技术,用于实现进程之间的通信和网络中数据的传输。在网络通信中,套接字就像一条传送数据的管道,负责数据的传输和接收。...而socket(套接字)是在网络通信中最常用的一种通信协议,它定义了一组用于网络通信的API。通过使用socket,程序员可以在不同的计算机之间进行通信。读者可以将两者理解为一个意思。...1.12.1 读入Kernel32模块基址为了能让读者更清晰的认识功能实现细节,首先笔者先来实现一个简单的读取特定模块内函数的入口地址,并输出该模块地址的功能,需要注意的是,在之前的文章中笔者已经介绍了这种读取技术...MESSAGEBOX:MessageBox函数的函数指针类型,用于创建、显示和操作消息框。WINAPI调用约定指定了如何传递函数参数和清理堆栈。...这些函数与动态链接库、套接字通信、网络编程、创建进程等有关。

    68140

    一种不会导致资源泄露的“终止”线程的方法

    (转载请指明出于breaksoftware的csdn博客) static VOID OtherPartFun() // 第三方提供函数,超级耗时,不如来个极限,死循环 { int nIndex...,用于在工作线程中执行那个耗时的第三方提供函数 static DWORD WINAPI ThreadRoutine(LPVOID lpParam) { OtherPartFun(); return...我们刻意造成该线程产生异常,同时在函数中捕获该异常,以使得线程可以体面的退出。         以下我详细讲解下这个方案。 1 线程函数加上SEH捕获异常。...static DWORD WINAPI ThreadRoutine(LPVOID lpParam) { __try { OtherPartFun(); // 第三方的耗时函数,...可以发现,我们线程“体面”的退出了。         其实这个方案也是存在不完善的地方的。比如我们线程产生了死锁等,线程将进入内核态等待。这个时候我们获取的EIP是客户态函数的着陆点。

    78220

    JavaScript中的钩子(钩子机制钩子函数hook)是什么?

    说白了,钩子函数是在一个事件触发的时候,在系统级捕获到了他,然后做一些操作。...一段用以处理系统消息的程序,用以处理系统消息的程序,是说钩子函数是用于处理系统消息的 两个特点: 是个函数,且系统消息触发时被系统调用 非用户自己触发 回调函数与钩子 回调函数是你留了个函数,但是这个函数不是立即执行...当事件触发时,自动执行函数,而非必须执行。 概念:作为参数传给另一个 JavaScript 函数的函数。 回调函数确保一段代码执行完毕之后再执行另一段代码的方式。...在某种意义上,回调函数做的处理过程跟钩子函数中要调用调方法一样 但是!!!钩子函数一般是由事件发生者提供的。直白了说,它留下一个钩子,这个钩子的作用就是钩住你的回调方法。...或者,你可以认为钩子函数就是回调函数。 钩子函数一般是在某个框架里面的叫法,是这个框架在生命周期的某个阶段触发的回调函数。 比如Vue/React里面就存在生命周期函数。

    3.4K10

    socket模型处理多个客户端

    最近学完了简单的socket编程,发现其实socket的网络编程其实并没有什么难度,只是简单的函数调用,记住客户端与服务端的步骤,写起来基本没有什么问题。...在服务器程序的设计中,一个服务器不可能只相应一个客户端的链接,为了响应多个客户端的链接,需要使用多线程的方式,每当有一个客户端连接进来,我们就开辟一个线程,用来处理双方的交互(主要是利用recv或者recvfrom...用于收发信息),由于但是在网络中可能出现这样一种情况:由于处理比较复杂,下一条信息到来之后,上一条信息的处理还没有完成,这样信息太多了之后系统的缓冲占满之后可能会发生丢包的现象,所以为了解决这个问题,需要另外再开一个线程...: 全局变量: DWORD WINAPI AcceptThread(LPVOID lpParameter); DWORD WINAPI RecvThread(LPVOID lpParameter);...,线程是非常耗资源的,所以为了解决这些问题就提出了异步的I/O模型,它们解决了这些问题,由系统管理套接字,不要要人为的一个个管理,同时不需要开辟多个线程来处理与客户端的连接,我们可以将线程主要用于处理客户端的请求上

    2K20

    WinAPI 极简教程:超简单的 Windows 接口入门

    前言: 本篇博客带大家介绍一下winAPI函数,为接下来给大家带来的贪吃蛇小游戏做铺垫 正文: winAPI介绍 在 Windows 操作系统的生态中,WinAPI(Windows Application...它并非单一的函数或工具,而是微软为开发者提供的一套庞大、标准化的底层接口集合,涵盖窗口管理、文件操作、进程控制、图形渲染、网络通信等所有 Windows 系统级功能的调用入口。...本篇文章我们主要了解一下winAPI关于控制台程序的函数 控制台程序 1....,默认通常为 25% bVisible:控制光标是否显示在控制台中 而想真正的修改成功一个光标的信息,就需要这个函数来配合:SetConsoleCursorInfo () 6....,也就是说这两个函数都是在干同一件事情的GetConsoleCursorInfo() 函数得到光标信息以后,通过CONSOLE_CURSOR_INFO 结构体修改它,而 SetConsoleCursorInfo

    11810
    领券