问: 我已经成功地使用以下sed命令在Linux中搜索/替换文本: sed -i 's/old_string/new_string/g' /path/to/file 然而,当我在Mac OS X上尝试时...答: 在 Linux 系统上使用命令 man sed 查看手册, NAME sed - stream editor for filtering and transforming...在 MacOS 系统上使用命令 man sed 查看手册, NAME sed – stream editor 简介是流编辑器。...可见 -i 后面是必选参数 extension,不写上扩展名参数就会报错,于是命令执行失败。...如果要同一个命令在两种系统上都成功执行,可写成: sed -i'' -e 's/old_string/new_string/g' /path/to/file #或者 sed -i'.bak' -e 's
大家好,又见面了,我是你们的朋友全栈君。 DLL注入可用于编写外挂和病毒不易发现。...hPro) { MessageBox("打开进程失败", "警告", 0); return; } //在该进程申请内存,用来存放path数据 LPVOID dllAddr = VirtualAllocEx...dllAddr) { MessageBox("获取地址失败", "警告", 0); CloseHandle(hPro); return; } //在申请的内存中写入path DWORD...GetLastError(); WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread); CloseHandle(hPro); } 这个只适用于...xp系统,win7系统不可以随便CreateRemoteThread了,返回值一直为NULL 具体方法引用看雪:Vista&Win7下CreateRemoteThread应用的若干问题和解决方案 Dll
返回值: 成功:返回进程打开句柄 失败:返回NULL ---- VirtualAllocEx 作用: 在指定进程的虚拟地址空间内保留、提交或更改内存的状态。...返回值: 成功:返回分配页面基址 失败:返回NULL ---- WriteProcessMemory 作用: 在指定的进程中将数据写入内存区域,要写入的整个区域必须可访问,否则操作失败。...返回值: 成功:返回不为0 失败:返回0 ---- CreateRemoteThread 作用: 在另一个进程的虚拟地址空间中创建运行的线程。...lpStartAddress: 指向由线程执行类型为LPTHREAD_START_ROUTINE的应用程序定义的函数指针,并表示远程进程中线程的起始地址,该函数必须存在于远程进程中。...这里使用到一个函数ZwCreateThreadEx,实际上CreateRemoteThread最终是通过调用ZwCreateThreadEx实现远线程创建的,ZwCreateThreadEx更为底层。
一、前言 在Windows XP,Windows Server 2003以及更早的版本中,第一个登录的用户以及Windows的所有服务都运行在Session 0上,这样的做法导致用户使用的应用程序可能会利用...Windows的服务程序提升自身的权限,为此,在后续的Windows版本中,引入了一种隔离机制,普通应用程序已经不再session 0中运行。...和传统的CreateRemoteThread函数实现的DLL远线程注入的唯一一个区别就是,我们调用的是更为底层的ZwCreateThreadEx来创建线程, 虽然CreateRemoteThread函数到底层也是调用...三、代码实现 ZwCreateThreadEx在 ntdll.dll 中并没有声明,所以我们需要使用 GetProcAddress 从 ntdll.dll 中获取该函数的导出地址。...,然后把我们的DLL写入到内存空间中,最后创建线程等待执行。
假如,我们可以使应用程序在加载dll时加载我们自己写的DLL,那么我们就可以在我们的DLL中做任何我们想做的事情,可以访问进程的任何私有地址空间。...不过这样的注入方式只适用于那些GUI程序,因为需要依赖程序是否映射User32.dll,对于那些终端CUI应用程序则没法使用。...幸运的是,微软直接给我们提供了这样的API,那就是CreateRemoteThread函数,它使得我们可以在别的程序中创建一个新的线程,函数原型如下: HANDLE WINAPI CreateRemoteThread...实际上我们可以让lpStartAddress参数直接就是LoadLibrary函数的地址,这样就不用担心线程怎么去执行了。...由于每一个进程在加载Kernel32.dll时,基本上都被映射到了同一个地址。
远程线程注入是指一个进程在另一个进程中创建线程的技术。...在另一个进程的虚拟地址空间中创建运行的线程 HANDLE CreateRemoteThread( [in] HANDLE hProcess, [in] LPSECURITY_ATTRIBUTES...lstrcmp(p32.szExeFile , lpProcessName)) {//szExeFile为进程的可执行文件的名称 processId = p32.th32ProcessID...CreateRemoteThread函数,利用该函数可以在个进程空间中创建一个线程。...这样就可以成功在目标的空间中利用CreateRemoteThread创建一个多线程。
VS2019 什么是session 0 在Windows XP,Windows Server 2003以及更早的版本中,第一个登录的用户以及Windows的所有服务都运行在Session 0上。...这样做危险的地方是,用户使用的应用程序可能会利用Windows的服务程序提升自己的权限。 后续版本的windows,普通应用程序已经不再session 0中运行 ?...思路 由于SESSION 0隔离机制,导致传统远程线程注入系统服务进程失败。...和传统的 CreateRemoteThread 函数实现的远线程注入 DLL 的唯一一个区别就是,我们调用的是更为底层的ZwCreateThreadEx来创建线程, 虽然CreateRemoteThread...CloseHandle(hRemoteThread); CloseHandle(hprocess); FreeLibrary(hNtdll); return TRUE; } 执行结果
//(…) //若函数无法找到模块,则函数执行失败。当指定路径时,必须使用反斜线(\)而不是斜线(/)。...()函数在目标/远程进程地址空间中为DLL文件路径开辟内存空间 4.调用WriteProcessMemory()函数在之前所分配的内存空间中写入DLL文件路径 5.调用CreateRemoteThread...,“指向将由线程执行的,类型为‘LPTHREAD_START_ROUTINE’的应用程序定义函数,并且该指针代表远程进程中线程的起始地址”。...APC函数的指针,该函数在指定线程执行一个可唤醒等待操作的时候被调用。...由于线程已被挂起,所以我们可以改变EIP/RIP寄存器的值,控制线程在不同的路径上(我们的代码区域)继续执行。具体代码如下所示。
hNewRemoteThread){cout << "CreateRemoteThread 失败:" << GetLastError() << endl;} // 等待线程句柄返回 WaitForSingleObject...+ , ); //在目标进程内创建线程,线程的入口函数就是LoadLibraryA, 参数就是Dll名字 HANDLE hThread = CreateRemoteThread...,为什么我在我这个进程中得到的LoadLibrary在远程进程中也可以用 //答案就是,系统DLL在各个进程中的映射地址都是一样的,不过具体情况具体分析,至少这个函数看来是一样的...来CreateRemoteThread, 另外DLL也应该是64位 32位进程,就得用32位的EXE来CreateRemoteThread, 另外DLL也应该是32位 把CreateRemoteThread...的入口点函数设为LoadLibraryA(W),线程的那个参数设为DLL路径指针(在目标进程中,所以得把DLL路径拷到目标进程 中, 用VirtualAllocEx在目标进程中分配块空间,然后WriteProcessMemory
这次你不用编写一个独立的DLL而是直接复制你的代码到远程进程(WriteProcessMemory)并用CreateRemoteThread执行之。...让我们看一下CreateRemoteThread的声明: HANDLE CreateRemoteThread( HANDLE hProcess, // handle...这是要在其中创建线程的进程的句柄。 ●CreateRemoteThread的lpStartAddress参数必须指向远程进程的地址空间中的函数。...如果你需要调用其他库中的函数,在注入的代码中使用LoadLibrary和GetProcessAddress强制加载。...编译器会把所有的静态字符串放在可执行文件的“.data”段,而仅仅在代码中保留它们的引用(即指针)。这样,远程进程中的ThreadFunc就会执行不存在的内存数据(至少没有在它自己的内存空间中)。
全局钩子:针对整个系统基于消息的应用。该钩子需要dll文件,在dll中实现对应的钩子函数。...反之如果执行失败返回NULL。 DLL实现代码: // dllmain.cpp : 定义 DLL 应用程序的入口点。...4.lpStartAddress:指向要由线程执行的LPTHREAD_START_ROUTINE 类型的应用程序定义函数的指针,表示远程进程中线程的起始地址。该函数必须存在于远程进程中。...0x03 APC Inject •线程在进程内执行代码•线程可以利用 APC 队列异步执行代码•每个线程都有一个队列来存储所有的 APC•应用程序可以将 APC 排队到给定的线程(取决于权限)•当一个线程被调度时...,指向应用程序提供的 APC 函数的指针,当指定的线程执行可警报的等待操作时将调用该函数。
上一篇文章地址《DLL远程线程注入》 0x00 前言 传统的远程线程技术一般是向普通用户进程注入线程。...突破SESSION0隔离的远程线程注入与传统的CreateRemoteThread实现DLL远程线程注入相比区别在与是用更为底层的ZwCreateEx函数来创建的。...0x01前置知识 session0介绍 在Windows XP、Windows Server 2003,以及更老版本的Windows操作系统中,服务和应用程序使用相同的会话(Session)运行,而这个会话是由第一个登录到控制台的用户启动的...该会话就叫做Session 0,如下图所示,在Windows Vista之前,Session 0不仅包含服务,也包含标准用户应用程序。...,CreateRemoteThread 注入系统进程会失败的原因是因为调用 ZwCreateThreadEx 创建远程线程时,第七个参数 CreateThreadFlags 为1,它会导致线程完成后一直挂起无法恢复运行
进程注入是将任意代码写入已经运行的进程中并执行,可以用来逃避检测对目标目标进程中的敏感信息进行读/写/执行访问,还可以更改该进程的行为。...// dllmain.cpp : 定义 DLL 应用程序的入口点。...在目标进程的地址空间中存在该字符串之后,使目标进程以LoadLibrary该字符串作为参数执行。 ok,我们打开Visual studio ?...bufferAddressInTargetProcess) { printf("在PID中分配缓冲区失败 %d\n", PID); return 0; 使用WriteProcessMemory...6.一旦有了kernel32.dll的句柄,便可以通过GetProcAddress查找LoadLibrary的地址 7.CreateRemoteThread在目标进程中创建一个新线程,该线程将使用有效负载的路径作为参数来调用
本地使用DCOM执行任意命令 我们在获取DCOM应用程序的时候,遇到了一个MMC Application Class(MMC20.Application): 这个COM对象可以编程MMC管理单元操作的组件脚本...然后在Windows7跳板机上传一个新的metasploit木马程序shell.exe,并控制Windows7使用copy命令将shell.exe复制到Windows Server 2008的c盘上面去...然后控制Windows7对Windows Server 2008执行远程命令 在Windows7的meterpreter中输入如下命令,加载powershell模块并进入powershell交互模式:...最后进入Windows7的powershell,控制Windows7对Windows Server 2008执行远程命令,执行位于Windows Server 2008的c盘里的马: # 通过PowerShell...远程执行命令 使用条件:适用于Windows 10和Windows Server 2012 R2等版本的系统。
理论上而言,运行在操作系统上的每一个进程之间都是互不干扰的,即每个进程都会拥有独立的地址空间。...也正是由于进程的地址空间是独立的(保护模式),因此我们很难编写能够与其它进程通信或控制其它进程的应用程序。 ...所谓的dll注入即是让程序A强行加载程序B给定的a.dll,并执行程序B给定的a.dll里面的代码。...在上面的注入方式中,我们使用了CreateRemoteThread来进行dll注入,而这个方式在具有Sysmon的系统中会留下Event ID 8的痕迹。...通过编写ReflectiveLoader找到DLL文件在内存中的地址,分配装载DLL的空间,并计算 DLL 中用于执行反射加载的导出的内存偏移量,然后通过偏移地址作为入口调用 CreateRemoteThread
ReadProcessMemory WriteProcessMemory 可以用 CreateRemoteThread 在指定进程中创建一个线程,让它执行我们自己的代码,这样可以让远程线程 Load...一个我们自己的 DLL,这就可以为所欲为了……需要注意的是,CreateRemoteThread 的参数 PTHREAD_START_ROUTINE 这个函数地址,需要调用 GetProcAddress...修改子进程的主线程开始位置代码 如果要注入的进程是子进程,可以创建它的时候挂起它,然后从 exe 模块中拿到子进程的主线程起始地址,把这里记下来,之后改成执行自己的代码,这个时候恢复子进程主线程,就可以执行自己的代码了...,然后再把之前保存的执行一波。...如果 WriteProcessMemory 失败,就用 VirtualProtect 修改一下页面保护属性。
而宏病毒是一种寄存在文档或模板的宏中的计算机病毒。一旦打开这样 的文档,其中的宏就会被执行,于是宏病毒就会被激活,转移到计算机上,并驻留在 Normal 模板上。...Visual Basic for Applications(VBA)是 Visual Basic 的一种宏语言,是微软开发出来在 其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。...在 Linux,OSX 和 Windows 上运行。...关掉 Word后,CS 上依旧是可以执行命令的 PS: VBA 宏代码解释:CobaltStrike 生成默认的 VBA 会导入四个 Windows API 函数,常见的 ShellCode 加载器 代码...CreateRemoteThread 创建一个在其它进程地址空间中运行的线程(也称:创建远程线程).
使用 LoadLibrary 和 CreateRemoteThread 在 Windows 中进行 DLL 注入的最基本方法是使用内置函数 LoadLibrary 和 CreateRemoteThread...这要求我们在机器上拥有 dll 并要求我们知道 dll 的路径。...创建远程线程 CreateRemoteThread是我们需要使用的另一个函数来执行我们的注入。...CreateRemoteThread 让我们在我们想要注入代码的进程中执行 LoadLibrary 调用。...在 winapi 中,HANDLE 是一种抽象,它对用户隐藏内存地址,重新组织内存而不需要程序知道所有内容。因此,进程句柄基本上只是告诉我们该进程的内存在哪里。
Rufus是一个工具能够帮助格式化和创建启动盘的工具,在Github上拥有一万五千颗星星。 这个仓库创始人对UWP的一番言论引发了广大网友的争议。...3、当涉及到应用程序可以做什么时,它的功能是非常有限的,因为微软对UWP应用程序的安全问题的答案是削弱UWP应用程序可以执行低级操作的手段,这就是为什么Windows终端团队必须花费大量时间(他们确实有一个庞大的团队和近乎无限的资源...因此,如果我们想在2018年将终端构建为一个UWP应用程序,那么我们将生成的任何shell(如cmd.exe、powershell.exe或bash)都将无法对系统执行任何操作。...换句话说,并不是因为你能够在不到5分钟的时间内创建一个简单的UWP应用程序,它不需要执行任何类型的系统访问,UWP才适合其他应用程序。...我们可以列举许多使UWP不适用于某些任务的问题,并因此将其视为解决方案,这并不意味着“他们不使用UWP是因为他们讨厌UWP” 3、如果你没有做过适当的广泛研究,也没有研究过一项“有前途的”技术在实际应用于现有项目时可能会遇到的许多警告
领取专属 10元无门槛券
手把手带您无忧上云