---- DLL注入 前言 继续学习《逆向工程核心原理》,本篇笔记是第三部分:DLL注入,主要包括三种DLL注入、DLL卸载、修改PE、代码注入等内容 一、windows消息钩取 1、钩子 钩子(Hook...DLL文件强制注入相应进程 3、键盘消息钩取 如下图所示: KeyHook.dll是个含有钩子过程的DLL文件 HookMain.exe是个加载KeyHook.dll,并使用SetWindowsHookEx...窗口 根据上一小节的地址10001020找到钩子 二、DLL注入 DLL注入:向运行中的其他进程强制插入特定的DLL文件,如下图所示 原理:从外部促使目标进程调用LoadLibrary...\n", dwPID, DEF_DLL_NAME); return 0; } 四、通过修改PE加载DLL 上面是在运行的进程中注入DLL 本节直接修改目标程序的可执行文件,使其在运行时强制加载...代码注入(Code Injection):向目标进程插入独立运行代码并使之运行,一般调用CreateRemoteThread() API 比起DLL注入 内存占用更少 难以查找痕迹 不需要另外的
什么是DLL注入 由于注入的 dll 可以操纵正在运行的进程,因此它为我们提供了向应用程序添加我们想要的任何功能的绝佳机会。这通常在游戏黑客或当您想要对某些东西进行逆向工程并想要更多控制时完成。...这篇文章的目的 这篇文章将介绍如何使用 LoadLibrary 执行基本的 dll 注入,然后深入探讨 LoadLibrary 如何在幕后工作,并完成手动映射和将 DLL 注入进程的步骤。...对于我们的注入器,我们可以只使用PROCESS_ALL_ACCESS访问权限。 您可以通过任务管理器通过转到详细信息并查看进程旁边的 PID 来找到进程 ID,但这需要时间并且不是我们想要的方式。...然而,这对我们的最终目标不起作用,因为我们想使用此代码将 dll 注入另一个进程。由于我们将此 dll 注入另一个进程,因此该进程将不得不进行导入解析。...dll 的任何进程中完成,但开始我们只是要像我们的注入器是我们注入的进程一样行事。
0x0 技术简介 实现环境 系统:Windows 7 64bit 工具:VS+WDK 驱动注入 我这里驱动注入的技术是:采用驱动向目标进程插入APC执行LdrLoadDll函数加载Dll模块。...可以注入64位Dll到64位进程或注入32位Dll到32位进程。暂时没有实现跨位数。 APC(异步过程调用)是一种内核机制,它提供了一种在特定线程上下文中执行定制例程的方法。...apc主要用于系统级组件,用于执行各种任务(例如促进I/O完成),但也可以用于DLL注入目的。...0x1 主要思路 R3:加载驱动,打开驱动,控制驱动(发送需要注入的进程Pid和要注入的Dll模块路径给驱动)。 R0:1,通过进程Pid获取EProcess并判断是否为64位进程。...ShellCode,查找可用线程插入执行代码APC,插入警醒线程APC 0x2 主要代码 整体流程部分 初始化ShellCode 查找执行线程 插入APC代码部分 0x3 实现效果 注入x64dll到
0x00前言 RT,最近正在学习DLL注入。尝试写篇总结 0x01正文 什么是远程线程注入? 远程线程注入是指一个进程在另一个进程中创建线程的技术。...dll远程线程注入的核心是CreateRemoteThread函数,利用该函数可以在个进程空间中创建一个线程。...但是由于Windows引入了基址随机化ASLR安全机制,每次开机or在不同的系统中,系统DLL的加载基址都不一样,也就是说DLL的导出函数地址也都不一样。...LoadLibrary的地址,最后利用CreateRemoteThread函数创建线程并注入进目标的进程当中,最后等待线程结束后释放DLL空间并关闭线程。...这样就实现了远程线程注入DLL。
: InjectProc InjectProc-进程注入技术,下载地址: https://github.com/secrary/InjectProc/releases 软件使用: Process Explorer...在Windows系统中通过任务管理器可以管理查看电脑系统所使用的情况,包括各项进程及CPU的使用情况,还可以查看内存、网卡等使用情况,但系统自带的任务管理器功能相对不够强大,而Process Explorer...则可以代替系统自带的任务管理器,它能够方便地为你管理各项程序进程 软件下载地址: https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer...随后构造恶意DLL文件并劫持的DLL放到该应用程序目录下,重新启动该应用程序,检查是否劫持成功 注入演示 首先使用msfvenom生成dll msfvenom -p windows/x64/meterpreter...DLL劫持的基本原理以及DLL劫持的检测方式,最后我们介绍了DLL注入的方法~
在APC机制中,当某些事件发生时(例如文件IO,网络IO或定时器触发),这些事件将被操作系统添加到一个APC队列中,该队列绑定到执行线程。...APC机制与DLL注入的关系在于,可以使用APC机制将某些代码注入到另一个进程中,并由该进程执行。...在DLL注入中,可以使用QueueUserAPC函数向目标进程内的线程的APC队列中插入一个我们定义的函数的指针,使该函数在目标线程执行时运行,从而实现DLL注入的目的。...APC一部注入原理可以总结为如下几个步骤,每个线程在可被唤醒时在其APC链中的函数将有机会执行被执行,每一个线程都具有一个APC链,那么只要在APC链中添加一个APC,就可以完成我们所需要的DLL注入的功能...,为每个线程添加一个APC函数,这样增加了注入成功的机会.利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,通过APC注入的流程步骤大致如下
在APC机制中,当某些事件发生时(例如文件IO,网络IO或定时器触发),这些事件将被操作系统添加到一个APC队列中,该队列绑定到执行线程。...APC机制与DLL注入的关系在于,可以使用APC机制将某些代码注入到另一个进程中,并由该进程执行。...但读者需要注意,注入函数必须是一个简短的、没有长时间阻塞的代码块,通常会加载DLL或者在目标线程中打开其他进程。...在DLL注入中,可以使用QueueUserAPC函数向目标进程内的线程的APC队列中插入一个我们定义的函数的指针,使该函数在目标线程执行时运行,从而实现DLL注入的目的。...利用当线程被唤醒时APC中的注册函数会被执行的机制,并以此去执行我们的DLL加载代码,进而完成DLL注入的目的,通过APC注入的流程步骤大致如下; 1.当进程里某个线程执行到SleepEx()或者WaitForSingleObjectEx
动态链接库注入技术是一种特殊的技术,它允许在运行的进程中注入DLL动态链接库,从而改变目标进程的行为。...DLL注入的实现方式有许多,典型的实现方式为远程线程注入,该注入方式的注入原理是利用了Windows系统中提供的CreateRemoteThread()这个API函数,该函数第四个参数是准备运行的线程,...远程线程注入的实现可以总结为如下流程; 1.OpenProcess 打开进程获取进程句柄 2.VirtualAllocEx 在目标进程申请一块内存 3.WriteProcessMemory 将注入DLL...在DLL注入中,我们可以使用该函数在目标进程的上下文中创建一个新线程,从而使我们的DLL代码被加载和运行。...在DLL注入中,我们可以使用它来在指定的进程上下文中执行我们的DLL代码,使其被加载和运行。
进程注入是将任意代码写入已经运行的进程中并执行,可以用来逃避检测对目标目标进程中的敏感信息进行读/写/执行访问,还可以更改该进程的行为。...通过LoadLibrary注入DLL .dll,动态链接库英文为DLL,是Dynamic Link Library的缩写。DLL是一个包含可由多个程序,同时使用的代码和数据的库。...那么Dll从一开始就可以映射到进程的内存中并执行,所以我们可以利用Dll把shell注入到进程中。...构造注入程序 LoadLibrary是Windows API中的一个函数,它可以将一个DLL加载到调用进程和调用的内存中DLLMain(将指定的模块加载到调用进程的地址空间中) 使用语法 C ++ HMODULE...使用解决方案资源管理器窗口添加/管理文件 // 2. 使用团队资源管理器窗口连接到源代码管理 // 3. 使用输出窗口查看生成输出和其他消息 // 4.
动态链接库注入技术是一种特殊的技术,它允许在运行的进程中注入DLL动态链接库,从而改变目标进程的行为。...DLL注入的实现方式有许多,典型的实现方式为远程线程注入,该注入方式的注入原理是利用了Windows系统中提供的CreateRemoteThread()这个API函数,该函数第四个参数是准备运行的线程,...远程线程注入的实现可以总结为如下流程;1.OpenProcess 打开进程获取进程句柄2.VirtualAllocEx 在目标进程申请一块内存3.WriteProcessMemory 将注入DLL路径写出到内存中...在DLL注入中,我们可以使用该函数在目标进程的上下文中创建一个新线程,从而使我们的DLL代码被加载和运行。...在DLL注入中,我们可以使用它来在指定的进程上下文中执行我们的DLL代码,使其被加载和运行。
SetWindowHookEx 是Windows系统的一个函数,可用于让一个应用程序安装全局钩子,但读者需要格外注意该方法安装的钩子会由操作系统注入到所有可执行进程内,虽然该注入方式可以用于绕过游戏保护实现注入...,但由于其属于全局注入所以所有的进程都会受到影响,而如果想要解决这个问题,则需要在DllMain()也就是动态链接库开头位置进行判断,如果是我们所需操作的进程则执行该DLL模块内的功能,如果不是则自动跳过不执行任何操作即可实现指定进程的注入方式...include #include #include // 指定全局变量 HHOOK global_Hook; // 判断是否是需要注入的进程...hModuleSnap) { // 先拿到自身进程名称 BOOL bRet = Module32First(hModuleSnap, &me32); // 对比如果是需要注入进程...,可将任意DLL进行注入 extern "C" __declspec(dllexport) void SetHook() { global_Hook = SetWindowsHookEx(WH_CBT
SetWindowHookEx 是Windows系统的一个函数,可用于让一个应用程序安装全局钩子,但读者需要格外注意该方法安装的钩子会由操作系统注入到所有可执行进程内,虽然该注入方式可以用于绕过游戏保护实现注入...,但由于其属于全局注入所以所有的进程都会受到影响,而如果想要解决这个问题,则需要在DllMain()也就是动态链接库开头位置进行判断,如果是我们所需操作的进程则执行该DLL模块内的功能,如果不是则自动跳过不执行任何操作即可实现指定进程的注入方式...iostream>#include #include #include // 指定全局变量HHOOK global_Hook;// 判断是否是需要注入的进程...= hModuleSnap) { // 先拿到自身进程名称 BOOL bRet = Module32First(hModuleSnap, &me32); // 对比如果是需要注入进程...,可将任意DLL进行注入extern "C" __declspec(dllexport) void SetHook(){ global_Hook = SetWindowsHookEx(WH_CBT,
由于DLL注入在Session 0中的注入机制不同于在用户会话中的注入机制,因此需要特别的考虑和处理。...如果需要执行DLL注入,必须使用过度级别安全机制解决Session 0上下文问题,并且在设计安全方案时,必须考虑Session 0和Session 1之间的区别。...在之前的远程线程注入章节中,我们通过使用CreateRemoteThread()这个函数来完成线程注入,此方式可以注入普通的进程,但却无法注入到系统进程中,因为系统进程是处在SESSION0高权限级别的会话层...由于该内核函数并未被导出,所以我们必须找到该函数的原型定义,并通过GetProcAddress获取到ntdll.dll模块下的ZwCreateThreadEx的函数地址,并通过ZwCreateThreadEx...具备了上述基本条件那么注入代码的事项将变得非常容易,如下代码是这个注入程序的完整实现流程,读者可自行测试注入效果; #include #include #include
内存注入远远领先于时代,并允许所有 APT 等轻而易举地通过 AV。2015 年,Dan Staples ( @_dismantl ) 发布了RDI的重要更新,称为“改进的反射 DLL 注入”。...因此,您需要访问两端(注入器和被注入者)的源代码,或者使用已经支持 RDI 的工具。 与 shellcode 注入相比,RDI 需要大量代码来加载。这会影响隐身性并使stagers更容易签名/监控。...我们现在有一个基本的 PE 加载器作为 shellcode。...完成后,blob 看起来像这样: image.png 当从引导程序的顶部开始执行时,一般流程如下所示: 获取内存中的当前位置(引导程序) 计算和设置寄存器(引导程序) 使用目标 DLL 的函数哈希、...用例 #1 – 隐秘的持久性 使用服务器端 Python 代码 (sRDI) 将 RAT 转换为 shellcode 将 shellcode 写入注册表 设置计划任务以执行基本加载程序 DLL Loader
总览 注入 OpenProcess() VirtualAllocEx() WriteProcessMemory() GetProcessAddress() -> LoadLibrary CreateRemoteThread...Module32NextW OpenProcess() GetProcessAddress -> FreeLibrary() CreateRemoteThread() -> FreeLibrary() 注入...bFound) { AfxMessageBox(L"找到到你要卸载的dll"); return FALSE; } hProcess = OpenProcess( PROCESS_ALL_ACCESS
首先简单说一下实现功能:当目标应用程序运行中的状态时,将DLL注入到该目标应用程序内存并执行DLL中的代码。 1....(;;){ Sleep(1000); printf("线程注入OK......这就是我们目标应用的具体功能 3.进行远程线程注入 首先说一下几个步骤 1.获取进程句柄 2.计算dll名字 3.给目标进程申请空间 4.拷贝dll进去 5.获取模块地址 6.获取函数地址...7.创建远程线程 加载dll 8.关闭句柄 加载DLL的话,肯定是要用到LoadLibrary函数进行加载,而这个函数在kernel32.dll这个dll里面。...当我们运行我们的远程线程注入后,可以看到目标进程执行了我们注入进去的DLL代码,为此注入成功! 当然在权限维持的时候,有的DLL被写成后门注入进去,这样更不易发现。
由于DLL注入在Session 0中的注入机制不同于在用户会话中的注入机制,因此需要特别的考虑和处理。...如果需要执行DLL注入,必须使用过度级别安全机制解决Session 0上下文问题,并且在设计安全方案时,必须考虑Session 0和Session 1之间的区别。...在之前的远程线程注入章节中,我们通过使用CreateRemoteThread()这个函数来完成线程注入,此方式可以注入普通的进程,但却无法注入到系统进程中,因为系统进程是处在SESSION0高权限级别的会话层...由于该内核函数并未被导出,所以我们必须找到该函数的原型定义,并通过GetProcAddress获取到ntdll.dll模块下的ZwCreateThreadEx的函数地址,并通过ZwCreateThreadEx...具备了上述基本条件那么注入代码的事项将变得非常容易,如下代码是这个注入程序的完整实现流程,读者可自行测试注入效果;#include #include #include
: case DLL_PROCESS_DETACH: break; } return TRUE; } 注入器代码: #include "stdafx.h" #include...64 位注入,参考 int main() { BOOL bFlag = FALSE; char *szDllName = "MSGDLL.dll"; //bFlag...那么我这个进程应该权限就都够了, //看来不行,必须程序提权 //我提权了之后,发现还是不行,之后上网查了 //发现是32位注入到...//在我完成了之后,我把EnablePrivileges这行注释掉了,但仍然注入成功,看来我用管理员权限运行VS2015之后就够了 //然后我又发现了一个问题,就是对同一个进程...DWORD dwErr = GetLastError(); return ; } 注入器 //DLL的代码,用DLL方式生成一下,拉到前面EXE目录,或者系统目录都行,跟前面代码中DLL
将后者置为 1,然后在前者的值输入待注入 DLL 名称(多个 DLL 用 Space 分隔,第一个可以带路径,后边的不行)。...优点:方法简单 缺点:只有引用了 User32.dll 的才会被注入,而且被注入进程一启动就会注入,结束才会反注入,注入周期不可控 使用 Windows Hook 注入 核心方法: SetWindowsHookEx...优点:准确的控制注入周期 缺点:依赖消息循环,没消息循环的线程没法注入 远程线程注入(大杀器) 核心方法: CreateRemoteThread VirtualAllocEx VirtualFreeEx...优点:可以为所欲为 缺点:写起来有点复杂 同名 DLL 替换 如果已知一个程序必然载入一个 DLL ,则可以做一个同名 DLL 然后将方法跟原 DLL 保持一致,在方法调用中间做点其他手脚。...这种如果程序校验 DLL ,就没戏。或者直接修改程序的 EXE 的导入段,这就要求对 PE 结构非常熟悉。 作为调试器注入 核心编程没说的太细,看起来要写 CPU 代码,没太细看。
这种技术就是DLL远线程注入技术。 我们的病毒程序会强制给目标进程创建一个线程,线程的任务是:将我们的病毒木马DLL加载进目标进程,让目标进程执行DLL代码。 那么,代码如何写呢?...[pot60avr6a.png] 主函数中调用我们的dll注入攻击函数dll_inject,我们用来攻击一下PC版的微信,查看用户管理器,得知微信的PID为17544,以第一个参数传进去,第二个参数即我们要注入的...[uuuutnpsbb.png] 编译之后,得到我们的dll注入主程序。...[5h7ubrofcm.png] 双击运行,看一下攻击的结果: 可以看到,微信进程已经被成功注入了我们的病毒DLL文件了,也弹窗了,弹窗就证明我们的病毒DLL被微信加载成功。...3)远程进程加载成功我们写的病毒DLL之后,就表示我们的DLL已经成功注入远程进程中了,也可以说是感染到了远程进程了。