加入收藏 | 设为首页 | 会员中心 | 我要投稿 河北网 (https://www.hebeiwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

“黑客”深度学习之“免杀技术原理与实现”

发布时间:2019-03-07 06:40:32 所属栏目:建站 来源:信息安全我来讲你来听
导读:杀毒和免杀矛与盾的两者,对付黑客来说两者都应该进修,做到良知知彼才气到达真正的王者,本日就以本篇文章给各人分享一下免杀的技能道理与实现进程。 一、 杀软是怎样检测出恶意代码的? 1. 检测特性码 人有本身的特性,代码也有本身的特性。杀毒软件都有
副问题[/!--empirenews.page--]

"杀毒"和"免杀"矛与盾的两者,对付黑客来说两者都应该进修,做到良知知彼才气到达真正的"王者",本日就以本篇文章给各人分享一下"免杀的技能道理与实现进程"。

一、 杀软是怎样检测出恶意代码的?

“黑客”深度进修之“免杀技能道理与实现”

1. 检测特性码

人有本身的特性,代码也有本身的特性。杀毒软件都有着一套特性库,依赖检索措施代码是否和库中特性码是否相符来判定某段代码是否属于病毒。

2. 开导式恶意软件检测

假如该措施的特性和举动与病毒措施相同,其匹配水平到达必然值就可以以为该措施是病毒措施。

3. 基于举动检测

与开导式检测相同,只是纯真依赖监测措施举动来作为尺度。通过监督恶意代码运行进程,如操作体系监督器材调查恶意代码运行进程时体系情形的变革,或通过跟踪恶意代码执行进程行使的体系函数和指令特性说明恶意代码成果,如呈现恶意举动,则属于恶意代码。

二、 免杀是什么?

顾名思义,免杀就是使得恶意软件不被杀毒软件查杀,二者可以或许共存。

免杀或容许以分为两种环境:

  • 二进制的免杀(无源码),只能通过通过修改asm代码/二进制数据/其他数据来完成免杀。
  • 有源码的免杀,可以通过修改源代码来完成免杀,也可以团结二进制免杀的技能。

免杀也可以分为这两种环境:

  • 静态文件免杀,被杀毒软件病毒库/云查杀了,也就是文件特性码在病毒库了。免杀方法也许是上面的两种方法,看环境。
  • 动态举动免杀,运行中执行的某些举动被杀毒软件拦截报读。举动免杀假如没有源码就不是很好搞了。

三、免杀的技能实现要领与流程

(一) 起首静态免杀技能流程:

对付静态免杀,针对的是杀毒软件的静态文件扫描,云查(病毒库)杀。

1. 怎么找特性码

(1) 器材查找

常见的特性码定位器材有CCL、MYCCL。器材大抵道理就是支解文件,某些支解部门填入数据(0),假如扫描该部门不报警,则特性码在这个部门。云云重复,直到找到很短的某一段内容。差异器材之前局别是行使的支解算法差异,查找特性码的结果差异。

今朝较量常著名气的特性码定位器首要有CCL与MYCCL,他们都回收文件分块定位的步伐,定位结果带有命运成份,且也许每次定位出的位置都不尽沟通,这个免杀带来了坚苦。

其后出来了一款新的特性码定位软件VirTest。下面是作者本身的先容:

我们可以这样假设报毒进程,假如检测文件是PE,假如在CODE位置存在 符号A,在DATA位置存在符号B,在资源位置存在符号C,同时满意这个3个前提,那么杀软就会报毒,VIRTEST事变道理就是要找到引起报毒最后一个符号,也就是假设中的符号C。

因此VIRTEST回收2分解除法,测试符号C地址文件中的位置,因为被杀的文件也许存在多个 相同于ABC这样的连锁前提,以是我们必必要通过一种解除机制,先要找最接近文件前部的连锁前提,解除去文件尾部数据,当找到第一个连锁前提后,抹掉引符号C,再规复尾部数据,

然后继承测试其它的连锁前提,直到找到最后一个连锁前提,抹掉后,整个文件免杀了,则声名特性代码被定为完毕了,以是VIRTEST绝对可以准确的定位出全部的复合特性。这比文件分块定位法先辈得多,更为科学。

器材查找必定是针对二进制文件(有源码的也编译后在搜查)。

详细用过MYCCL(行使要领自行查找),确实比手工支解文件定位利便,也可以找到某些文件的特性码,可是有些时辰也许会呈现很是多很是多...的被杀文件支解,然后...瓦解了。

其后也用了virtest,感受作者说的挺有原理,应该挺好用吧。然后试了试,确实感受比MYCCL高峻上多了,也可以定位到特性码,可是tmd改了之后怎么照旧报呢,横竖你也许会折腾好久...

(2) 手工查找

这里说的是针对有源码的(二进制就别想手工了...),要领很是简朴。

mian中屏障全部代码,编译,扫描。不报的话继承2,假如依然报毒,去5。

铺开一层(可以多层、二分也可以)函数,编译,扫描。不报的话,一再2。直到定位到某个函数可能多个函数,进入3。

在函数内部屏障部门代码(二分),编译,扫描。不报,一再2。

直到定位某段代码(无自界说内部挪用),特性码在此。

是不是有附加数据,可能资源存储的文件。有,单独搜查该文件可能数据,要领从1开始。假如没有,那去找找PE头吧。

大抵流程:

  • sub1 //未报
  • sub1 sub2 //未报
  • sub1 sub2 sub3 //报
  • sub1 sub2 sub3(sub31) //未报
  • sub1 sub2 sub3(sub31 sub32) //报
  • sub1 sub2 sub3(sub31 sub32(sub321)) //报
  • ...

直到找到某API挪用,可能逻辑代码(没有自界说函数挪用)

此要领,固然笨,可是定位特性码不会很慢,挺精确。

2. 怎么免杀?

前面已经找到特性码了,怎么免杀呢?

着实前面已经说到了,找到特性码之后,只要改变这个特性码值得话就免杀乐成。假如不必要软件正常运行,直接填零得了...恶作剧,这怎么也许。以是修改特性码还得担保软件正常成果。以是也是有考究的。

常用的修改器材有,OD,C32ASM,UE,010Editor等等。

(1) 手工修改

非源码:

  • 数据

假如特性码定位到数据(通过IDA/OD等确认),着实欠好修改,轻微不慎就会导致措施不能运行,可能影响措施运行流程或功效。

字符串,假如不影响措施逻辑,可以替代巨细写;假如无关紧急的数据,随意替代;等等,看环境而定。

整数,假如不影响功效,替代值,清零等等操纵。

地点,根基应该不能修改,详细看环境。

PE头数据,按照PE布局详细来看,无用数据清零或修改,有效数据看环境修改。

最后,终极修改要领,找到会见数据的代码,直接修改代码会见数据的地点,数据也可以放到其他地点了,着实就犹如修改源码一样修改,必定没有修改源码那么轻易(见后)。

横竖特性码定位到数据位置不轻易修改(可以再试试后头的盲免杀)。

  • 代码

假如特性码定位到代码(也通过IDA/OD等确认),在不改变措施成果基本上,应用各类要领修改。

等价替代汇编代码,如mov eax,0可以换成xor eax,eax,直接功效沟通,二进制代码差异。

互换代码次序,在不影响逻辑的环境下。

代码块移位,将代码块移动不消的内存位置,通过插手jmp addr跳已往执行,addr是新的代码块地点。

源码:

在有源码的环境下,修改的方法就更机动了,更简朴了。

(编辑:河北网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读