看了在软件调试区的anti virus有些感觉。整篇文章,很基础。扩散性强,而且也xxx。可以说是一份很标准的病毒入门级教程。
实际上,很多时候我也有在思考,一些病毒和杀毒之间的问题。虽然我很菜。
现在我先谈谈我对病毒的一些认识,和总结。
首先,把病毒从功能,或者目的上来考虑分下类:
1:传染
感染,或者传播。
1.1 DownLoader----下载者:主要用于把病毒通过网络下载到计算机系统。一种很现代化的传播
1.2 感染----------------PE,感染就不说了。其实感染的方式还有很多种,帮定图片等,我们也可以归结为感染。
1.3 硬件传播-----------磁盘,光盘,光区。运用系统提供的一些功能进行传播。比如autorun.ini这个东西。
2:盗窃
1.1 盗窃用户信息。---比如盗号木马,或者其它的xxx。
1.2 盗窃用户资源。---有一段时间,我就想写个均衡的运载器。别人感染后,可以利用别人的网络带宽资源。模糊点定义的话,P2P技术,本生就是一个大木马。
3: 破坏
3.1 破坏系统。--如干杀毒
3.2 破坏操作性。----比如屏蔽掉用户的某些操作。
3.3 破坏用户的情绪。------弹广告等,严重影响用户的情绪嘛。
其实,病毒的分类的化,要细说的话还有好多好多。要写的话,我觉得太累了。大概可以去这么理解。
好,来谈谈正题了。谈谈刀,再谈谈盾。
如果,有一天,我确实太想写病毒了。我会做以下设计考虑。
1.考虑病毒的生存性。
2.考虑病毒的功能性。
3.考虑病毒的xx性。
出于第一点目的,我绝对不会考虑用汇编去开发病毒或者木马。我会先考虑用一个半解释语言的编辑器去开发。比如使用vb,使用中国的易语言。
话说,中国的易语言,那之牛。不信的话,你去反汇编看下嘛。简直觉得调试起来之痛苦。
使用汇编语言写病毒又如下缺点:
1。汇编语言功能性太强,针对性太强。------或许这正是汇编的优点。大家都知道,汇编写出来的代码源程序会很小,或者怎么怎么的。但是,由于汇编的意义性太强,每一行代码都有特定的意思,所以搞反汇编的人,立刻就会分析出你这个是杂杂杂的。代码越小,分析力度就越小。也很容易看出。所以,你至少也要让搞你的人多付出点代价嘛。
基于以上理论,写病毒的话,请不要使用汇编。累死反病毒的。
2。汇编语言做大型病毒痛苦。------如果你写一个病毒,功能很强大很强大那种。比如说带点p2p,带点帮你做运算。或者说稍后,我要谈的变形技术代码。加点ai算法。这么怎起就有点头大了。毕竟汇编语言不常常用做大型项目。就像你去开发一个游戏样。你不会选择汇编。
3。汇编语言代码复用,还有跨平台有点老火。比如说,你今天感染了windows平台。然后你又要想办法让linux平台,或者其它的平台上跑起你写的xx,就痛苦了。你得想办法搞移枝。c++这点就搞的很好。
我大概说了汇编的一些缺点,但是我们确实又必须需要汇编才能写出一条好病毒。
anti virus专题,讲了很多。
其实,我一直也没去写病毒,只是有时候接触过一些ai算法。是有在思考一种另类的pe变形机制。我在这里也说说,我对好病毒的pe变形的一些理解吧。---以下谈的都是我的一些想象,完全没自己写过代码,或者怎么...所以大可以认为我在吹吹牛。
病毒,要像一个生物病毒样,能生存会记忆。能互相学习感应。ai算法现在种类已经比较多,比较强大了。也不像早些年样充满了神秘。套算法那些,就不说了。基本上我也没套过。我就谈谈,要写ai级别的变形病毒才开始的时候应该杂想。
一win32程序,大概分成两个部分。1数据,2代码。我们变形的目的,就是为了防止杀毒,杀毒一但提了我们的特征,我们就gp了。所以真正的完全变形,要把数据变形,要把代码变形。并且这种变形一定要满足高随机性。
先谈代码变形。
1.代码移位变形,pe文件代码移位,从组,相对而言比较单纯简单。比如,我们可以在每次生成变形体的时候,从新修改oep,然后,代码加载,然后通过jmp指令,把我们的代码继续串接起来。
其实就是这么个问题,把在文件中的二进制改了,并不会影响,在内存中的程序的执行流程。只要我们在合适的地方jmp.
2.代码功能变形,这个讲解起来,就稍微复杂点了。代码功能从组,从某种意义上来说,可以来对抗未来先进的ai防御,比如说主动防御。但是,我要把病毒变的依然是病毒,而不是变成个正常程序了。
具体变形的写发,是将一些关键的指令,搞成一套记忆原子操作。比如jmp,我们看成一个动作。通过ai算法,来收集,来整和计算和测试,然后在合适的时候,我们就让它jmp.不然就nop掉。
比如,我们写了一个病毒,其有10个小功能,第一次,我们放出去,被主动防御监视,发现干掉。然后我们斗变形一次,让它只开9个功能。然后依次内退递归下去。
主动防御的识别,大多,通过干扰和行为。NOD的主动防御,通过感染,跑完了程序的所有分支。其实搞它,我们可以用干扰,干扰的方法。
这个用语言阐述起来确实有点老火。
接着谈谈数据变形:
1数据移位变形。
数据移位的话,你要同步考虑代码。就像代码移位样。
2.数据ai变形。
其实本质思想和代码ai变形差不多。
在做变形的时候,一定要考虑同步性。
其实变形,有时候也可以生成点垃圾。让tm xxxx.
我觉得未来一定要用ai变形的毒,那才叫牛毒。随机性尽量高,累死分析员。嘿嘿。
好。来谈谈盾,防毒技术。
nod的ai侦定技术不错。我也不懂的写虚拟机,也不懂的干扰或者怎么怎么。但是我知道,大概做个那个,要写如下功能。
1.前瞻执行----执行后还原。
2.跑完所有分支。----这样才不会因为一些条件如何如何。
3.ai侦定算法。ai算法。
谈谈1,和2。我的构想。
1。做一个进程相关联的还原系统。----其实我没研究过任何还原系统的做法,如果要我做的话,我大概会做如下尝试。
1.挂接ntCreateFile.任何关于磁盘的操作,和注册表的操作,都从内核层挂接。在内核层,在挂一个关闭进程的操作。
我们都知道,createFile,会返回一个handle。我们挂接了后,我们也给它返回一个handle,不过这个handle就是属于我们自己的虚拟出来的内存了。
通过接一些磁盘操作,把它转接到我们的虚拟空间。让它写xxx。它写的所有数据,也都xxx到我们的虚拟空间了。
这时候,我们还要做个单元。就是针对每个内存,要做个标号。然后所有在请求访问某文件,的时候,我们要给他都转接到我们单元里去。
这样还原就搞定了。
2。在做还原的时候,我们要考虑下,它会干掉我们怎么的。所以在它加载r0的一些东西的时候,我们就要终止下它。在它,在r3下关进程的话,我们从底层的挂接peek掉。
2.跑完所有的分之。
这个问题,这样来想,我们知道一个程序,肯定有无数个jnz或者其它的判断跳转指令。所谓的分支,就是这些东西。
那我们就修改这些东西,不停的向前执行,又不停的修改。
一般情况,一个jnz或者什么,一但被改邪恶了。那程序就会很快崩溃。我们要做的,就是通过不停的修改jnz这些指令。找到能够完全顺利执行完的那么不多的几条路线。
大多数,一修改了就会崩溃掉。
-------------其实这也是个暴破利器,想象一下,一个不挺修改jnz的。总会给你把暴破点找到。
这里,我们还要考虑,死循环和程序运算效率的问题。不要跑一个程序,跑一年。这就怎老火了。
在这里,还可以探讨一个技术。
PE分段。我们想办法抽象程序。程序是具备以下特点的:
1。时序性。----比如要先CreateFile,才能writefile.所有的aip操作都是连续的才可以。
2.xx性。----xx性就是我忘记的一些特性。
尽力想办法抽象程序的定义,然后再定位干扰。这才是明智之举。我的感觉,pe执行,是绝对可以想办法分出段来的。
3.ai算法。
这个就不说了,套别人的。在数据中,总结自己的。
很多人,都在研究防止病毒,木马等。
我觉得web浏览对于很多用户来说,传染是个大头。看会av,年轻人都爱看毛片嘛。我没事了也在家看。边看边干。
但是天杀的av站就是病毒多。
有个关联进程级,的内存级还原那多好啊。关联下ie进程。把ie的数据都放到内存,包括病毒。看完了,直接恢复下内存。太霸道了。
这样的话,就基本解决了所有web传播途径。
哎,不扯蛋了---睡觉了。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课