![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
win32病毒
文章平均质量分 76
yangbostar
这个作者很懒,什么都没留下…
展开
-
关于PE病毒编写的学习
首先声明,因为害怕被封号,我肯定不会展示正确完整病毒代码,但是会介绍可行的学习方法。网上有很多关于介绍PE病毒编写的帖子,但基本上都是分析源码FunLove和《计算机病毒分析与对抗》中PE病毒的代码翻版。事实上这两个代码是用于原理展示,前者根本通不过编译,后者编译后并不能正确运行,虽然有部分帖子对其做了修改,受到正统汇编教材代码的影响,导致其修改方法是错误的。关于病毒编写充满了各种各样的迷信和谬论,因此在学习的过程中,我走了不少弯路,让我来一一说明:误区1:PE病毒一定要用汇编来写,其生成文件小,效率高,病原创 2010-08-30 22:32:00 · 3781 阅读 · 4 评论 -
关于PE病毒编写的学习(十)——追加病毒的编写(下)
原本这一篇应该和上一篇同时发,但是我的原来代码写得很烂,而且由于我的目标是编写一个“追加病毒”框架,代码又要具备良好的模块特征。这两天改来改去,已经头脑混乱了,所以还是先发文章把原来的代码挂上,有时间再改,我会配上说明。 另外提一句,我把一个bug写再AddSection这个函数里,很多教学码也故意写这个错误,这个错误本意是修改由于PE文件头的修改使“xx值”应适当变化,实际写入的是空位置,这个值不应该变化,这个画蛇添足的行为会导致被感染文件出现一个对齐问题的错误,使系统认为它不是一个有效文件。自己独原创 2010-10-30 13:22:00 · 2679 阅读 · 2 评论 -
使用CloseHandle对抗调试器
我最近调试程序才发觉,CloseHandle这个函数的一个怪异的行为。我突然想到可以利用这个行为来欺骗或者对抗调试器。 这个怪异的行为是这样的,调用CloseHandle释放一个无效句柄,如果进程在调试器之外,那么函数返回FALSE,而GetLastError得到ERROR_INVALID_HANDLE;但是如果进程在调试器内,那么系统将抛出异常C0000008H。一、首先说如何得到一个无效句柄呢?方法一:一个句柄释放多次次 这个方法看似没问题,但实际有很大的隐患。因为新创建的内核对原创 2010-12-30 14:54:00 · 2261 阅读 · 1 评论 -
你可能不了解的汇编(中)
1.ret结束程序和ExitProcess的区别可以试试写一个多线程的程序(例如使用mciSendCommand之类函数播放音频文件),然后在主线程中使用ret指令返回,如果其他线程没有结束的话就程序不会退出.如果某个线程使用ret指令返回,Windows会自动替它调用ExitThread函数,而如果这是进程的最后一个线程的话,ExitThread函数又会自动去调用ExitProcess函数,这样进程就终止了原创 2010-12-30 11:08:00 · 1215 阅读 · 1 评论 -
抗去除花指令(三)——去除检测
任何技术都有被攻破的一天,没有包打天下的方法。再强的花指令也是有可能被清除的,这时我们也要想办法应对。所以我们经常需要检测花指令是否被清除,加以应对。一、花指令被清除后的痕迹 我们来看一下,下面一段简单花指令被清除后的结果:代码: jmp @F byte 08eH@@: ret清除后:二、检测 从上文我们可以看到,花指令被替换指令NOP,这样就不必重构代码,就能够使代码正常运行。显然,我们只要NOP就行了。举例:.386.model stdcall,flatoption cas原创 2011-02-19 09:23:00 · 2160 阅读 · 0 评论 -
抗去除花指令(一)——花指令基础
<br /> 入门知识,高手勿读<br />一、概述<br />花指令是对抗反汇编的有效手段之一,正常代码添加了花指令之后,可以破坏静态反汇编的过程,使反汇编的结果出现错误。错误的反汇编结果会造成破解者的分析工作大量增加,进而使之不能理解程序的结构和算法,也就很难破解程序,从而达到病毒或软件保护的目的。<br /> <br />二、花指令分类<br />[2.1]可执行式花指令<br />顾名思义,可执行式花指令指的是能够正常运行的但又不改变原始程序逻辑性的一组无用指令。这类花指令有如下特点:①可以正原创 2011-02-18 19:21:00 · 7161 阅读 · 9 评论 -
抗去除花指令(二)——有创意的花指令
一、概述“jmp/call/ret+垃圾数据”这样的花指令已经是相当“老掉牙”了,OD的插件对付它们基本是“秒杀”,所以本文想说点“有点创意”的花指令,至少能对付OD的插件。二、创意的核心[2.1]花指令因何被发现“jmp/call/ret+垃圾数据”的方法之所以容易被检测,原因是“意图太明显”,具体说任何一种检测手段,都是基于以下两点:①检测跳转结构的固定形态特征,当然这不是绝对的,如果检测机制没能预见到这种形态特征,此点可以忽略,本文后边会提到一些这样的情况。②用可靠的方法直接证明,垃圾数据部分在任何情原创 2011-02-18 19:51:00 · 3692 阅读 · 0 评论 -
控制流迷惑——控制流整平
一、控制流整平的作用 学逆向的人都知道,if-else、while、for具有典型的跳转等结构,即使通过多层嵌套、拓展条件等方法,依然可以通过“切片技术”来判断。有了这些依据,就给程序分析带来很多便利。 正是这个原因,为了增加程序逆向的难度,我们得使得这些特征结构变得模糊,并且能让类似“切片技术”这样基于具体语义分析的方法失效,迫使逆向分析人员进行完整的抽象语义分析,斩断所谓的“捷径”。 控制流整平的策略是这样的,它把所有的典型控制流以及其衍生结构“统而为一”,各种控制流的区别只是语义方面原创 2011-02-24 12:38:00 · 2417 阅读 · 0 评论 -
汇编写驱动(一)——光速入门
用汇编写windows驱动非常简单,只要有汇编基础和用C写驱动的能力即可。有了这两样基础,我们距离用汇编写驱动,只剩下一层窗户纸,一戳就破。一、准备软件:Radasm 为了快速入门,好的IDE是降低入门难道的有效手段。Radasm是我最为钟爱的一款软件,第一次使用过它,我就果断地将masm32删除了。 RadASM是一款著名的WIN32汇编编辑器,精通win32汇编的人对它应该不会陌生。支持MASM、TASM等多种汇编编译器,提供优秀的IDE,自带一个资源编辑器和一个调试器(OD)。拥有较原创 2011-03-18 16:55:00 · 3670 阅读 · 0 评论 -
关于PE病毒编写的学习(九)——追加病毒的编写(上)
OK,兑现我的承诺,从本章开始讲述“追加病毒”的编写方法。我们将实现一个只弹出对话框的良性病毒,但是考虑到这个代码可能造成的危害,我会在感染模块中写入一个小Bug。不过,对于大家的学习是毫无影响的。 回到正题,先介绍一下“追加病毒”,在DOS时代中,这种病毒相当常见。由于.com文件的入口点是固定的,而且我们知道DOS平台程序可以随意使用中断,因此追加病毒只要将病毒代码追加到宿主文件尾,然后修改入口点代码成“jmp [病毒入口点]”,病毒执行完成后,再jmp到宿主程序。 到了win32平台下,这种方原创 2010-10-27 11:24:00 · 1832 阅读 · 0 评论 -
你可能不了解的汇编(上)
收集一些不太常用32位汇编知识,欢迎大家分享、指教。1.从PUSH开始谈新指令 你应该知道push、pushad、pushfd这三条指令,但是大部分人不知道还有pushd、pushw、pusha、pushf这四条指令;对应的还有popa、popf,但没有popd、popw。你不知道或不熟悉的指令还有很多很多,比如①xadd 交换并相加②bswap指令指定的32位寄存器的字节次序变反③④cmpxchg比较并交换⑤cmpxchg8八字节比较并交换.....2.模块伪指令 初学写32位汇编的大概都以为,原创 2010-12-12 20:11:00 · 6821 阅读 · 10 评论 -
关于PE病毒编写的学习(二)
这篇说一下,PE病毒需要那些技术积累,以及这些技术的学习方法和重点是什么。1.先说汇编吧 其实我说的汇编关于两个方面:汇编语言设计 和 微机原理 汇编语言设计,它也是两方面: 常规教材讲的 和 病毒的技巧 常规教材上讲的基本都得学会,最基本的8086/8088肯定都得会,各种书籍视频很丰富,学起来不难。80x86也是必须得学,建议看一下《80x86汇编语言程序设计》(杨季文著,清华大学出版),这本书的后半本写的很精彩,至于罗云杉的那本,明白意思就行了,因为使用Radasm,简化原创 2010-08-31 13:40:00 · 3413 阅读 · 3 评论 -
关于PE病毒编写的学习(三)
历史上,在windows95发布后,用高级语言编写的外壳病毒,经过简单地改造编译,就能从DOS平台迁移到windows平台上。并且在这当中很多“前置病毒”,仅仅需要重新编译。另外之所以用“前置病毒”作为第一分析样本,理由如下:1.它具有基本病毒功能模块,这些模块在文件型病毒中是通用的2.其框架结构,所需病毒技巧极少3.拓展方便,通过不断地加入新功能,循序渐进的学习各种病毒技巧4.加载新模块方便,适合测试其它病毒的某些功能模块那么何谓“前置病毒”?DWORD dwVirusSize=40960;HANDLE原创 2010-09-10 20:18:00 · 2429 阅读 · 1 评论 -
关于PE病毒编写的学习(四)——关于历遍磁盘的讨论
在上一章中的“前置病毒”中,由于它只是一个测试病毒,因此该病毒只是搜索病毒文件所在文件夹的exe文件。显然,为了让它具有更好传染性,能够历遍整个磁盘或某些重要文件夹的特性,是十分重要的。回到正题,让我们来改进原来的代码首先,在原来的代码中,只要结尾是“.exe”就判断为"可执行程序",这种方法在大多数情况下是正确的,但是如果程序经过压缩或加密后,某些行为会出错。因此,更加详细的文件类型检查很多时是必要的,参考代码如下:BOOL IsExeFile(HANDLE hFile){ IMAGE_DOS_HEADE原创 2010-09-19 13:20:00 · 1853 阅读 · 7 评论 -
关于PE病毒编写的学习(五)——病毒如何做标记和记录信息
1.做标记和记录信息的区别 做标记:它是为了其它病毒识别自己,而在固定或符合一定规则的位置上记录的符号信息。 记录信息:它是为了病毒本身正确运行,而存储的某些信息,比如解密程序的随机密匙、所感染宿主文件的某些信息2.那些地方可以做标记和记录信息 (1)可标记的位置 1/程序入口区域和尾部区域;并非一定是开头和结尾,比如 VirusStart: ... jmp $+3原创 2010-09-20 22:38:00 · 1559 阅读 · 0 评论 -
关于PE病毒编写的学习(十一)——空隙覆盖病毒的实现方法
这类病毒名字很多,选这个名字主要是它比较形象说明其感染方式,即将病毒代码分成多份,分别注入到程序各节由于对齐产生的空白中。1.核心——病毒描述表 将病毒代码分割成多份,分别注入到未知地址的区域内,却能完整运行。这看似神奇,其实实现方法却很简单———建立病毒分割描述表病毒分割描述表举例(汇编):Virus_Distribution struct;病毒片段描述符 Code_Base dword 0;该病毒片段的起始地址 Code_Length dword 0;该病毒片段的长度Virus_原创 2010-11-27 17:00:00 · 2027 阅读 · 3 评论 -
关于PE病毒编写的学习(六)——关于PE文件结构操作的程序编写
对PE文件结构的各个值定义和作用,这里不提了,网上资源很多,百度一下就好了。所以,本章只说一下,作为代码编写者对PE文件结构操作的方法和技巧。还是通过改进代码,来体会一下吧。 你应该记得前面的BOOL IsPEFile(HANDLE hFIle) 这个函数吧,它的作用是判断文件是否为PE格式文件。它把文件句柄作为参数,虽然许多函数需要文件句柄这个参数,但是作为对PE文件结构操作的函数,这样做是不恰当的,因为如果这样做就要频繁的使用SetFilePointer()、ReadFile()、WriteFil原创 2010-10-06 22:10:00 · 1988 阅读 · 0 评论 -
关于PE病毒编写的学习(八)——定位API的N种方法(2010年10月25更新)
由于大部分的文件感染型病毒框架都不可以像“前置病毒”那样拥有自己的输入表,因此需要自行定位API说一千道一万,想要定位API,大方向是要定位Kernel32.dll的基地址。总结所以这些方法,可以分为是四个小方向,它们又产生很多变种。一、定位kernel32.dll基地址的方法(1)硬编码方式 由于kernel32.dll的基地址在相同版本windows下,基本上它的位置是固定的。这种方法在早期的PE病毒中很常见,现在已经很少使用了。(2)利用程序初始化时,首先寄存器或堆栈中保留的kernel32.d原创 2010-10-08 22:28:00 · 2158 阅读 · 1 评论 -
汇编写驱动(三)——字符串问题的补充——string.mac说明部分的译文
我的上一篇文章,提到了masm32/macro/string.mac这个文件里的宏,但是没有说明使用方法,所以我直接把这个文件里的使用说明翻译一下。;; 文本宏的集合;; 作者: Four-F (four-f@mail.ru);; 最后更新2004年9月1日;; 欢迎您的改进、建议和修正;; 测试了与 windows.inc v.1.25e的兼容性STRINGA/STRINGW是内部宏。基本上,你不需要使用它们:::::::::::::::::::::::::::::::::::::::::::::::::翻译 2011-03-25 10:13:00 · 2408 阅读 · 1 评论