dll注入

DLL卸载

喜你入骨 提交于 2020-02-19 16:14:00
DLL卸载 DLL卸载的工作原理 实现DLL卸载 参考文献 DLL卸载的工作原理 主要来说与DLL注入类似,DLL注入是驱使目标进程调用LoadLibrary() API,DLL卸载则是驱动目标进程调用FreeLibrary() API: 将FreeLibrary() API的地址传递给CreatRemoteThread()的lpStartAddress参数 将要卸载的DLL的句柄传递给lpParameter参数 引用指数:记录DLL被调用的次数,卸载时也要卸载相同的次数。 实现DLL卸载 EjectDll.exe # include "windows.h" # include "tjhelp32.h" # include "tchar.h" # define DEF_PROC_NAME(L"notepad.exe") # define DEF_DLL_NAME (L"myhack.dll") DWORD FindProcessID ( LPCTSTR szProcessName ) { DWORD dwPID = 0xFFFFFFFF ; HANDLE hSnapShot = INVALID_HANDLE_VALUE ; PROCESSENTRY32 pe ; //获取系统快照(Snapshot) pe . dwSize = sizeof ( PROCESSENTRY32 ) ;

dll注入工具

吃可爱长大的小学妹 提交于 2020-02-09 06:45:50
今天因为测试东西,所以写了一个向别进程注入dll的小程序,代码比较简单,方法也很单一,不过有时候搞测试的时候又找不到这样的工具,所以写了一个. 使用方法: /p [进程名] /pid [进程id] /d [要注入的dll] /w [等待时间] /p 和/pid 后面可以同时跟多个参数,用,连接,例如 /p notepad.exe,explorer.exe /pid 1232,1345 /p 和 /pid 不要同时使用,不然最前面的不能被注入 下载 同时贴出源代码: #include <Windows.h> #include <tlhelp32.h> #include <stdio.h> DWORD* FindTarget( LPCTSTR lpszProcess ) { char* pSzcmd = new char [strlen(lpszProcess)+1]; strcpy(pSzcmd,lpszProcess); char* pszcmdbak = pSzcmd; char* pvlist[100]; int b = 0; pvlist[0] = 0; for (int i=0;pSzcmd[i] != 0;i++) { if (pSzcmd[i] == 0x2C) { pSzcmd[i] = 0; pvlist[b] = pSzcmd; b++; pSzcmd =

Hook学习

守給你的承諾、 提交于 2020-02-05 16:56:06
转载: 一、基本概念: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。 钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。 二、运行机制: 1、钩子链表和钩子子程: 每一个Hook都有一个与之相关联的指针列表,称之为钩子链表,由系统来维护。这个列表的指针指向指定的,应用程序定义的,被Hook子程调用的回调函数,也就是该钩子的各个处理子程。当与指定的Hook类型关联的消息发生时,系统就把这个消息传递到Hook子程。一些Hook子程可以只监视消息,或者修改消息,或者停止消息的前进,避免这些消息传递到下一个Hook子程或者目的窗口。最近安装的钩子放在链的开始,而最早安装的钩子放在最后,也就是后加入的先获得控制权。 Windows 并不要求钩子子程的卸载顺序一定得和安装顺序相反。每当有一个钩子被卸载,Windows 便释放其占用的内存,并更新整个Hook链表。如果程序安装了钩子

远程线程注入 .dll 文件

北战南征 提交于 2020-01-30 03:02:14
此文章只供学习所用,不要做坏事哟 ~ ^ _ ^ 远程线程注入 远程线程注入 是指一个进程在另一个进程中创建线程的技术。 远程线程是 另一个进程中的线程。 当前进程,下方称作进程A: 这个线程没有结束,一直都在等待命令,可以用 getchar 或 cin.get 实现。 我们的目的是: 将一个 .dll文件注入到进程A中 当 .dll文件注入后,执行一个线程 一、 .dll文件准备 1. 当我们注入 .dll文件后执行相对应的线程: 2. 线程代码是执行一个死循环语句: 3. 编译生成的 .dll文件如下所示: 二、注入 .dll文件 思路详解: 在进程A中执行 loadlibrary加载模块 打开进程A 在进程A中开辟一段内存,用于存放 .dll文件的路径 为 .dll文件分配内存,并且将路径名写入内存中 利用 Kernel32.dll 获取 LoadLibraryA地址 使用 CreateRemoteThread这个万恶之源的函数将 .dll文件注入到目标进程中 代码中每一个API的参数这里不做解释,可以百度或者MSDN查找相关资料阅读: # include <Windows.h> int main ( ) { LPCSTR lpDllPathName = "E:\\Win Learn\\远程线程\\Debug\\动态链接库.dll" ; // 1. 查找窗口 HWND

DLL注入实践

随声附和 提交于 2019-12-25 14:09:16
Windows系统大量使用dll作为组件复用,应用程序也会通过dll实现功能模块的拆分。DLL注入技术是向一个正在运行的进程插入自有DLL的过程。 Window下的代码注入 常见的Windows代码注入方法如下: 注册表注入 编译注册表中的AppInit_DLLs选项,凡是使用GUI的进程,都会读取AppInit_DLLs内容,加载这些Dll。 Windows Hook注入 使用 SetWindowsHookEx、UnHkkkWindowsHookEx 来进行,为目标进程安装钩子,在注入dll中监听目标进程消息。 远程线程注入 使用 CreateRemoteThread 函数在目标进程中创建线程,在该线程中加载注入dll。 DLL函数转发 使用伪造的dll来替换目标dll,两个dll的导出符号完全相同,在自定义DLL中,先利用函数转发器将请求转发到真实dll中,然后进行自己的一些处理。 在本篇文章中,主要介绍 Windows Hook注入 这一种方式。在具体介绍之前,先介绍下Dll的加载顺序、加载过程。 DLL加载顺序 系统在搜索加载指定DLL之前,按照如下顺序做检查: 如果同名DLL已在内存中加载,则直接使用 如果DLL在系统DLL列表中,系统直接使用已知DLL的拷贝 如果DLL依赖其他DLL,系统会按照名字搜索并加载依赖的DLL,待依赖的DLL加载完毕后再加载自身。

Dll注入技术之劫持注入

匿名 (未验证) 提交于 2019-12-03 00:37:01
Dll注入技术之劫持注入 测试环境 工具:FileCleaner2.0 和 lpk.dll 主要思路 利用Window可以先加载当前目录下的dll特性,仿造系统的LPK.DLL,让应用程序先加载我们的伪LPK.DLL,然后在我们的dll中去调用原来系统的原函数. 引用网络中的原理讲解 ●背景知识● 首先我们要了解Windows为什么可以DLL劫持呢?主要是因为Windows的资源共享机制。为了尽可能多得安排资源共享,微软建议多个应用程序共享的任何模块应该放在Windows的系统目录中,如kernel32.dll,这样能够方便找到。但是随着时间的推移,安装程序会用旧文件或者未向后兼容的新文件来替换系统目录下的文件,这样会使一些其他的应用程序无法正确执行,因此,微软改变了策略,建议应用程序将所有文件放到自己的目录中去,而不要去碰系统目录下的任何东西。 为了提供这样的功能,在Window2000开始,微软加了一个特性,强制操作系统的加载程序首先从应用程序目录中加载模块,只有当加载程序无法在应用程序目录中找到文件,才搜索其他目录。利用系统的这个特性,就可以使应用程序强制加载我们指定的DLL做一些特殊的工作。 举个例子来说吧,Windows的系统目录下有一个名为LPK.DLL的系统文件,程序运行时会在c:\Windows\system32文件夹下找到这个DLL文件并加载它。如打开记事本程序

DLL卸载

匿名 (未验证) 提交于 2019-12-03 00:33:02
DLL卸载 DLL卸载(DLL Ejection)是将强制插入进程的DLL弹出的一种技术,原理是驱使目标进程调用FreeLibrary() API,即将FreeLibrary() API的地址传递给CreateRemoteThread()的lpStartAddress参数并把要卸载的DLL的句柄传递给lpParameter参数。 注意:使用FreeLibrary() API实现DLL卸载,仅适用于卸载自己强制注入的DLL文件。PE文件直接导入的DLL文件是无法在进程运行过程中卸载的。 编写DLL卸载程序 下面编写针对之前DLL注入编写的InjectDll.exe和myhack.dll的DLL卸载程序EjectDll.exe程序。当然想卸载指定进程的指定DLL文件时只需修改代码中常量定义部分即可。 //EjectDll.cpp #include "windows.h" #include "tchar.h" #include "tlhelp32.h" //定义目标进程名和目标DLL文件名常量 #define DEF_PROC_NAME (L"notepad.exe") #define DEF_DLL_NAME (L"myhack.dll") //查看设置权限 BOOL SetPrivilege(LPCTSTR lpszPrivilege, BOOL bEnablePrivilege){

DLL注入和API Hook

匿名 (未验证) 提交于 2019-12-03 00:21:02
DLL注入和API Hook 第一篇 dll注入 一、什么是dll注入   在Windows操作系统中,运行的每一个进程都生活在自己的程序空间中,每一个进程都认为自己拥有整个机器的控制权,每个进程都认为自己拥有计算机的整个内存空间,这些假象都是操作系统创造的。理论上而言,运行在操作系统上的每一个进程之间都是互不干扰的,即每个进程都会拥有独立的地址空间。比如说进程B修改了地址为0x400000的数据,那么进程C的地址为0x400000处的数据并未随着B的修改而发生改变,并且进程C可能并不拥有地址为0x400000的内存(操作系统可能没有为进程C映射这块内存)。因此,如果某进程有一个缺陷覆盖了随机地址处的内存(这可能导致程序运行出现问题),那么这个缺陷不会影响到其他进程所使用的内存。   正是由于进程的地址空间是独立的,因此我们很难编写能够与其它进程通信或控制其它进程的应用程序。   所谓的dll注入即是让程序A强行加载你给定的a.dll并执行你给定的a.dll里面的代码。注意,你所给定的a.dll原先并不会被程序A加载,但是当你向程序A注入了a.dll后,程序A将会执行a.dll里的代码,这个时候,你的a.dll就进入了程序A的地址空间,你就可以为所欲为了。 二、什么时候需要dll注入   应用程序一般会在以下情况使用dll注入技术来完成某些功能:     1.为被注入的进程添加新的

Dll远程线程注入

匿名 (未验证) 提交于 2019-12-02 23:56:01
测试环境 ϵͳ:Windows 10 64bit 注入目标: Ps2模拟器 主要思路: 1.使用进程PID打开进程,获得句柄 2.使用进程句柄申请内存空间 3.把dll路径写入内存 4.创建远程线程,调用LoadLibrary 5.释放收尾工作或者卸载dll 主要函数: 主要代码: 1 bool InjectDll(SIZE_T szPid) 2 { 3 //1.远线程注入 4 HANDLE hProcess = OpenProcess(PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ, 5 NULL, szPid); 6 7 if (hProcess == INVALID_HANDLE_VALUE) { 8 printf("打开进程失败!"); 9 return false; 10 } 11 //2.在远程进程中申请空间 12 LPVOID pszDllName = VirtualAllocEx(hProcess, NULL, 4096, MEM_COMMIT, PAGE_EXECUTE_READWRITE); 13 //3

[翻译]红队战术: 结合直接系统调用和sRDI来绕过AV / EDR

白昼怎懂夜的黑 提交于 2019-12-01 07:48:02
English:https://outflank.nl/blog/2019/06/19/red-team-tactics-combining-direct-system-calls-and-srdi-to-bypass-av-edr/ 0x00 简介 在本文我们将介绍如何使用直接系统调用(Direct System Calls)以及配合sRDI注入来绕过R3层的行为监控。 随着安全技术的防御能力逐渐增强,另一方面,攻击技术也在不断发展,作为一个Red Team需要研究更先进的技术来绕过当下比较流行的防御和检测机制。 近期一篇恶意代码的研究报告声称,使用"直接系统调用"技术来绕过安全软件用户层Hook的恶意样本正在与日俱增。 研究报告:https://www.cyberbit.com/blog/endpoint-security/malware-mitigation-when-direct-system-calls-are-used/ 作为一名ReadTeamer,要与时俱进!! 现在轮到我们也来更新一波shellcode攻击代码了。 我们将接下来将使用这种技术证明,在不触碰磁盘的情况下绕过AV/EDR监控的用户层Hook,使用Cobalt Strike来dump LSASS.exe进程内存。 PoC代码可以在这里下载:https://github.com/outflanknl