特征代码(精选8篇)
特征代码 篇1
0.引言
自从1991年欧洲粒子实验室推出万维网以来,作为其信息载体的Web页面的数量就一直呈几何倍数增长,相关统计数据显示,目前世界范围内的Web页面已经接近了100亿页,这些浩如烟海的网页中所蕴含的各种各样的知识给人们的日常生活和学习带来了极大的便利。但随着互联网信息技术的不断发展,代码的“恶意”性以及其给用户造成的危害也已经引起人们普遍的关注。
1. 恶意代码的基本概念
恶意代码在不同的场合具有不同的定义。一般情况下,人们把嵌入网页中具有恶意改变系统设置、IE设置,甚至格式化硬盘功能的、随IE浏览该页面自动在Windows特定环境下执行的有害代码称作“恶意代码”。
2. 恶意代码的表现形式
2.1 网页病毒类
该类代码利用软件或系统操作平台的安全漏洞,通过嵌入在网页上HTML标记语言内的Java Applet应用程序、Java Script脚本程序、Active X网络交互支持自动执行,强行修改用户注册表及系统配置,或非法控制用户系统资源、盗取用户文件、恶意删除文件,甚至格式化硬盘。
这种非法恶意程序能够得以被自动执行,在于它完全不受用户的控制,一旦浏览了包含病毒的网页,即可在不知不觉的情况下中招,给用户系统带来一定程度的破坏。如在IE浏览器方面,恶意代码修改主页、锁定主页、修改默认搜索引擎、鼠标右键菜单被添加非法网站广告链接等;在操作系统方面,恶意代码在开机后自动打开锁定网址、格式化硬盘、非法读取或盗取用户文件、锁定或禁用注册表等。
2.2 脚本类
脚本实际上就是程序,一般都是由应用程序提供的编辑语言。应用程序包括Java Script、VBScript、应用程序的宏和操作系统的批处理语言等。脚本在每一种应用程序中所起的作用都是不相同的,比如在网页中可实现各种动态效果,在Offic中通常是以“宏”来执行一系列命令和指令,可以实现任务执行的自动化,以提供效率,或者制造宏病毒。
2.3 漏洞攻击类
该类代码是利用软件或者操作系统的漏洞而编写的程序,对用户系统或者网络服务器进行攻击。比如黑客利用微软IE浏览器漏洞,编写漏洞攻击代码对用户进行攻击。
3. 恶意代码的危害
一些网站为了强行留住网民对自己网站的访问,让用户的浏览器长期为其做广告,利用网页技术中的恶意脚本程序,将访问者的IE不由分说地进行修改,一般改掉用户的起始页和默认页主页,为了不让用户修改回去,甚至将IE选项中的默认主页按钮变为失效的灰色,还有通过修改注册表、禁止用户使用计算机、锁定注册表等等。
更严重的,恶意代码的特征就是利用IE执行Active X的功能,让用户无意中格式化自己的硬盘。只要用户浏览了含用它的网页,浏览器就会弹出一个警告对话框,提示“当前的页面含有不安全的Active X,可能会对你造成危害”,问用户是否执行,如果选择“是”的话,硬盘就会被快速格式化,因为格式化窗口是最小化的,用户可能根本就没注意,等发现时已悔之晚矣。
这些主要是网页恶意代码,也就是网页病毒造成的危害。而用脚本编写的蠕虫病毒的危害就更大了,它不再是针对一台计算机,而是迅速传播,对网络上所有计算机造成危害,以致网络被拖垮最后崩溃。
4. 恶意代码的系统环境
4.1 WSH脚本解释机制
网页脚本病毒的执行离不开WSH,WSH全称“windows scripting host”,是微软公司提供的一种基于32位系统平台、与语言无关的脚本解释机制,它使得脚本能够直接在Window桌面或命令提示符下运行。WSH架构于Active X之上,通过充当Active X的脚本引擎控制器,WSH为Windows用户充分利用威力强大的脚本指令语言扫清了障碍。它对应的程序“WSCRIPT.EXE”是一个脚本语言解释器,位于Windows文件夹下,大多数系统在默认安装后都会有WSH的身影,正是由于它使得脚本可以被执行,也因此给脚本病毒的传播提供了途径。
4.2 Active X
Active X是微软提出的一组使用部件对象模型(CO M),使得软件部件在网络环境中进行交互的技术集。作为针对互联网应用开发的技术,Active X被广泛应用于网络服务器以及客户端的各个方面。
虽然Active X技术提供了非常多的功能,但它也造成了很大的安全威胁。它可以执行二进制代码,前面提到的格式化硬盘最恶毒的做法就是利用了IE执行Active X的功能。
4.3 各类软件漏洞
我们平时上网浏览时用的软件,包括操作系统、各种工具软件等都需要不定期地安装由厂家提供的补丁程序。比如微软公司定期的系统补丁安装等。
5. 网页恶意代码的防范方法
1)留意微软和各大安全网站发布的安全公告,及时了解最新安全动态,封堵住漏洞,如果没有条件随时关注这些,至少要及时更新浏览器,使用最新的、打过各种安全补丁的浏览器。
2)安装防火墙和杀毒软件,并及时更新。
3)事先备份注册表,如果发现注册表被修改则直接导回就能恢复。
4)牢记不要浏览那些并不了解的网站,也不要在聊天室里点击其他网友贴出的超级链接,这样可以避免遭到恶作剧者的攻击。
5)其实最简单也是最省事的办法,就是安装一款大众防火墙及杀毒软件,如卡巴斯基、360安全卫士、诺顿、瑞星等。
参考文献
[1]李萍.电脑危险代码与防范[M].山东电子音像出版社,2005.
[2]李锦.计算机恶意代码分析与防范技术[M].群众出版社,2009.
[3]韩筱卿,王建锋,钟玮.计算机病毒分析与防范大全[M].电子工业出版社,2008.
[4]张又生,米安然.计算机病毒与木马程序剖析.北京科海电子出版社,2003.
特征代码 篇2
那么它是如何实现它的声明的呢?这里,用以下的一段简短的使用流程:
1、查找(创建)jQuery对象:$(“selector”);
2、调用jQuery对象的方法完成我们需要完成的工作:$(“selector”).doOurWork;好了,jQuery就是以这种可以说是最简单的编码逻辑来改变javascript编码方式的。这两个步骤是jQuery的编码逻辑核心!
要实现这种简洁编码方式,创建jQuery对象这一环节至关重要。因此,jQuery的dom元素查找能力相当强悍。此外,jQuery对象的方法肯定是有限的,有限的方法满足不了日益增长各有所需的要求,所以,必须提供jQuery对象方法的扩展能力。
强悍的dom元素查找能力,以及随心所欲的方法扩展,这两点正是jQuery的核心所在!来一个简单的示例,来说明jQuery是如何工作的:
Transitional//EN”””>baidu
$(function(){
$(“a“).click(function(e){//1)查找$(”a”);2)jQuery对象事件click;3)jQuery对象方法hide$(this).hide(“slow“);
returnfalse;
});
});
jQuery中有一个“配置”的思想,这一点使得对象的属性/事件等设置变得容易理解且十分简便,如下一个拖拽组件的初始化:
可以看到,$(“#drag1”)是查找并创建一个jquery对象,然后调用Draggable方法进行拖拽初始化,在此方法调用时,传递一个“配置”对象,进行拖拽操作的初始化配置。这一“配置”的思想,极大简化了一些编码步骤,并相当直观和易懂。
以下我进行三个问答:
1、问:为什么$(selector)之后,返回的是jQuery对象?
答:从jQuery的源代码中,我们可以知道:var$=jQuery。因此当我们$(selector)操作时,其实就是jQuery(selector),创建的是一个jQuery对象。当然正确的写法应该是这样的:varjq=new$(selector);而jQuery使用了一个小技巧在外部避免了new,在jquery方法内部:if(window==this)returnnewjQuery(selector);
2、问:为什么创建一个jQuery对象之后,我们可以这样写
$(selector).each(function(index){…});进行遍历操作呢?
答:其实jQuery(selector)方法调用时,在jQuery(selector)方法内部,最后返回的是一个数组:returnthis.setArray(a);而each方法体内部是一个for循环,在循环体内是这样调用的:method.call(this[i],i)。
3、问:为什么jQuery能做到jQuery对象属性/方法/事件的插件式扩展?
答:如果您有一些javasciprt的面向对象方面的知识,就会知道,jQuery.prototype原型对象上的扩展属性/方法和事件,将会给jQuery的对象“扩展”。基于这一点,jQuery是这样写的:jQuery.fn=jQuery.prototype。所以,当我们扩展一个插件功能时,如下:jQuery.fn.check=function(){
returnthis.each(function(){
其实就是:
综上所述,jQuery给我们带来了一个简洁方便的编码模型(1>创建jQuery对象;2>直接使用jQuery对象的属性/方法/事件),一个强悍的dom元素查找器($),插件式编程接口(jQuery.fn),以及插件初始化的”配置”对象思想.
附:实现自己的jQuery
Transitional//EN””www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
divvv
fdsf
//实现自己的MyQuery框架
varMyQuery=function(selector){
if(window==this)returnnewMyQuery(selector);
//这里只实现dom类型的简单查找,嘿嘿
vardoms=document.getElementsByTagName(selector);
vararr=[];
for(vari=0;i
arr.push(doms.item(i));
}
returnthis.setArray(arr);
}
MyQuery.prototype.setArray=function(arr){this.length=0;
[].push.apply(this,arr);
returnthis;
}
MyQuery.fn=MyQuery.prototype;
var$=MyQuery;
//插件扩展1)each
MyQuery.fn.each=functionethod){for(vari=0,l=this.length;i
method.call(this[i],i);
}
}
//插件扩展2)show
MyQuery.fn.show=function(){
this.each(function(i){
alert(i+“:“+this.id+“:“+this.innerHTML);});
}
//debugger
元代码的叙事 篇3
关键词:徐訏 作品 模式化
读过徐訏全集就可以看出,徐訏作品中有许多元代码,作者有意将这些元代码排列组合,添枝加叶,以文学的形式构成多姿多彩的艺术世界。这些模式化通常都反映在作品题材内容、情节及人物上。
一、徐訏作品中的题材模式
在题材内容上,徐訏作品可以分为乡村模式、都市模式、乡村与都市结合模式。
乡村模式主要描写了美丽的田园风光,农村人质朴、善良的性情等。徐訏写于1947年的短篇小说《旧地》是很有代表性的以乡村为题材的小说。《旧地》描绘了一个美丽的乡村—枫木村,那是作者儿时的天堂。《旧地》是回忆性自传体,除了写乡村美丽的田园风光之外,还重点刻画了许多个性鲜明的人物,如裁缝马二、打鸡的阿陀、跛子阿德等。在作者心中,那里人情是温暖的,生命是愉快的。日军侵华时,枫木村被洗劫了,人们死的死、逃的逃,美丽的村子不再如以前。美好事物的毁灭给作者的内心带来了无限悲凉,作者的童年与带给作者早期经验的村子一同逝去,但作者认为这一角世界在记忆中是最美的,最安详的,最温暖的世界。
徐訏作品中大多数还是写都市生活的。他最为出名的《鬼恋》、《风萧萧》都是写在大都市尤其是在上海发生的事。这部分作品描写了都市的繁华气象,都市人的富丽雍容,目光停留在都市上层社会的人士,并对这些人的社交和生活不惜笔墨,对下等人关照的却不多。《鬼恋》描写了主人公“徐”与美丽的“鬼”在大都市上海发生的浪漫传奇故事。《风萧萧》也是把地点集中在上海。此外,《属于夜》等都是描写都市生活的作品。
还有一部分作品是把乡村与都市结合起来写,如短篇小说《滔滔》,写了一个生养在农家,又嫁到了农家的女子小顺嫂,因为看到邻居到城里做女佣回来衣着一新,还带回了许多新奇的东西,便对城里产生好奇,开始向往城里的生活。不久,小顺嫂怀孕了,产后去城里做了奶妈。进城回来后,她看村里和家里的一切都不顺眼了,回到城去在车夫的诱惑下背叛了丈夫。不久,她因奶汁少了而被辞掉,车夫也厌倦了她,她在城里生活不下去只能回家。这类作品把乡村和都市做对比,表现了乡村人的憨直,都市人的势利,也反映了农村的落后,城乡差距的明显。
二、徐訏作品中的人物模式
徐訏笔下的人物模式主要可分为知识分子与交际花、从入世到出世人物、幸福家庭的小姐。
知识分子与交际花是徐訏最青睐的描写角色,他的很多作品都是以知识分子“我”的口吻讲故事。中篇小说《吉布赛的诱惑》描写“我”在回国的途中经过马赛,在那遇到了妓女潘蕊,“我”被她的美貌吸引,坠入爱河。长篇小说《风萧萧》是写抗战时期的间谍战,主人公是知识分子徐和舞女白苹、交际花梅瀛子。短篇小说《属于夜》描写了一对邻居由于工作原因常常在夜里回来时相遇,一个是新闻记者,另一个是舞女。《灯》写的也是在报馆工作的“我”与舞女丁媚卷的故事。徐訏本人是一位学者型作家,他对知识分子的生活应该是最为了解的,而他常常写舞女,他对舞女有欣赏也有同情,从他对舞女的描写上看,他很了解舞女的生活。这类女子大多是神秘的,《鬼恋》中的女子让人以“鬼”的身份出现,《赌窑的花魂》中的女子帮我赌钱,每次都能赢钱,却从不与我提及她的过去。徐訏笔下的知识分子大多在报馆工作。
从入世到出世是徐訏笔下一类人物的经历。这类人物往往是从积极入世到看破红尘,要么以死亡来了结此生,要么选择避世。《鬼恋》中的“鬼”是一个革命者,在经历了大半生的革命工作后,拒绝了人世间的爱情、功名,选择了做“鬼”来了此余生。《幻觉》中的和尚李墨龙在入世时执着于艺术理想抛弃并毁灭了纯洁的女子地美,在忏悔中遁入空门。另一类让徐訏着以笔墨的是幸福家庭的小姐。但实际上,这些看似幸福的小姐们并不幸福。她们家庭环境优越,从小接受着严格正规的教育,有知识,懂艺术。但她们内心都有种反抗情绪,仿佛家庭是她们精神上的桎梏,她们多半是典型的叛逆者。《精神病患者的悲歌》中的司特朗小姐患有精神病,她丢掉书屋、钢琴,经常在晚上开车出门,整夜在酒吧与下等人聚在一起。《花束》开篇就写到“金薇死了”,金薇是金家美丽的女儿,她家住在三开间三层楼的洋房,有很大的花园,家教严格。而她竟怀了三个月的孩子自杀。此外,属于这一类型的还有《风萧萧》中的海伦等。
三、徐訏作品中的情节模式
徐訏作品在故事情节上也是模式化的。他的小说开头总是先设悬念,伏笔过多。《风萧萧》一开头就说主人公的朋友史蒂芬突然多出来了个太太,然后提出疑问,史蒂芬太太到底是什么人呢?小说最后才告诉读者,史蒂芬和史蒂芬太太是为革命需要而伪装的假夫妇。《花束》开篇就写“金薇死了”,之后读者就在作者的悬念牵引下不断地推测金薇的死因,谜底在故事情节的发展中被层层揭开。
《鬼恋》也给人留下悬念,这个神秘的女子真的是鬼吗?《赌窑的花魂》也让人不断猜测,这个神秘女子到底有着怎样的过去呢?这种悬念使读者急于想知道个究竟,激发读者的阅读兴趣,增强了作品的可读性和趣味性。小说中间也有悬念,如短篇小说《心病》中妻子有件事要告诉丈夫,但是一直没有合适的机会,作者不停地设置悬念,使读者急于想知道到底是什么事。
一种恶意代码特征选取和建模方法 篇4
随着越来越多的人使用Internet提供的服务,Internet逐渐成为了人们日常生活中不可或缺的一部分。不同于早期只能进行简单通信交流的网络,如今的Internet上可以进行各类交互活动,其中就包括电子商务。正因为网上商品流通以及网上银行的存在,许多恶意攻击者就利用恶意软件来达到他们获取经济利益的目的。
Christodorescu等人[1]将恶意软件描述为具有恶意意图的程序,维基百科[2]对恶意软件的定义为“用来中断计算机操作、收集敏感信息或者获取私人计算机系统访问权限的软件”,此外中国互联网协会[3]中将凡是涉及强制安装、难以卸载、浏览器劫持、广告弹出、恶意收集用户信息、恶意卸载、恶意捆绑以及其他侵犯用户知情权和选择权的恶意行为等八种现象的软件认定为恶意软件。一般来说,我们所说的恶意代码是病毒、蠕虫、特洛伊木马、间谍软件、僵尸、rootkit等恶意软件的总称。
分析恶意代码的方法一般可分为静态分析方法与动态分析方法,两者的区别在于被分析的这段程序、软件是否需要执行。顾名思义,静态分析指的是不需要执行程序这类情况。如采用反汇编等不执行恶意代码的分析方法对恶意代码进行分析,常用的如IDA[4]静态分析工具,该工具可以让分析人员静态分析二进制代码。静态分析的优点是分析较为全面,但是对于采用了变形、混淆等代码变形技术的恶意代码却很难进行准确的分析。而且,Moser等人[5]指出恶意软件作者了解到静态分析方法的缺陷后,可以针对缺陷编写能避开静态分析的恶意软件,所以进行恶意代码动态分析技术研究是很有必要的。
动态分析,指的是执行一个程序并对其运行过程中的活动进行分析。动态分析的方法有函数调用监控、函数参数分析、信息流追踪、指令追踪等多种方法[6],其中函数调用监控部分分为API监控、系统调用监控、Windows Native API监控。静态分析采用反汇编等方法分析代码特征,从语法特征的角度的确可以检测出部分恶意代码,但是语法无法从根本上反映出恶意代码的“恶意性”,不同的语法表达出的语义可以是相同的,故考虑从语义的角度入手,如监控代码运行时实际进行的函数调用,对于采用变形、混淆等技术改变其语法特征的恶意代码,仍然可以从其实际进行的函数调用监测出“恶意性”。故本文采用了函数调用监控中API监控方法进行动态行为分析检测研究。
本文的主要贡献如下:
(1)提出了一种改进的N-gram算法,通过添加特征值的出现频次信息,能提取出更加有效的N-gram特征;
(2)提出了恶意代码动态行为特征分析检测的基础框架,包括虚拟安全环境的搭建、恶意样本的获取及其动态特征提取模块、特征模型的建立及分析模块;
(3)利用多种机器学习方法对得到的n-gram特征进行了分析检测,得出了准确率达90%的检测效果。
1 相关工作
恶意软件检测方面已经有多种研究技术。Chess等[7]使用沙盒技术来检测病毒,他们证明了病毒检测一般而言是不可判定的。Christodorescu等[8]使用静态分析技术检测恶意代码,文中实现的SAFE可以有效处理大多数恶意代码采用的混淆技术。Christodorescu等[9]提出的方法在检测使用混淆技术的恶意代码上效果很好,不过该方法在进行分类上的时间需要1分钟以上,这就使得该方法在商业防病毒检测上的实用性大大降低。Kruegel等[10]针对混淆程序使用的是控制流图和统计方法。Agrawal等[11]对于恶意软件变种同样采用了控制流及数据流分析,并使用了正规化矩阵距离进行相似性判断。Bergeron等[12]通过使用关键API以及安全策略检测恶意代码,不过他们的方法对于混淆程序无效。Martignoni等[13]使用实时程序检测方法来检测内存中的反混淆,文中实现Omni Unpack对于已知以及未知的混淆器均能检测出其混淆行为。张等[14]在通过识别恶意代码调用的系统函数或库函数来检测其变种。文献[15]使用挖掘算法检测混淆的恶意代码。他们的方法对于混淆的恶意代码效果很好,不过对于单个程序的检测时间需要数秒钟时间。文献[16]采用静态分析方法检测系统调用位置,通过运行时监测来确保静态分析中所有的系统调用来自同一位置。
尽管传统的基于签名的恶意软件检测方法[17,18]在检测多态以及变形的恶意软件上存在困难,仍然有一些工作[19,20,21]旨在提高基于特征的检测,其中文献[21]通过测度已知病毒与可疑代码之间的相似度来检测多态恶意软件。该方法的基础思想是同一恶意软件的不同变种均含有共同的核心特征,从原始恶意软件提取出该特征用来进行匹配。尽管该工作能提高传统基于特征的检测方法对多态恶意软件的检测效果,但是并不适用于未知恶意软件。而Santos等[22]针对基于特征的方法对未知恶意软件效果一般,提出一种基于操作码序列频率的模型,并结合机器学习方法,对未知恶意软件的检测效果较好。同样针对基于特征方法进行改进的Anderson等[23]通过收集动态指令构建特征图,并计算相似性矩阵进行不同图之间的相似性比较。
在一些研究工作[24,25,26,27]中也有使用数据挖掘以及机器学习方法的,其中文献[24]使用了1971个良性软件和1651个恶性软件来提取n-gram特征。在使用API调用作为特征方面有Ye等[28]做的工作,他们使用的数据集含有12 214个良性程序以及17366个恶意软件,从API调用中提取出特征,在此基础上使用数据挖掘技术。Alazab等[29]基于Windows API调用频率,结合包括朴素贝叶斯、K近邻、决策树等多种数据挖掘方法,提出了一种新的检测0day恶意软件的手段。另外Trinius等[30]提出了一种新的恶意行为表示方法———恶意指令集,该方法专门为使用数据挖掘及机器学习技术分析设计,对于这一类分析可以提高运行效率及分析结果准确度。
Canali等[31]在行为模型对恶意软件检测造成的影响方面进行了系统的研究,对于基于系统调用的恶意软件检测科学研究有一定价值。
2 算法改进
2.1 n-gram算法介绍
一个n-gram指的就是一串标记中的一段子串,该子串含有n个连续的标记,此处的标记在不同的应用场景下有不同的意义。n-gram已经被应用到众多领域,最早应该是应用于文本分析中,文献[32]即是利用n-gram来对文本进行分类,实现了脱离文本语言的效果,即分类不用考虑文本是由何种语言构成的。
将一串数据转化为n-gram,这样可以将这串数据表示为向量形式,从而能更好地与其他数据串进行比较。另外,我们也可以将两组数据的n-gram分布进行比较从而判断这两组数据的相似度。一组数据的n-gram分布指的是这组数据中所有n-gram的各自个数。在文献[33,34]中,标记的含义是字节,即n-gram中单个gram指的就是单字节。为了获得这种用字节n-gram对可执行程序的表示,我们需要从程序中提取出每一种存在的字节序列,并计算它们出现的频次。对于一段二进制程序P,它可以被表示为由w个字节b组成的一段序列,即P=(b1,b2,b3,…,bw-1,bw),一段字节n-gram序列g被定义为一个可执行文件中一小段连续字节,这里gP,并且g=(b11,b2,b3,…,bn-1,bn),其中n即为字节n-gram的长度。所以,程序P可用n-gram表示为P=(g1,g2,g3,…,gw-n,gw-n+1)。考虑如下的例子,八进制表示的代码段P=(2E,7A,94,05,86,FF,FF,FF)可以产生的bi-gram即2-gram,有如下7个,g1=(2E,7A),g2=(7A,94),g3=(94,05),g4=(05,86),g5=(86,FF),g6=(FF,FF),g7=(FF,FF)。
上面所举的例子n-gram中的n=2,事实上,n可以有不同的大小,当n=1时,指的就是unigram,也即是1-gram,当n=2时指的是bigram,当n=3时指的是trigram,n不小于4时一般就称为n-gram。n-gram模型在多种领域均有所应用,如n-gram用来对程序活动建模从而检测软件漏洞以及识别网络载荷中的恶意代码,其他情形还包括对恶意代码感染文档的检测以及基于触发系统调用的恶意进程的检测。
本文拟采用的API调用作为n-gram中的标记。程序运行时会调用一系列的API调用,使用窗口大小为n的滑动窗口对单个程序的API调用序列进行扫描,每次窗口中的长为n的序列就为一个n-gram。举一个例子来说,一个应用程序按以下顺序调用了7个API调用:5,7,3,11,5,7,3。如果此处n=3,那么对于这个应用程序的n-gram模型即为集合M={<5,7,3>,<7,3,11>,<3,11,5>,<11,5,7>,<5,7,3>},以上的数字代表的是API调用,相同数字即表示相同的API调用,由该程序的3-gram集合可知集合中的元素可以相同,上例中3-gram<5,7,3>即出现了两次。
在获得了部分恶意程序以及部分良性程序的n-gram模型之后,我们可以将所有的恶意程序的n-gram模型合成为一个代表恶意的n-gram模型总集MU=M1+M2+M3+…+Mm-1+Mm,所有的良性程序的n-gram模型也可以合成为一个代表良性程序的n-gram模型总集BU=B1+B2+B3+…+Bb-1+Bb,其中下角标m、b分别表示的是恶意程序、良性程序的个数。直观上来讲,MU-BU所得的即是代表恶意软件特征的n-gram,因为这部分n-gram只出现在MU中,而在BU中没出现。
2.2 n-gram算法改进
2.1节介绍了n-gram的基本概念,同时定义了将API调用用作标记时的n-gram以及如何获取代表恶意特征的n-gram。上述方法获得的n-gram特征主要是从直观上代表了恶意代码的恶意性,而且和测试集合中元素的选取也有关系,可能得到的结果中的n-gram并不能代表恶意性,因为仅仅只是出现在恶意程序集合而未出现在良性程序集合中不足以视为特征。Hwang等[35]中提出使用FER(frequent episode rule)建模方法,其中每一条规则的建立均与事件出现的概率、频次有关,在规则建立上的强度加强了,该文是针对网络流量进行建模,本文拟对n-gram进行改进来用以完善恶意代码分析检测中的API建模。
对于程序单次运行所产生的API调用序列,将其中每一个API标记为类似A1、A2、A3等,这些API调用可以分为以下几种类型:
(1)文件管理:涉及文件操作的动作,比如创建文件、打开文件、搜索文件。
(2)进程线程:进程线程有关操作,如创建多个线程。
(3)注册表:涉及注册表操作的动作,如创建一个注册表项。
(4)网络管理:涉及网络连接的操作,如访问某个URL地址。
(5)内存管理:涉及内存操作的动作,如为进程创建堆,获取当前进程的一个堆。
(6)动态链接库:涉及动态链接库的动作,如载入指定的动态链接库。
如2.1节中介绍的例子,如果窗口大小为3,则第一个窗口覆盖了该API调用序列中位于最前的3个调用,即A5、A7、A3,调用A5引发了调用A7、A3,由此即可得到如下的一条改进n-gram规则:
上述规则中的c表示置信度,s表示支持系数,w表示窗口大小,f表示最小出现次数。对于规则式(1),s表示的是API调用A5出现的概率,c表示的是A7、A3出现在A5后的概率,可以形式化地表示为s=Prob[A5],c=Prob[A5,A7,A3)]/Prob[A5]。
支持系数s表示的是该条规则在所有监测记录的API调用序列中出现的概率,置信系数c表示的是在规则左侧出现的前提下该条规则出现的概率。参数s、c均有一个最小的阈值s0、c0,最小出现次数f表示序列建立成规则需要出现的最小次数。
下面通过一个实际API调用序列进行说明,该例子来自于Backdoor.Win32.Agent.egt实际运行时产生的序列。API调用A5在这里为Create File A,而其后的A7、A3分别为Write File A、Close Handle。当窗口大小为3时,Create File A后紧接着发生Write File A、Close Handle的置信度为c=0.16,该条规则的支持系数为s=0.01。最小出现次数f=10,表示需要达到10次该条规则才能生成,放入规则库。
通过定义联合规则,我们可以获取一个API调用序列内部各调用之间的相互关系,如下式所示,
其中Li(1≤i≤n)、Rj(1≤j≤n)是API调用记录中有序的调用序列。式子右部的参数(c,s,w,f)在前文已经进行过说明。
3 系统架构
本节将描述我们如何进行恶意代码特征提取以及特征建模,并在此基础上提出了一个完整的恶意代码动态行为特征分析检测基本体系框架。
为了能获得恶意代码的动态行为特征,我们使用了虚拟机环境,虚拟机使用的是Virtual Box,虚拟操作系统为Windows XP,之所以选择虚拟环境是因为在进行动态运行恶意代码时实际主机可以避免影响,虚拟机具有存储快照的功能。即使在虚拟机中运行的恶意代码对操作系统产生了修改甚至是破坏行为,使用快照功能存储的备份也可以将系统快速恢复到运行恶意代码前的状态。事实上,虚拟机的这一功能除了能保护实际系统不被修改破坏之外,还可以保证不同恶意代码运行的环境是完全相同的,从而保证了实验结果的可比性。
事先通过Open Malware[36]收集了Agent、Allaple、Bagle、Mydoom、Mytob、Netsky六类恶意代码,将收集的代码样本置于虚拟环境中,使用API Monitor[37]对每个样本逐个进行监控,对单个进程获得的监控信息如表1所示。表1中左列为可以记录的项,右列为相应项的例子,共可记录的八项分别为序号(#)、运行时刻(Time of Day)、线程号(Thread)、模块名称(Module)、调用API(API,含名称及参数)、返回值(Return Value)、错误类型(Error)、运行时长(Duration)。
由于提取的原始特征含有信息量较大,在进行下一步处理之前需要删除无用信息,恶意代码动态行为语义特征主要体现在调用的API上,故只需提取其中API项即可,且API项中只需API名称,不考虑API参数。
图1所示即为本文提出的恶意代码动态行为特征分析检测基本架构。
第一步搭建用于动态运行恶意代码的虚拟环境,前文已经叙述虚拟环境对于检测恶意代码的作用。
第二步于虚拟环境下执行恶意代码,并提取恶意代码动态行为语义特征。本文选取恶意代码执行期间调用的API序列作为语义特征。
第三步是使用提取的语义特征进行模型建立,即将原始的、未组织的语义信息元素建立为加工过且结构化的语义模型。本文对恶意代码运行期间的API调用序列进行加工,抽象为能代表其语义特征的改进n-gram。
第四步为建立模型库,进行相似性检测。可采用的检测方法根据特征不同而有所不同,如使用机器学习(决策树、k-近邻、神经网络等)方法进行检测。
4 实验结果分析
4.1 检测效果分析
以下实验采用了数据可以分为两部分,即恶意程序部分及良性程序部分,其中恶意程序共分为6类,每类20个,良性程序共20个。在恶意程序检测研究方面暂时没有标准的数据集,实验中所测的恶意程序样本均来自Offensive Computing[30],6种病毒分别为Agent、Allaple、Bagle、Mydoom、Mytob、Netsky,良性程序均选取的是Windows中的程序。
由第3节系统架构中描述可知,API Monitor监测到的原始数据项比较多,需要通过进一步的筛选从去除无关的特征,得出API数据项部分,由于只需要API名称,所以也去除了API参数。N-gram在实验中n取值为3,所以每一个特征项为一个3-gram,即顺序相连的三个API名称。通过对以上样本检测结果的分析,最后得出的特征项共有492个。
K折交叉验证在机器学习中应用很多,本实验也采用该方法来进行实验结果验证。这里k取值为10,即所有的数据会被划分10次,每一次均分为10份,其中9份用作训练集,1份用作测试集。
用来进行分类的工具为Weka[38],实验中将选择决策树[39,40]、K近邻、朴素贝叶斯[41]及贝叶斯网络、支持向量机[42]四种分类器来进行测试。
为了检测分类器的有效性,我们使用TPR、FPR、Precision、F-Measure几个指标进行衡量。
TPR,即True Positive Rate,本实验中表示所有恶意代码能被检测出的概率,用公式表示即为TPR=TP/(TP+FN),其中TP为正确检测到的恶意代码数量,FN表示被判定为良性程序的恶意代码数量。
FPR,即False Positive Rate,表示所有良性程序被检测为恶意程序的概率,用公式表示即FPR=FP/(FP+TN),其中FP为被检测未恶意程序的良性程序的数量,TN为被正确认定为良性程序的数量。
Precison,即准确率,表示被检测为恶意程序的程序中真正是恶意程序的程序所占的比例。即Precison=TP/(TP+FP)。
F-Measure,用来综合衡量Precison和Recall(召回率,与TPR计算相同),是P和R的加权调和平均。用公式来表示即为F-Measure=[(a^2+1)×P×R]/[a^2×(P+R)],其中P表示准确率,R表示召回率,参数a取1时,表示最为常见的F1-Measure,F1=2PR/(P+R)。
由表2可知,不同的分类器对于实验数据的检测效果相差比较大,根据最大的F1-Measure值可知,决策树J48分类器的效果最好,且其TPR接近90%,FPR小于7%,准确率也超过了91%。K-近邻分类器中K=1时,检测效果最好,K=3时次之,K=2,4,5,6,7时均全部检测出了恶意程序,不过仅检测出了25%的良性程序,K=8,9,10时,所有程序均被认定为恶意程序。支持向量机中Linear Kernel的效果最好。
4.2 性能分析
不同的分类器在可处理的数据类型、建模机制等方面存在区别,所以需要使用一些评定指标来比较不同分类器的性能,4.1节已经对分类器的准确率等可反映检测效果的指标进行了数据比较。本节将在使用不同分类器的情况下对建模时间进行测试,使用的实验数据及分类器仍然与4.1节相同。实验所用计算机的相关配置如下,处理器型号为Intel Core i5-2400 CPU,主频为3.10GHz,记录建模时间的工具为Weka。基于改进n-gram模型特征的各分类器建模时间如表3所示,对每一个分类器分别做10次建模,记录其所用建模时间,记录的精度为0.01秒,取平均值后即得表3中的平均建模时间。
由表3可知,建模时间较久的一个是贝叶斯网络,主要是采用Hill Climber和TAN的贝叶斯网络,建模时间分别为0.781秒、1.392秒。K近邻的建模时间用时最少,在实验精度(0.01秒)下用时不足0.01秒,故表3中记录为0,实验对K近邻方法从K=1到K=10均进行了测试,由于建模时间均不足0.01秒,故表3只使用了一行记录KNN分类器的建模时间。决策树和支持向量机的建模时间基本上在几十毫秒的量级,两者之间决策树的建模速度要稍快于支持向量机。
综合检测效果以及建模时间来看,贝叶斯网络由于建模时间较长,且检测效果并不明显具有优势,所以性能最差。决策树:J48和支持向量机:Linear Kernel的效果最好,尤其是决策树:J48,表2中FPR接近最优,其他三项参数也均为最优,同时该方法的建模时间耗时较少,在实验样本特征数量前提下为10毫秒级别,与其他几个分类器相比,在时间可接受的情况下获得了较好的检测效果。
4.3 对比分析
Alazab M等[43]同样使用了n-gram模型,该方法首先使用PEi D和IDA Pro对可执行文件进行反汇编,在得到的汇编码基础上得出API调用特征,根据API调用特征得出n-gram特征,分类器选用的是支持向量机。文献[43]实验结果显示,随着n的增大,准确度逐渐减小,FPR逐渐增大。
本文同样是先获取了恶意样本及良性样本的API调用特征,并根据调用特征得出了各样本的3-gram特征及其相关联的概率、频次信息,概率、频次信息可以反映连续gram之间的上下文语义,从而增强了特征,为检测时提供了更多的信息。之后对得到的特征信息分别采用了四大类分类器进行建模,并进行了交叉验证。表4为本文部分实验结果与文献[43]实验结果(n=3)的比较。
由表4可知本文使用的决策树在准确度上较Alazab.M等[29]的方法优,同时FPR也较小。
Kolbitsch C等[38]使用的是行为图进行建模,使用的检测工具为Anubis,选取的恶意样本的家族与本文相同,针对Allaple、Mydoom两类恶意样本的检测有效率(即TPR)达到了0.90,不过其平均TPR只有0.64,远远低于本文中DT:J48的TPR(0.892)。
由本文与文献[43]的对比分析可知,结果的差异可能来自于方法的不同,即本文在n-gram基础之上添加了特征的概率、频次信息,从而使得检测效果有相应提高,另一方面也有可能是待测样本的差异造成的检测效果不同。而与文献[44]的比较可知,虽然两种方法不同,不过对于同样家族类型的待测样本,本文提出的方法得出的检测效果较优。
5 结语
恶意软件已经变得越来越有危害,所以提高反病毒扫描器对于多态、变形等恶意代码的检测能力是极其重要的。然而目前商用的反病毒扫描器一般只是基于特征码(静态特征)进行扫描,难以检测多态版的恶意软件。研究新一代的基于动态特征的反病毒扫描器将成为今后反病毒厂商的重点工作。
本文着眼于恶意软件动态行为语义特征,利用恶意代码分析检测中常用的n-gram模型,并添加n-gram的频率信息进行特征选取,提高特征选取的代表性,进一步还提出了用于恶意代码动态行为特征分析检测的基本框架,最后利用多种机器学习算法对样本进行分类检测。
下一步可以进行的工作包括对采用混淆、多态等变形技术的恶意代码的检测分析,将检测效果与静态分析检测进行比较。同时标准的恶意程序代码库也需要建立,便于不同恶意代码分析检测技术进行比较。
摘要:针对恶意代码分析检测中静态分析技术难以检测变形、多态代码的问题,提出一种提取恶意代码语义动态特征的方法。该方法在虚拟环境下提取恶意代码动态特征,从而达到保护物理机的目的,提取出的原始特征经过进一步的筛选处理,得到各个代码样本的API调用序列信息。为了使得特征更加有效,改进传统n-gram模型,添加n-gram频次信息以及各API间的依赖关系,构建改进的n-gram模型。实验结果分析部分采用机器学习方法,分别使用了决策树、K近邻、支持向量机、贝叶斯网络等分类器对选定的样本特征进行10折交叉验证。实验结果显示该特征选取在决策树J48下的检测效果最好,可以有效检测采用混淆、多态技术的恶意代码。
特征代码 篇5
提示:您可以先修改部分代码再运行,复制代码和保存代码功能在Firefox下无效,
网页特效(鼠标特效代码):显示鼠标坐标信息代码
股票代码决定市值? 篇6
截至首日收盘,Midcoast, Springleaf,58.com以及OCI的股价涨了,而Essent, Brixmor, Mavenir和 Twitter的股价都跌了。我们很难在其中找到什么输赢的规律,许多专家也认为不可能在短期内准确预测股价。
短期投资无疑是一场赌博,但你仔细看上述股价大涨的公司,会发现其中的奥秘:它们的股票代码都可以按英语发音规则拼读,不用再添加其他发音。可读的OCIP, MEP, LEAF, and WUBA (即OCIP,Midcoast,Springleaf,和58.com) 不同程度地上涨了,而不可读出的ESNT, BRX, MVNR和TWTR (Essent, Brixmor, Mavenir还有Twitter的代码)则下跌了0.5个百分点到14个百分点。
回顾1990—2004年间在美上市的近一千只股票的表现,这种发音带来的神奇效果在IPO最初的那几天非常明显;时间越久,这种趋势会变弱,但没有消失。假如投资者投资1000美元在可读代码的股票上,第二天,可能会比等额投资在不可读代码股票上的人多挣85美元。而且,公司名字越简单的(如NOVA公司),其业绩表现也优于名字复杂的企业,比如匈牙利电讯股份公司(Magyar Telekom Tavkozlesi Reszvenytarsasag)。
为什么投资者一方面要分析大量数据来了解公司的实际状况,另一方面也要基于股票代码来作出决定?答案就是,人们通常偏爱那些简单的事物,读那些读得出的股票代码要相对容易些。同样的逻辑也解释了为什么人人都喜欢名字比较简单的人。在通常情况下,越简单的东西似乎越熟悉、风险小、威胁小、更可信。有些投资者潜意识里会按名字选股,结果命中率也蛮高的。
特征代码 篇7
1基于日志中异常信息故障模式提取
1.1函数异常结构描述
通常入口函数表示某个功能操作开始,以入口函数为起点的调用链上的函数都是与入口函数对应功能操作相关,如果调用链上的函数执行异常,将导致该功能执行失败,即系统发生故障。通过分析函数调用链上抛出的异常信息,获取系统故障的根因。当程序故障被激活后,产生的差错可以有多种形式存在,如:返回码、共享变量、异常等等。在异常得到捕捉之后,程序以不同的方式告知用户错误的发生,如HTTP响应消息、日志等。
1.2异常特征信息与故障模式对应关系
故障模式与异常特征之间的关系:在本文中异常特征主要指的是异常和异常的具体描述信息,采用一个三元组FF表示FF =< E,D,O > 。E表示异常类型,D表示异常的详细信息,O表示激发异常的操作
每入口函数存在一个调用链,从代码结构而言,代码的重用性和可读性,调用链上函数可能只被一个入口函数调用,也可能被多个入口函数调用。当把函数中的一条异常和异常信息作为异常特征信息,此时异常特征信息与故障模式为多对多的关系,在系统诊断过程中获取到的异常特征信息难以确定故障模式。因此在函数中提取异常特征信息时加入功能操作字段,形成异常特征信息三元组FF,使得故障模式与异常特征的关系为一对多的关系,此时获取一条异常特征信息时就能确定一个故障模式。如Open Stack在创建虚拟机操作,一条故障模式为“由于无效请求创建虚拟机失败”,那么其异常特征为<由于输入参数不对创建虚拟机失败;由于网络的格式不对无效的请求;IP无法申请无效的请求>。
1.3异常特征信息的提取
程序中异常被抛出,如果异常所在函数存在捕捉对应异常机制,或者该函数调用链中函数中存在捕捉对应异常机制,那么该异常能够被捕捉。为了获取系统故障时的异常特征,通常采用故障注入的方法,加速系统的失效。在其发生故障时系统能够抛出异常,以及异常详细信息;因此,通过分析源代码,获取源代码中的抛出异常类型、异常描述信息、诱发异常的操作的对应关系,从而建立异常特征元组FF。获取系统异常特征信息的步骤:
Step1:获取故障模式库中某条故障模式j对应功能的入口函数fin。
Step2:获取入口 函数fin调用的函 数序列为 { fin,...,fi,...,fn}i ∈ N 。
Step3:获取每个函数中的抛出的异常以及抛出异常的原因描述
Step4:那么一个 故障模式 对应的异 常特征集 为FMin={ fein,...,fei,...,fen}i ∈ N 。
2实验分析
通过代码分析我们得出的结论为在Open Stack中,系统异常能够被捕获,那么被捕获的异常以及异常描述信息能够通过日志模块,写入到日中。为了验证基于异常提取异常特征的方法,能够覆盖所有由异常引发的故障。利用Under Stand代码分析工具提供的接口,分析Open Stack代码中是否所有的抛出的异常都能够被捕捉。
对于Open Stack而言,抛出异常的代码是以Raise开头,捕获异常的代码以except进行异常捕获。首先获取源代码中能够抛出异常点Elo cal=< Ec,Ei> ,Ec表示抛出异常类型,Ei表示抛出异常所在的函数位置,异常点组成的结合Eraise;然后获取源代码中所有except代码块所能捕获到的异常点的集合Eexcept;获取系统 中没能捕 捉到的异 常集合Eno_exception= Eraise- Eexcept,获得的实验室数据如表1。对于异常处理结构性好的代码,几乎抛出的所有异常都能够被捕捉,从实验数据看Open Stack的异常处理几乎都能被捕捉。
由异常提取的异常特征信息的验证,采用故障注入的方法,抽取各个模块故障模式库中的故障模式,注入该故障模式所表示的故障,收集日志中的错误信息,查看错误信息是否对应该故障的异常特征。通常的日志字段都包括日志的时间、日志等级、日志信息的具体描述;系统故障信息通常能够在ER-ROORR等级的日志中找到。
以上为run_instance中的一段代码,该段代码中的异常类型Build Abort Exception,在该代码中对应的异常类型具体描述为变量msg对于的值。对于异常函数Build Abort Exception()或者异常函数Build Abort Exception(msg)获取函数中的参数作为异常的具体描述信息。据此从代码获取的错误行为特征为:
<run_instance,Build Abort Exception,Instancedisappeared during build>
对于该异常点而言,注入故障收集到的日志信息如图3所示:
从日志中获取的异常特征为<run_instance,Build Abort Ex-ception,Instance disappeared during build>,其结果与代码分析结果一致。系统故障诊断结果分析,以Open Stack创建虚拟机为入口函数,通过分析源代码,得到该入口函数调用链上的异常抛出点的个数为83个(其覆盖的功能模块主要为nova和key-stone模块)。通过故障注入实验,获取错误的日志信息,从日志信息中提取出相应的异常特征元组,与通过代码分析获取的特征元组一致。
3结束语
程序错误行为的分析可以指导软件开发人员如何准确地处理软件中可能发生的错误,辅助可靠性研究人员在软件差错注入过程中合理地生成差错集合。本文提出了一种基于异常代码结构的异常特征提取方法,对于开源的系统而言,可以通过分析源代码的方法提取系统的异常特征,减少提取故障模式的执行难度。
摘要:针对开源云平台系统,该文通过分析系统中的异常处理机制以及日志系统,提出了基于异常信息描述的故障模式提取方法;并过理论分析系统日志能够记录的异常信息特征;系统异常处理机制抛出的异常特征;并结合实验获取日志中能够记录所抛出异常信息的比例,以及提取的异常特征与故障模式的对应关系,从而提出一种基于日志中的异常描述信息,从而进行系统故障诊断。
乔丹矩阵代码“蜕变”创意科技 篇8
决赛当天,运动装组的自由设计师张涵的作品《蜕变-极光》获得金奖;天津工业大学的王梓旭的作品《THE FAST AND THE FURIOUS》获得银奖;武汉纺织大学王朋的作品《蜕变·型变》获得铜奖。运动鞋组则由来自北京服装学院的史玉磊的作品《D·NA》获得金奖;内蒙古师范大学国际现代设计艺术学院的郝艳茹的作品《行生代》获得银奖,北京服装学院的冯国强的作品《飞鹰》获得铜奖。
作为被业内广泛关注和认可的运动装备设计赛事,“乔丹杯”一直秉承挖掘原创设计力量的理念,鼓励具有突破性和创新性的作品。本届大赛以“紧扣国际运动装的潮流脉搏,发掘中国运动装备的设计内涵,提升中国运动装备的国际地位”为宗旨,是中国运动装备领域唯一最权威的运动装设计大赛。
中国真维斯杯休闲装设计大赛华丽收官
10月29日下午,第22届中国真维斯杯休闲装设计大赛总决赛在北京798中央大厅隆重举行。从东、南、西、北四大分赛区成功晋级的20组设计新秀齐聚一堂,火热对决。经过刘元风、祁刚和王玉涛等9位服装设计界资深专家的严格评定,来自四川师范大学服装学院的王一顺以一组炫动时尚的设计作品《新鲜》成功问鼎金奖,大赛的其他各单项奖也悉数产生。
本次中国真维斯杯休闲装设计大赛以“乐·潮”为主题,由中国服装设计师协会、中国服装协会、真维斯国际(香港)有限公司主办,中国纺织服装教育学会、香港时装设计师协会共同协办。自1993年开赛以来,已成功举办了22届。作为服装设计界毫无争议的最具影响力的设计赛事,大赛始终本着回馈社会的宗旨,为有志青年提供发挥潜能、展现才华的舞台。大赛每年参赛的院校超过200所,今年的参赛作品更是达到6979份,再创新高。
比赛现场,观众除了欣赏到炫彩夺目的设计新作,还与新生代偶像乔任梁零距离接触。同时,还举行了真维斯及菲尔品牌的春夏走秀炫目进行。紧贴潮流的款式、青春亮丽的设计令人目不暇接,让在场观众对即将上市的春夏装新品产生了无限的期待。
欧迪芬“20年盛典show”如约登场
“欧迪芬”杯2013中国内衣设计大赛如约登场。在题为“20年盛典show”的设计大赛总决赛盛大开启之际,在中国服装设计师协会与欧迪芬的共同倡议下,来自北京、上海、深圳的一线设计师们,共同发起“绿色时尚”宣言。
经过几个月的评选,“欧迪芬”杯2013中国内衣设计大赛排名在本届时装周期间终于揭晓。最终,来自南昌大学共青学院的石磊的作品《迷幻》获得金奖和制作工艺奖;来自武汉纺织大学的李章的作品《魅媚》和来自浙江理工大学服装学院的高海兵的作品《如梦令》分别获得了银奖;台湾辅仁大学织品服装学系研究所的王依洁的作品《烟花礼赞》、东北师范大学美术学院的宗欣琪的作品《优雅魅惑》和中央民族大学美术学院的刘宇航的作品《鼎新魅影》分别获得了铜奖。