欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Windows 10进程镂空技术(木马免杀)

来源:本站整理 作者:佚名 时间:2018-06-07 TAG: 我要投稿

在Win10 x64环境下替换正常的进程,是一个比较高超的技术。使用该技术,可以内存执行病毒、木马。在文件层面实现免杀。可以把一个木马使用DES加密,放在资源里。执行时,从资源里释放出来,在内存里进行DES解密,注入到一个系统的进程中。

环境
1.  VisualStudio 2015 企业版
2.  普通程序 Notepad.exe (C:\windows\system32\Notepad.exe)
3.  木马程序 MalWare.exe
4.  源码下载地址,http://www.isafe.cc/article.asp?id=77
5.  EXE下载地址,http://www.isafe.cc/article.asp?id=77
步骤
创建一个挂起的进程notepad.exe->读取线程上下文->读取进程内存->读取Notepad.exe原始入口点->卸载Notepad.exe占用的内存->将MalWare.exe二进制放入内存缓冲区->在Notepad.exe进程中分配一个内存空间->将MalWare.exe注入到Notepad.exe的进程里->修改Notepad.exe的区段->修改Notepad.exe的入口点->恢复主线程->成功注入。

代码实现
一.创建一个挂起的进程notepad.exe
BOOL WINAPI CreateProcess(  _In_opt_    LPCTSTR              lpApplicationName,  _Inout_opt_ LPTSTR               lpCommandLine, _In_opt_    LPSECURITY_ATTRIBUTESlpProcessAttributes, _In_opt_    LPSECURITY_ATTRIBUTESlpThreadAttributes, _In_        BOOL                 bInheritHandles, _In_        DWORD                dwCreationFlags,  _In_opt_    LPVOID               lpEnvironment,  _In_opt_    LPCTSTR              lpCurrentDirectory, _In_        LPSTARTUPINFO        lpStartupInfo, _Out_       LPPROCESS_INFORMATIONlpProcessInformation);
a.) lpApplicationName 这个参数是可执行文件的路径。例如
      c:\programfiles\sub dir\program.exe
      c:\program files\a.exe
      netstat
b.) lpCommandLine 这个表示应用程序的参数。例如 -an
c.) lpProcessAttributes 进程属性结构体变量
d.) lpThreadAttributes  线程属性结构体变量
e.) bInheritHandles     指定当前进程内句柄不可以被子进程继承
f.) dwCreationFlags     进程创建标识符,CREATE_SUSPENEDE 表示创建一个挂起的进程。
g.) lpEnvironment       指向一个新进程的环境块。如果此参数为空,新进程使用调用      进程的环境。
h.) lpCurrentDirectory  指向一个以NULL结尾的字符串,这个字符串用来指定子进程的  工作路径。这个字符串必须是一个包含驱动器名的绝对路径。如果这个参数为NULL,新进程将使用与调用进程相同的驱动器和目录。
i.) lpStartupInfo       指向一个用于决定新进程的主窗体如何显示的STARTUPINFO结 构体。
j.) lpProcessInformation保存进程所有信息的结构体变量。
CreateProcess函数用于创建一个进程,cAppName为C:\\Windows\\notepad.exe,是程序文件的路径,第6个参数为CREATE_SUSPENDED,表示创建一个挂起的进程。最后2个参数si,pi保存了进程的相关信息(进程的句柄,线程的句柄等)。
二. 读取线程上下文
GetThreadContext函数用于获取线程上下文。
Pi.hThread为线程句柄,
context线程信息结构体。
三. 读取Notepad.exe原始入口点
ReadProcessMemory函数用于读取另一个进程的内存。这里dwVictimBaseAddr存放读取的数据,大小为4个字节。
原型
BOOL ReadProcessMemory(HANDLE hProcess,LPCVOIDlpBaseAddress,LPVOID lpBuffer,DWORD nSize,LPDWORDlpNumberOfBytesRead);
第一个参数hProcess,要读取的进程句柄。
第二个参数lpBaseAddress,要读取的进程的内存首址。开始地址。
第三个参数lpBuffer,接收数据内容的缓冲区。
第四个参数 nSize,从内存中读取的字节数。
第五个参数lpNumberOfBytesRead,已经读取的字节数。
函数返回0表示调用失败。
四. 卸载Notepad.exe占用的内存
pfnNtUnmapViewOfSection函数用于卸载进程占用的内存
五. 在Notepad.exe进程中分配一个内存空间
VirtualAllocEx函数用于在指定进程中分配一个内存空间。
函数原型:
LPVOIDVirtualAllocEx(HANDLE hProcess,LPVOIDlpAddress,SIZE_T dwSize,DWORDflAllocationType,DWORD flProtect);
第一个参数hProcess,需要在其中分配空间的进程的句柄。
第二个参数lpAddress,分配的内存首址。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载