精华内容
下载资源
问答
  • 行业分类-物理装置-Windows10+PE系统的定制方法、装置和计算机设备.zip
  • 这篇文章将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。这些基础性知识不仅和系统安全相关,同样与我们身边的APP、常用软件及操作系统紧密联系,希望这些知识对您有所帮助,更...

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

    作者前文介绍了PE文件格式,熟悉各种PE编辑查看工具,针对目标EXE程序新增对话框等;这篇文章将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。这些基础性知识不仅和系统安全相关,同样与我们身边的APP、常用软件及操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了《软件安全》视频、安全网站和参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

    从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!

    接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~

    作者的github资源:

    前文分析:

    声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)


    一.PE病毒概念

    什么是PE病毒?
    PE病毒又称为Win32 PE病毒,或称为Win32病毒。它指所有感染Windows下PE文件格式文件的病毒。因为它通常采用Win32汇编编写,而且格式为PE文件,因此而得名。PE病毒是以Windows PE程序为载体,能寄生于PE文件或Windows系统的病毒程序。 真正的病毒技术在PE病毒中才会得到真正的体现,所以对于一个黑客、骇客或者是热衷于病毒分析技术的程序员,是非常有必要进行学习PE病毒的编写的。

    PE病毒数量非常之多,下面介绍三种经典的病毒。

    • CIH病毒
      早期病毒,全球第一个可以破坏计算机硬件的病毒,它会破坏主板的BIOS,对其数据进行擦写修改。CIH病毒是一种能够破坏计算机系统硬件的恶性病毒。这个病毒是TW陈盈豪在念书期间制作,后通过网络传播到全世界各个角落。CIH的载体是一个名为“ICQ中文Chat模块”的工具,并以热门盗版光盘游戏如“古墓奇兵”或Windows95/98为媒介,经互联网各网站互相转载,使其迅速传播。传播的主要途径主要通过Internet和电子邮件,当然随着时间的推移,其传播主要仍将通过软盘或光盘途径。CIH病毒曾入榜全球十大计算机病毒之首,该病毒引起了许多重要部门的严密关注。

    在这里插入图片描述

    • 熊猫烧香
      熊猫烧香(Worm.WhBoy)是一款拥有自动传播、自动感染硬盘能力和强大的破坏能力的病毒,它不但能感染系统中exe、com、pif、src、html、asp等文件,它还能中止大量的反病毒软件进程并且会删除扩展名为gho的文件。该文件是一系统备份工具GHOST的备份文件,使用户的系统备份文件丢失。被感染的用户系统中所有.exe可执行文件全部被改成熊猫举着三根香的模样。2006年10月16日由25岁的湖北武汉李俊编写,2007年1月初肆虐网络,它主要通过下载的文件传染传播。

    在这里插入图片描述

    • WannaCry蠕虫
      2017年5月12日,WannaCry蠕虫通过永恒之蓝MS17-010漏洞在全球范围大爆发,感染大量的计算机。WannaCry勒索病毒全球大爆发,至少150个国家、30万名用户中招,造成损失达80亿美元,已影响金融、能源、医疗、教育等众多行业,造成严重的危害。
      WannaCry是一种“蠕虫式”勒索病毒软件,由不法分子利用NSA泄露方程式工具包的危险漏洞“EternalBlue”(永恒之蓝)进行传播。该蠕虫感染计算机后会向计算机中植入敲诈者病毒,导致电脑大量文件被加密。WannaCry利用Windows系统的SMB漏洞获取系统的最高权限,该工具通过恶意代码扫描开放445端口的Windows系统。被扫描到的Windows系统,只要开机上线,不需要用户进行任何操作,即可通过共享漏洞上传WannaCry勒索病毒等恶意程序。

    在这里插入图片描述


    什么叫感染?
    说到病毒,不得不提感染。感染是指在尽量不影响目标程序(系统)正常功能的前提下,而使其具有病毒自身的功能。什么叫病毒自身的功能呢?一个病毒通常包括如下模块:

    • 感染模块: 被感人程序同样具备感染能力
    • 触发模块: 在特定条件下实施相应的病毒功能,比如日期、键盘输入等
    • 破坏模块: 网络攻击行为,推荐攻击链或ATT&CK
    • 其他模块

    如果我们要编写PE病毒,则需要掌握以下的关键:

    • 病毒的重定位
    • 获取API函数地址
    • 文件搜索
    • 内存映射文件
    • 病毒如何感染其他文件
    • 病毒如何返回到Host程序

    二.PE病毒的分类

    以感染目标进行分类,包括:

    (1) 文件感染
    将代码寄生在PE文件,病毒本身只是PE文件的一部分,依赖于感染目标,通常也叫HOST文件,控制权获得也是以目标程序运行来获得的。分为:

    • 传统感染型:以Win32汇编程序编写为主
    • 捆绑释放型:编写难度较低,通过高级语言均可编写,将目标程序和病毒程序捆在一起,和捆绑器有相似之处

    (2) 系统感染
    将代码或程序寄生在Windows操作系统,该类病毒越来越多,它不感染具体文件,但是它会在操作系统中保存自己的实体。同时也可以通过系统启动的方法来获取控制权。传播途径包括:

    • 即时通信软件,如QQ尾巴
    • U盘、光盘
    • 电子邮件
    • 网络共享
    • 其他途径

    三.传统文件感染型

    1.感染思路

    作者前面详细分析了PE文件格式,参考文章:

    当我们了解PE文件格式之后,要了解PE文件感染型病毒就非常容易了。如下图所示,左边是一个正常的PE文件,右边是PE病毒感染该程序时的修改,可以看到病毒代码在最后面,通常它是一种新节的形式。我们知道PE文件是由多个节组成的,病毒代码为了融入目标程序会以节的形式,同时修改PE文件头。

    在这里插入图片描述

    对感染来说,它一方面需要使得对方具备自己的功能,另一方面也不破坏对方程序的功能。所以病毒代码执行完毕之后,它必须要将控制权交给原始程序,从而防止病毒被发现。

    • 优点: 被感染后的程序主题依然是目标程序,不影响目标程序图标,隐蔽性稍好
    • 缺点: 对病毒代码的编写要求较高,通常是汇编语言编写,难以成功感染自校验程序

    2.PE病毒典型案例

    下面是演示案例,感染本目录下的test.exe文件,它没有破坏性,tset.exe被感染后,首先执行病毒代码,然后执行自身代码。如下图所示,存在四个文件。其中main.exe是PE病毒程序,它会感染当前目录下名为“test.exe”的文件。这里仅是测试PE病毒感染代码,没有破坏功能。

    • calc.exe:计算器
    • notepad.exe:记事本
    • test.exe:测试PE文件
    • main.exe:PE病毒程序

    在这里插入图片描述

    第一步,我们尝试打开test.exe文件。它是一个正常的PE文件,前面的文章也分析过,它包括两个弹窗,如下图所示。

    在这里插入图片描述

    在这里插入图片描述

    第二步,使用OD打开test.exe如下图所示,发现起始地址为0x00401000,该exe程序大小为2.50KB。

    在这里插入图片描述

    第三步,运行main.exe程序,它是PE病毒。注意,它会弹出如下图所示对话框,这是为了方便演示,而真实的PE病毒不会提示你信息。程序是两位大佬所写,其中一位是Hume前辈,另一位 ^ _ ^

    在这里插入图片描述

    同时,如果360会查杀该病毒,添加信任即可。但当我们在真实恶意样本分析时,一定要在虚拟机等有保护环境下进行。

    在这里插入图片描述

    IDA分析mian.exe如下图所示:

    在这里插入图片描述

    第四步,此时test.exe文件大小已经增加为6.50KB,说明其已经被恶意感染。

    在这里插入图片描述

    双击test.exe显示如下图所示,它会先弹出一个感染测试对话框,然后才是接下来的正常程序对话框。

    在这里插入图片描述

    在这里插入图片描述

    用OD动态分析,发现程序入口地址是0x004042DC。说明该程序先执行PE病毒,之后才执行正常的程序,而真实的PE病毒不会只简单的弹出提示窗口,而会隐蔽的进行一些破坏或收集信息。

    在这里插入图片描述

    第五步,将被感染的“test.exe”重命名为“test-ok.exe”,然后将记事本修改为“test.exe”,因为我们的代码只感染当前目录下“test”命名的文件。

    在这里插入图片描述

    接着运行“test-ok.exe”程序,发现打开记事本也会弹出如下图所示的对话框,接着才是记事本,说明该程序也被感染。

    在这里插入图片描述

    在这里插入图片描述

    第六步,通过同样的方法感染计算器程序,如下图所示。

    在这里插入图片描述

    在这里插入图片描述

    写到这里,该案例就演示完毕,这是一个传统典型的PE病毒感染示例。


    3.关键技术

    (1) 重定位

    重定位在前面讲PE文件格式化时介绍过,尤其DLL文件常见重定位。因为DLL文件会加载到不同的位置,如果再按照VA地址定位会出现差错,所以会出现重定位。对于病毒程序也是一样的,它有相应的代码去感染目标程序,而目标程序有很多,病毒程序写在目标程序什么位置呢?这就需要病毒代码去定位目标程序的位置,就要利用重定位技术。

    • 关键点:病毒代码目标寄生位置不固定
    • shellcode类似:通常需要注入远程系统,但这段代码在远程系统什么位置有时并不能确定,另外远程系统的环境有时也不能准确感知,故需要使用重定位和API函数自获取技术

    ① 为什么需要重定位呢?
    下面是一段源代码(PE最小文件案例),通过mas32编译生成的目标程序。源代码非常简单,就是调用invoke,通过invoke调用MessageBox函数,包括四个参数;程序第二个语句是invoke调用退出。这里弹出对话框涉及两个字符串szCap和szMsgOK。

    • invoke MessageBox, NULL, addr szMsgOK, addr szCap, 40h+1000h
    • invoke ExitProcess, NULL

    在这里插入图片描述

    当该程序编译之后,反汇编结构显示如下图所示,比如Start位置,MessageBox函数包括四个参数,我们采用PUSH压入堆栈,再CALL调用该函数。

    • push offset off_00401000
    • push offset off_00401014

    图中红色圆圈显示的是PE文件代码的二进制部分,它是一个VA的地址,即RVA+ImageBase。程序在编译后,某些VA地址(如变量Var 004010xxh)就已经以二进制代码的形式固定,这就是需要重定位的原因。

    在这里插入图片描述

    下图展示正常情况的ImageBase,值为400000H。比如HEX数据为“00104000”,由于高位在后面,所以对应的地址是“00 40 10 00”。

    在这里插入图片描述

    如果ImageBase为600000H,则代码不做重定位,PUSH压入堆栈的值为401000和401014。而此时的值什么也不是,通过数据窗口定位地址发现不存在。左下角可以看到,00601000位置才是存放的数据。所以,重定位需要将这里的40修改为60。

    在这里插入图片描述

    总之,如果病毒代码插入位置不固定,也会遇到类似的问题。病毒代码必须通过重定位解决类似的问题。


    ② 下面看看病毒代码植入HOST文件后的位置差异。
    左边是病毒在感染前的VAR位置,其地址为004010xx;当这段代码插入到另一个HOST文件后,如右图所示,变量的实际位置和预期位置出现了差异,而重定位的关键是知道这个差异是多少,后续遇到的各种变量或地址都可以通过这种差异方式校正。

    • 重定位本质:修正实际地址与预期地址的差异

    在这里插入图片描述

    但是根据HOST特征逐一硬编码这种方式不太可取,其繁琐且未必准确,所以采用另一种方法,病毒代码运行过程中自我重定位。

    下图展示了病毒代码自我重定位的过程。

    • 第一步,计算差异值;
    • 第二步,调用call delta将下一条语句开始位置压入堆栈,此时堆栈顶端存放的是pop ebp语句,它在内存中是真实的地址;
    • 第三步,做sub减法操作,ebp减去offset delta;
    • 第四步,当需要重定位时,比如使用varl变量,重定位通过ebp+offset来消除差异,此时eax中存放varl在内存中的真实地址。

    CALL语句功能:

    • 将下一条语句开始位置压入堆栈
    • JMP到目标地址执行

    在这里插入图片描述


    (2) API函数自获取

    首先介绍下PE文件函数节的功能。

    • 当调用外部DLL中的API函数时,通过引入函数节将这种关系定义出来;系统加载时就能加载对应的DLL文件并找到相应的API函数,再将地址写入到PE文件的引入函数表中;程序运行时就直接从引入函数表中取地址进行调用,这是正常的PE文件运行过程。通常函数节是由目标程序作者编写。

    但对于病毒程序来说,它是一段代码,当它感染另外一个程序时,它是否能修改目标程序的引入函数节,而使得其可以服务病毒代码呢?从原理上来说,这是可以实现的,但非常复杂,因为要在引用函数节添加东西一定会导致其他结构的变化,需要做很多的修正工作,这也可能破坏原有功能。所以对于病毒来说,它需要自己去获取API函数地址,并且没有引入函数节的支撑,但它又必须要使用很多API函数来实现病毒功能。

    • 关键点:需要使用的API函数,但无引入函数节支撑
    • shellcode类似:需要使用API函数自获取技术来确定注入远程系统的位置

    ① 如何获取API函数地址呢?

    • DLL文件的引出函数节
    • Kernel32.dll:核心API函数为 GetProcAddress和LoadLibraryA
    • GetProcAddress函数:包括两个参数,模块基地址和想要获取API函数名称,它将动态获得DLL函数的入口地址
    • LoadLibraryA函数:将制定的DLL动态链接库加载到内存中,返回值为DLL文件加载到内存中的基地址

    ② 当我们获得GetProcAddress和LoadLibraryA地址后,想获取任何一个API函数地址都可以。那么,怎么获取这两个函数的地址呢?

    • 首先,获得kernel32.dll的模块加载基地址
      一种方法是采用硬编码(兼容性差),另一种方法通过Kernel模块中的相应结构和特征定位
    • 其次,通过Kernel32.dll的引出目录表结构定位具体函数的函数地址

    ③ 接着,我们看看获取Kernel32模块基地址的典型方法。

    • 定位Kernel32模块中任何一个地址,然后按照模块首地址特征(对齐于10000H,PE文件开始标识MZ)向低地址遍历定位PE文件头
    • Kernel32模块内的地址从何处获得?
      – 程序入口代码执行时Stack顶端存储的地址
      – SEH链末端
      – PEB相关数据结构指向了各模块地址
      – Stack特定高端地址的数据
      注意:不同操作系统存在差别

    在这里插入图片描述


    (3) 目标程序遍历搜索

    通常以PE文件格式的文件(如EXE、SCR、DLL等)作为感染目标,其关键点为全盘查找或者部分盘符查找,遍历算法包括递归或非递归。在对目标进行搜索时,通常调用两个API函数:

    • FindFirstFile
    • FindNextFile

    搜索目标进行感染算法如下:

    在这里插入图片描述


    (4) 文件感染

    感染的关键是病毒代码能够得到运行,常用方法包括:

    • 选择合适的位置放入病毒代码(已有节、新增节)
    • 将控制权交给病毒代码,如修改程序入口点AddressofEntryPoint,或者在原目标代码执行过程中运行病毒代码(EPO技术,EntryPoint Obscuring)

    同时,病毒代码执行时,程序的正常功能不能被破坏,即控制权的交换。

    • 感染时,记录原始“程序控制点位置”
    • 病毒代码执行完毕之后,返回控制权
    • 避免重复感染,感染标记

    在这里插入图片描述

    感染文件的基本步骤为:

    • ①判断目标文件开始的两个字节是否为“MZ”
    • ②判断PE文件标记“PE”
    • ③判断感染标记,如果已被感染过则跳出继续执行HOST程序,否则继续
    • ④获得Directory(数据目录)的个数(每个数据目录信息占8个字节)
    • ⑤得到节表起始位置(Directory的偏移地址+数据目录占用的字节数=节表
      起始位置)
    • ⑥得到目前最后节表的末尾偏移(紧接其后用于写入一个新的病毒节)节表起
      始位置+节的个数*(每个节表占用的字节数28H)=目前最后节表的末尾偏移
    • ⑦开始写入节表和病毒节
    • ⑧修正文件头信息

    四.捆绑释放型

    捆绑释放型感染实现起来比较简单,目前很大一部分病毒程序都采用这种方法。捆绑释放型感染时将目标HOST程序作为数据存储在病毒体内,当执行病毒程序时,它先执行病毒程序,然后还原并执行HOST文件,从而保证被感染的程序本身能正常运行,不会引起一些异样。

    • 熊猫烧香病毒
      左边是一个正常程序(QQ),感染之后会将病毒放在前面,正常程序放在后面,程序运行之后,病毒会拿到控制权。但是程序图标会显示前面的病毒程序,显示熊猫烧香,这也是一个明显的被感染特征。

    • 优点: 编写简单、效率高,可感染自校验程序

    • 缺点: 被感染后的程序主体是病毒程序,易被发现(程序叠加+释放执行),程序图标问题

    在这里插入图片描述


    五.系统感染型

    系统感染型本身不对PE文件做任何感染操作,但它感染的目标是操作系统,也是一种寄生类的方式,只是寄生目标有所不同。这类病毒通常为独立个体,不感染系统内的其他文件。

    两个关键问题:

    • 如何再次获得控制权——自启动
      由于该程序不感染PE文件,它没有HOST文件,所以如何再次获得控制权是一个关键性问题,也是目标很多病毒程序设计时不得不考虑的问题。此时和操作系统自启动相关,病毒必须依赖于该机制再次获得控制权。
    • 如何传播
      可移动存储介质(U盘、移动硬盘刻录光盘等)
      网络共享
      电子邮件或其他应用

    1.控制权再次获取

    下面简单讲解控制权再次获取的自启动方式。首先看看操作系统启动流程:

    • BIOS --> 硬盘MBR --> 活动分区DBR --> 系统内部

    整个启动流程也是控制权传递的过程,包括现在提出的可信计算,也是对控制权一步一步的校验,控制流程的数据完整性或行为的校验。对于操作系统本身,它的启动方式很多,系统内部包括:

    • 注册表中的键值
    • 系统中的特定位置
    • 配置文件
    • 特定路径的特定文件,如Explorer.exe(显示桌面)

    下图展示了Autoruns软件看到Windows操作系统进行自启动的选项。如果病毒本身能很好地结合这套机制,它可以做的事情非常多,并且具有很好的隐蔽性。

    在这里插入图片描述

    其他启动方式:

    • 利用系统自动播放机制Autorun.inf
      比如U盘病毒或光盘病毒就是利用U盘或光盘的自动播放功能。目前,也有一些U盘插入之后,不需要你去双击这个U盘,里面的程序就会自启动。

    • 在其他可执行文件嵌入少量触发代码
      修改引入函数节启动DLL病毒文件(添加相应结构,初始化代码触发)
      在特定PE文件代码段插入触发代码等(只需定位可执行程序并运行)

    • DLL劫持:替换已有DLL文件
      很多应用程序或操作系统执行时,都会去执行DLL文件,如果病毒将自身做成一个DLL文件,同时将系统DLL文件替换。可想而知,系统启动时,它是根据文件名启动的,此时病毒DLL文件就会拿到控制权,如果拿到控制权之后再进一步装载原始DLL文件,这样系统的本身机制也不会受到影响,隐蔽性更强。该方法非常常见,甚至有一些病毒程序将反病毒软件可依赖的DLL文件替换。


    2.病毒的传播方式

    一切可对外交互的渠道都可传播,包括:

    • 各类存储设备(软盘、光盘、U盘、移动硬盘、智能设备)
    • 各类网络通信方式(QQ、MSN、Email、淘宝旺旺、微信、微博等)
    • 各类网络连接方式(有线、wifi、蓝牙等)
    • 各类网络应用(迅雷、BT等)

    在这里插入图片描述

    邮件蠕虫越来越常见,其中以邮件附件的形式进行传播较多。附件中可能包含病毒包括exe文件、rar文件、pdf文件、doc文件、xls文件、jpg文件、chm文件等。下图是一个包含病毒的邮件附件,显示为一个word文档,后缀名doc,图标显示也是word。但它的真实后缀是scr(屏保),它其实是利用了一种技术,在文件名里插入翻转字符,然后将翻转字符之后的其他字符进行了翻转,它的完整文件名应该是“5月TW行lmcod.scr”。这也是一种欺骗性很强的攻击手法。

    在这里插入图片描述

    再补充一个通过可移动存储设备传播的非感染式病毒,即Autorun.inf。右图显示了Autorun.inf文件,如果文件存在U盘根目录,当我们双击这个U盘时,它就会触发对应的病毒,如果选择U盘盘符右键打开或打开资源管理器,这是进入的也是病毒程序。当然下面的演示是计算器程序。

    [AutoRun]
    open=mspaint.exe
    shell\open=打开(&O)
    shell\open\Command=calc.exe
    shell\open\Default=1
    shell\explore=资源管理器(&X)
    shell\explore\Command=calc.exe
    

    在这里插入图片描述

    还有一类是伪装的文件夹,如下图所示photo.exe文件,当Windows操作系统默认不显示“.exe”时,它就能伪装成文件夹,当我们双击之后就会运行病毒,同时可以打开某个文件夹进行隐蔽。

    在这里插入图片描述

    最后,补充“摆渡”知识点,这种攻击行为经常发生在一些具有特殊目的病毒程序身上。期望通过可移动的媒介来渗透一些平时不联网的电脑中,并从中获取数据,利用摆渡的方式植入病毒或木马到内网,比较典型的案例就是Stuxnet。

    在这里插入图片描述

    下图展示了Stuxnet震网事件的漏洞利用过程和启动方式,传统的Autorun方式很容易被禁止掉,而Stuxnet利用的是lnk漏洞(MS10-046),它会在目标U盘下放入lnk快捷方式及病毒程序(如DLL文件)。不管通过什么方式进入U盘,lnk文件会被解析从而触发漏洞,导致U盘中的病毒程序被执行。

    在这里插入图片描述


    六.总结

    写到这里,这篇文章就介绍完毕,通过这些PE病毒原理、分类及感染方式的讲解,有利于大家去做一些拓展和思考,也体现出当下的网络形式,存在很多安全隐患,安全防御是非常必要的。

    • PE病毒概念
    • PE病毒的分类
    • 传统文件感染型
      感染思路
      PE病毒典型案例
      关键技术
    • 捆绑释放型
    • 系统感染型
      控制权再次获取
      病毒的传播方式

    学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,感谢师傅、实验室小伙伴的教导,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。

    欢迎大家讨论,是否觉得这系列文章帮助到您!如果存在不足之处,还请海涵。任何建议都可以评论告知读者,共勉~

    2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

    (By:Eastmount 2021-02-01 星期一 夜于贵阳 http://blog.csdn.net/eastmount/ )


    参考文献:
    [1] 武大《软件安全》课程
    [2] MOOC《软件安全之恶意代码机理与防护》
    [3] PE文件格式分析 - Erio
    [4] 第二章PE文件结构解析 - 百度文库

    展开全文
  • 这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与...这篇文章将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。基础性文章,希望对您有所帮助~

    这是作者网络安全自学教程系列,主要是关于安全工具和实践操作的在线笔记,特分享出来与博友们学习,希望您喜欢,一起进步。前文分享了XSS跨站脚本攻击案例,主要内容包括XSS原理、不同类型的XSS、XSS靶场9道题目、如何防御XSS。这篇文章将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。基础性文章,希望对您有所帮助~

    作者作为网络安全的小白,分享一些自学基础教程给大家,主要是关于安全工具和实践操作的在线笔记,希望您们喜欢。同时,更希望您能与我一起操作和进步,后续将深入学习网络安全和系统安全知识并分享相关实验。总之,希望该系列文章对博友有所帮助,写文不易,大神们不喜勿喷,谢谢!如果文章对您有帮助,将是我创作的最大动力,点赞、评论、私聊均可,一起加油喔~

    展开全文
  • 熊猫烧香病毒IDA和OD逆向分析–病毒释放过程(下) [系统安全] 十五.Chrome浏览器保留密码功能渗透解析、蓝屏漏洞及某音乐软件漏洞复现 [系统安全] 十六.PE文件逆向基础知识(PE文件解析、PE编辑工具使和PE结构修改) ...

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

    作者前文介绍了三个漏洞,包括Chrome浏览器保存密码渗透解析、通过Chrome浏览器实现Win10蓝屏、音乐软件解密功能复现。这篇文章将介绍基础知识,详细讲解PE文件格式,熟悉各种PE编辑查看工具,针对目标EXE程序新增对话框等,这也为后续PE病毒和恶意代码的攻防打下扎实基础。这些基础性知识不仅和系统安全相关,同样与我们身边的APP、常用软件及系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。

    使用工具包括:

    • PEView、Stud_PE
    • UltraEdit、010Editor
    • Ollydbg、x64dbg
    • exeScope
      待分析程序:
    • hello-2.5.exe

    在这里插入图片描述

    从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!

    接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~

    作者的github资源:

    前文分析:

    声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)


    一.PE文件基础

    什么是PE文件?
    PE文件的全称是Portable Executable,意为可移植的可执行的文件,常见的EXE、DLL、OCX、SYS、COM都是PE文件,PE文件是微软Windows操作系统上的程序文件(可能是间接被执行,如DLL)。

    EXE文件格式:

    • DOS:MZ格式
    • WIndows 3.0/3.1:NE(New Executable)、16位Windows可执行文件格式

    为什么要重点学习这种文件格式呢?

    • PE文件是可移植、可执行、跨Win32平台的文件格式
    • 所有Win32执行体(exe、dll、kernel mode drivers)
    • 知道PE文件本质后,能更好进行恶意样本分析、APT攻击分析、勒索病毒分析
    • 了解软件加密和加壳的思想,能够PJ相关的PE文件
    • 它是您熟悉Windows操作系统的第一步,包括EXE程序怎么映射到内存,DLL怎么导入等
    • 软件逆向工程的基本思想与PE文件格式息息相关
    • 如果您想成为一名黑客、系统安全工程师,那么精通PE文件是非常必要的

    可执行程序是具有不同的形态的,比如用户眼中的QQ如下图所示。

    在这里插入图片描述

    在这里插入图片描述

    本质上,QQ如下图所示。

    在这里插入图片描述


    PE文件格式总体结构
    接着让我们来欣赏下PE文件格式总体结构图,包括:MZ头部、DOS stub、PE文件头、可选文件头、节表、节等。

    在这里插入图片描述

    本文的第二部分我们将对PE文件格式进行详细解析。比如,MZ头文件是定位PE文件头开始位置,用于PE文件合法性检测。DOS下运行该程序时,会提示用户“This Program cannot be run in DOS mode”。

    在这里插入图片描述

    PE文件格式与恶意软件的关系

    • 何为文件感染或控制权获取?
      使目标PE文件具备或启动病毒功能(或目标程序)
      不破坏目标PE文件原有功能和外在形态(如图标)等
    • 病毒代码如何与目标PE文件融为一体呢?
      代码植入
      控制权获取
      图标更改
      Hook

    PE文件解析常用工具包括:

    • PEView:可按照PE文件格式对目标文件的各字段进行详细解析。
    • Stud_PE:可按照PE文件格式对目标文件的各字段进行详细解析。
    • Ollydbg:可跟踪目标程序的执行过程,属于用户态调试工具。
    • UltraEdit \ 010Editor:可对目标文件进行16进制查看和修改。


    二.PE文件格式解析

    该部分实验内容:

    • 使用010Editor观察PE文件例子程序hello-2.5.exe的16进制数据
    • 使用Ollydbg对该程序进行初步调试,了解该程序功能结构,在内存中观察该程序的完整结构
    • 使用010Editor修改该程序,使得该程序仅弹出第二个对话框

    1.010Editor解析PE文件

    PE文件结构如下图所示,我推荐大家使用010Editor工具及其模板来进行PE文件分析。
    MZ头部+DOS stub+PE文件头+可选文件头+节表+节

    在这里插入图片描述


    (1) 使用010Editor工具打开PE文件,并运行模板
    该PE文件可分为若干结构,如下图所示。

    在这里插入图片描述


    (2) MZ文件头(000h-03fh)
    下图为hello-2.5.exe的MZ文件头,该部分固定大小为40H个字节。偏移3cH处字段Offset to New EXE Header,指示“NT映象头的偏移地址”,其中000000B0是NT映象头的文件偏移地址,定位PE文件头开始位置,用于PE文件合法性检验。

    在这里插入图片描述

    000000B0指向PE文件头开始位置。

    在这里插入图片描述


    (3) DOS插桩程序(040h-0afh)
    DOS Stub部分大小不固定,位于MZ文件头和NT映象头之间,可由MZ文件头中的Offset to New EXE Header字段确定。下图为hello-2.5.exe中的该部分内容。

    在这里插入图片描述


    (4) PE文件头(0b0h-1a7h)
    该部分包括PE标识、映像文件头、可选文件头。

    • Signature:字串“PE\0\0”,4个字节(0b0H~0b4H)
    • 映象文件头File Header:14H个字节(0b5H~0c7H)
      偏移2H处,字段Number of Section 给出节的个数(2个字节):0003
      偏移10H处,字段Size of Optional Header 给出可选映象头的大小(2个字节):00E0
    • 可选映象头Optional Header:0c8H~1a7H

    在这里插入图片描述

    对应解析如下图所示,包括PE标识、X86架构、3个节、文件生成时间、COFF便宜、可选头大小、文件信息标记等。

    在这里插入图片描述

    010Editor使用模板定位PE文件各节点信息。

    在这里插入图片描述

    PE文件可选文件头224字节,其对应的字段信息如下所示:

    typedef struct _IMAGE_OPTIONAL_HEADER {
    
        WORD    Magic;                  /*机器型号,判断是PE是32位还是64位*/
        BYTE    MajorLinkerVersion;          /*连接器版本号高版本*/
        BYTE    MinorLinkerVersion;          /*连接器版本号低版本,组合起来就是 5.12 其中5是高版本,C是低版本*/
        DWORD   SizeOfCode;               /*代码节的总大小(512为一个磁盘扇区)*/
        DWORD   SizeOfInitializedData;        /*初始化数据的节的总大小,也就是.data*/
        DWORD   SizeOfUninitializedData;       /*未初始化数据的节的大小,也就是 .data ? */
        DWORD   AddressOfEntryPoint;          /*程序执行入口(OEP) RVA(相对偏移)*/
        DWORD   BaseOfCode;               /*代码的节的起始RVA(相对偏移)也就是代码区的偏移,偏移+模块首地址定位代码区*/
        DWORD   BaseOfData;               /*数据结的起始偏移(RVA),同上*/
        DWORD   ImageBase;               /*程序的建议模块基址(意思就是说作参考用的,模块地址在哪里)*/
    
        DWORD   SectionAlignment;           /*内存中的节对齐*/
        DWORD   FileAlignment;             /*文件中的节对齐*/
        WORD    MajorOperatingSystemVersion;    /*操作系统版本号高位*/
        WORD    MinorOperatingSystemVersion;    /*操作系统版本号低位*/
        WORD    MajorImageVersion;          /*PE版本号高位*/
        WORD    MinorImageVersion;          /*PE版本号低位*/
        WORD    MajorSubsystemVersion;        /*子系统版本号高位*/
        WORD    MinorSubsystemVersion;        /*子系统版本号低位*/
        DWORD   Win32VersionValue;          /*32位系统版本号值,注意只能修改为4 5 6表示操作系统支持nt4.0 以上,5的话依次类推*/
        DWORD   SizeOfImage;               /*整个程序在内存中占用的空间(PE映尺寸)*/
        DWORD   SizeOfHeaders;            /*所有头(头的结构体大小)+节表的大小*/
        DWORD   CheckSum;               /*校验和,对于驱动程序,可能会使用*/
        WORD    Subsystem;              /*文件的子系统 :重要*/
        WORD    DllCharacteristics;         /*DLL文件属性,也可以成为特性,可能DLL文件可以当做驱动程序使用*/
        DWORD   SizeOfStackReserve;         /*预留的栈的大小*/
        DWORD   SizeOfStackCommit;          /*立即申请的栈的大小(分页为单位)*/
        DWORD   SizeOfHeapReserve;          /*预留的堆空间大小*/
        DWORD   SizeOfHeapCommit;           /*立即申请的堆的空间的大小*/
        DWORD   LoaderFlags;             /*与调试有关*/
        DWORD   NumberOfRvaAndSizes;         /*下面的成员,数据目录结构的项目数量*/
        IMAGE_DATA_DIRECTORY DataDirectory[16];  /*数据目录,默认16个,16是宏,这里方便直接写成16*/
    } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
    

    (5) 节表(1a8h-21fh)

    • 表项大小固定,28H个字节;表项个数由映象文件头的字段Number of Section 给出。
    • 每个表项的起始位置起(8个字节),字段Name给出对应节的名称。
    • 每个表项的偏移14H处(4个字节),字段Offset to Raw Data给出对应节的起始文件偏移。

    在这里插入图片描述

    该结构包括3个节,对应上图的3个struct IMAGE_SECTION_HEADER,即“.test”、“.rdata”、“.data”节,其偏移地址对应下图紫色区域,分别是400、600、800的位置。

    在这里插入图片描述


    (6) 3个节

    • 400H-5ffH:代码节
    • 600H-7ffH:引入函数节
    • 800H-9ffH:数据节

    在这里插入图片描述

    注意,代码节“.text”前46H为数据,后面全是0位填充值,为了实现文件的200H对齐,所以代码节是400H到5ffH。

    在这里插入图片描述


    (7) 引入函数节
    ⽤来从其他DLL中引⼊函数,引入了kernel32.dll和user32.dll,这个节一般名为“.rdata”。引入函数是被某模块调用的但又不在调用者模块中的函数,用来从其他(系统或第三方写的)DLL中引入函数,例如kernel32.dll、gdi32.dll等。

    在这里插入图片描述

    010Editor打开如下图所示:

    在这里插入图片描述

    详细标注信息如下图所示:(图引自HYQ同学,再此感谢)

    在这里插入图片描述


    (8) 数据节
    数据节实际大小58h,对齐后大小200h,地址为800h-9ffh,包括对话框弹出的具体内容。

    在这里插入图片描述



    2.Ollydbg动态调试程序

    使用Ollydbg对该程序进行初步调试,了解该程序功能结构,在内存中观察该程序的完整结构。注意,内存对齐单位和文件对齐单位的不同,内容和文件中IAT表内容的不同。我们以hello-2.5.exe程序作为示例进行调试。

    第一步,打开OD加载PE文件。
    OD是一款PE文件动态调试器,此时程序断点自动停止在程序入口点00401000H位置。

    在这里插入图片描述

    在010Editor中,我们可以看到,该PE程序基地址是400000h,程序入口地址是1000h,两个相加为加载至内存中的地址,即401000h。

    在这里插入图片描述


    第二步,动态调试程序。
    当我们双击地址位置,则可以下断点且变红,比如0040100Fh。

    在这里插入图片描述

    接着查看对应调试快捷键,F7是单步步入,F8是单步步过。

    在这里插入图片描述

    我们直接按F8单步步过,此时的位置会CALL一个MessageBoxA函数。

    在这里插入图片描述

    直接单步步过,此时会弹出第一个对话框,点击“确定”按钮。

    在这里插入图片描述


    第三步,动态调试程序之数据跟随。
    接着我们看左下角部分的内存数据,在该区域按下“Ctrl+G”在数据窗口中跟随,输入基地址400000。

    在这里插入图片描述

    此时可以看到加载到内存中的数据,可以看到该数据与010Editor打开的PE文件数据一致的。

    在这里插入图片描述

    接着继续按F8单步步过弹出第二个窗口。

    在这里插入图片描述

    右上角是它寄存器的值,包括各个寄存器中的数据,我们实验中主要使用的寄存器包括EAX、ECX、EDX、EBX等。

    在这里插入图片描述

    接着步过0040102E,它是退出进程ExitProcess的位置,此时进程已经终止,如下图所示。

    在这里插入图片描述

    实验讲到这里,使用OD动态调试的PE文件的基础流程就讲解完毕,后续随着实验深入,我们还会使用该工具。



    3.仅弹出第二个窗口

    使用010Editor修改该程序,使得该程序仅弹出第二个对话框。思路为:修改程序的入口点地址。

    第一步,确定程序入口点地址。
    前面我们用010Editor(或PEView)确定了可选文件头中Adress od Entry Point这一项,里面的值是1000h,这个是RVA相对便宜地址,偏移在D8处大小为4字节。装载到内存后,程序入口点应该是401000h。

    在这里插入图片描述

    第二步,确定第二个对话框的偏移地址。
    然后看到OD里,为第二个call做传入参数的push语句从401016开始,故我们将1000改为1016即可弹出第二个窗口。

    在这里插入图片描述

    第三步,利用PE编辑工具修改程序入口地址。
    注意,可以在PE模板中修改该值,将AddressOfEntryPoint修改为1016h

    在这里插入图片描述

    第四步,双击运行仅弹出第二个对话框。

    在这里插入图片描述



    三.熟悉并分析PE文件的引出表

    实验内容如下:

    • 熟悉各类PE文件格式查看和编辑工具,如PEView、Stud_PE等
    • 结合hello-2.5.exe熟悉PE文件头部、引入表的结构,熟悉函数导入的基本原理
    • 找到系统System32目录下的user32.dll文件,用010Editor打开并分析该文件引出表,找出函数MessageBoxA的地址,并验证该地址是否正确

    在文件中的引入表结构:IMAGE_IMPORT_DESCRIPTOR

    在这里插入图片描述

    在内存中的引入表结构:IMAGE_IMPORT_DESCRIPTOR

    在这里插入图片描述



    1.PEView和Stud_PE查看文件

    (1) 使用PEView查看文件属性
    PEview.exe工具是一款可以进行PE文件解析的强大PE文件解析工具,通过PEview软件可以分析PE文件的详细格式。如下图所示,左边是相应结构,右边是对应的数据。PEView虽然能读写PE文件的数字化模板,但作者更推荐使用010Editor编辑。

    ImageBase: PE文件在内存中的优先装载地址。
    RVA地址:Relative Virtual Address,相对虚拟地址,它是相对内存中ImageBase的偏移位置。

    在这里插入图片描述

    比如PE文件头(IMAGE_NT_HEADERS)中,AddressOfEntryPoint为1000h,基地址为400000h。

    在这里插入图片描述

    下面是导入表信息:

    在这里插入图片描述

    第一条指令在内存中的地址计算方法如下图所示:

    在这里插入图片描述


    (2) 使用stud_PE查看文件属性
    该软件用于显示头部、DOs、区段、函数等信息,包括导入表、导出表等。

    在这里插入图片描述

    在这里插入图片描述

    显示对应的3个节信息。

    在这里插入图片描述

    显示该EXE程序加载的两个DLL文件及函数。

    在这里插入图片描述



    2.寻找函数MessageBoxA的地址

    user32.dll是Windows用户界面相关应用程序接口,用于包括Windows处理、基本用户界面等特性。这里采用PEview+STUD_PE方法分析,找到系统System32目录下的user32.dll文件,用010Editor打开并分析该文件引出表,找出函数MessageBoxA的地址,并验证该地址是否正确。

    第一步,使用PEView打开user32.dll,查找MessageBoxA的RVA。
    找到系统System32目录下的user32.dll文件并打开,在AddressOfNames数组(Name Pointer Table)中找到MessageBoxA字符串,其数组序号为01DD

    在这里插入图片描述

    在Ordinal Table找到序号(Value)01DD项,Data为01DC;而由于Ordinal Table中Data从0开始,故在Address Table中找到第01DC+1,即01DD项。

    在这里插入图片描述

    Address Table中01DD项的Data为407EA,也即MessageBoxA的RVA(相对虚拟地址)。

    在这里插入图片描述

    第二步,得到RVA为38D9后,用Stud_PE打开user32.dll,使用Raw与RVA转换功能,得其VA为77D507EA

    在这里插入图片描述

    第三步,用OD打开hello-2.5.exe,查看MessageBoxA,两个值并不一致。
    用OD调试程序的时候发现其VA地址其实是74DA0F40,与计算出的77D507EA位置有所偏差,然后查找资料发现这应该是操作系统处于安全原因改变了真实地址。

    在这里插入图片描述

    之后我在虚拟机的XP环境下进行了相同的实验,其值为77D507EA,完全一致。注意,user32.dll来自XP操作系统。

    在这里插入图片描述

    最终得出结论:XP之后的操作系统对真实地址做了相关的保护。



    四.PE文件新增对话框

    实验内容是手工修改hello-2.5.exe程序,使得其可以弹出第三个对话框(提示框标题为“武汉大学信安病毒实验”,内容为:你的姓名+日期)。基本思路为:

    • 修改.text段:添加MessageBoxA的函数调用
    • 修改.data段:添加MessageBoxA的参数信息
    • 修改.text和.data的节表信息

    第一步,使用OD打开目标PE文件。
    如下图所示,包括第一个对话框、第二个对话框和退出进程。

    在这里插入图片描述


    第二步,修改数据区“.data”。

    • Title:RVA是0040 3059
    • Text:RVA是0040 306A

    注意,从下图所示的位置开始修改,地址为0040 3059,需要留一个00字符,表示截断符。同样,title和text之间也要用00隔开。

    在这里插入图片描述

    右键选择“二进制”->“编辑”,其快捷键为Ctrl+E。

    在这里插入图片描述

    输入标题“武汉大学信安病毒实验”。

    在这里插入图片描述

    此时标题已经成功写入,接着空一个00,从下图所示位置接着写入正文内容,地址为0040 306A。

    在这里插入图片描述

    接着写入内容,如下图所示。

    在这里插入图片描述

    增加内容如下图所示:

    在这里插入图片描述

    注意,现在我们只是写入内存,而没有写入PE文件中。


    第三步,选中新增内容,右键点击“复制到可执行文件”。

    在这里插入图片描述

    此时显示如下图所示,成功复制到PE文件中。

    在这里插入图片描述


    第四步,修改代码段。
    我们需要在代码段第二个对话框之后插入新的数据,从而弹出第三个对话框。需要将下图阴影部分整体后移。

    在这里插入图片描述

    首先,在0040101B位置进行数据跟随。

    在这里插入图片描述

    数据跟随显示如下图所示,代码段中每个弹框是22字节,从“68 40”开始,共计两个弹框。

    在这里插入图片描述

    接着我们将退出函数的所有字节复制出来,为了整体后移。
    6A 00 E8 01 00 00 00 CC FF 25 00 20 40 00 FF 25 0C 20 40 00 FF 25 08 20 40

    在这里插入图片描述

    接着空22字节用于填写第三个对话框信息,将复制的二进制数据粘贴出来(Ctrl+E),如下图所示。

    在这里插入图片描述

    将第一个对话框22字节代码复制至第三个对话框,如下图所示:

    在这里插入图片描述


    第五步,修改.text段。
    第二个栈的参数是它的Title,需要将偏移地址设置为对应的位置。

    在这里插入图片描述

    右键“数据窗口中跟随”->“立即数”。

    在这里插入图片描述

    第三个窗口标题的地址修改为“00403059”。

    在这里插入图片描述

    Ctrl+E修改为59。

    在这里插入图片描述

    修改第三个窗口Text地址为“0040306A”。

    在这里插入图片描述


    第六步,修改CALL对应的地址。
    注意,三个对话框CALL对应的E8值需要以00401056(user32.MessageBoxA)为基址。

    • 第一个对话框E8:00401056-00401016=40
    • 第二个对话框E8:00401056-0040102C=2A
    • 第三个对话框E8:00401056-00401042=14

    在这里插入图片描述

    修改如下图所示:

    在这里插入图片描述


    第七步,保存文件。
    选择“复制到可执行文件”->“所有修改”按钮。

    在这里插入图片描述

    点击“全部复制”。
    在这里插入图片描述

    最终保存修改的PE文件。

    在这里插入图片描述

    运行PE文件,成功弹出第三个框。

    在这里插入图片描述

    新增的内容如下图所示:

    在这里插入图片描述

    注意:

    • 检查在OD中所做的全部修改,是否保存到可执行文件中。
    • .text和.data节表中,表示节实际大小的字段“Virtual Size”应该做出修改,但不修改文件依然能正常运行。


    五.总结

    文章写到这里,就介绍完毕,本文主要讲解PE文件解析、PE编辑工具使用和PE结构修改,属于系统安全和PE逆向相关知识,希望对您有所帮助。内容包括:

    • PE文件基础
    • PE文件格式解析
      – 010Editor解析PE文件
      – Ollydbg动态调试程序
      – 仅弹出第二个窗口
    • 熟悉并分析PE文件的引出表
      – PEView和Stud_PE查看文件
      – 寻找函数MessageBoxA的地址
    • PE文件新增对话框

    后续将学习PE文件图标修改、对话框分析、EXE解析、加壳解密等。希望这系列文章对您有所帮助,同时真的感觉自己技术好菜,要学的知识好多。未知攻焉知防,人生漫漫其路远兮,作为初学者,自己真是爬着前行,感谢很多人的帮助,继续爬着,继续加油!

    欢迎大家讨论,是否觉得这系列文章帮助到您!如果存在不足之处,还请海涵。任何建议都可以评论告知读者,共勉~

    学安全一年,认识了很多安全大佬和朋友,希望大家一起进步。这篇文章中如果存在一些不足,还请海涵。作者作为网络安全和系统安全初学者的慢慢成长路吧!希望未来能更透彻撰写相关文章。同时非常感谢参考文献中的安全大佬们的文章分享,深知自己很菜,得努力前行。编程没有捷径,逆向也没有捷径,它们都是搬砖活,少琢磨技巧,干就对了。什么时候你把攻击对手按在地上摩擦,你就赢了,也会慢慢形成了自己的安全经验和技巧。加油吧,少年希望这个路线对你有所帮助,共勉。

    2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

    (By:Eastmount 2021-01-25 星期一 夜于武汉 http://blog.csdn.net/eastmount/ )


    参考文献:
    [1] 武大《软件安全》课程
    [2] 师姐PPT、师弟师妹PPT及视频
    [3] PE文件格式分析 - Erio
    [4] PE文件学习系列一为什么是PE - Egojit
    [5] 第二章PE文件结构解析 - 百度文库

    展开全文
  • 作者前文介绍了什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。这篇文章将详细解析数字签名,采用Signtool工具对EXE文件进行签名,接着利用Asn1View、PEVie、010...

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列。因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全、逆向分析和恶意代码检测,“系统安全”系列文章会更加聚焦,更加系统,更加深入,也是作者的慢慢成长史。换专业确实挺难的,逆向分析也是块硬骨头,但我也试试,看看自己未来四年究竟能将它学到什么程度,漫漫长征路,偏向虎山行。享受过程,一起加油~

    作者前文介绍了什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。这篇文章将详细解析数字签名,采用Signtool工具对EXE文件进行签名,接着利用Asn1View、PEVie、010Editor等工具进行数据提取和分析,这是全网非常新的一篇文章,希望对您有所帮助。 这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些知识对您有所帮助,更希望大家提高安全意识,安全保障任重道远。本文参考了参考文献中的文章,并结合自己的经验和实践进行撰写,也推荐大家阅读参考文献。

    从2019年7月开始,我来到了一个陌生的专业——网络空间安全。初入安全领域,是非常痛苦和难受的,要学的东西太多、涉及面太广,但好在自己通过分享100篇“网络安全自学”系列文章,艰难前行着。感恩这一年相识、相知、相趣的安全大佬和朋友们,如果写得不好或不足之处,还请大家海涵!

    接下来我将开启新的安全系列,叫“系统安全”,也是免费的100篇文章,作者将更加深入的去研究恶意样本分析、逆向分析、内网渗透、网络攻防实战等,也将通过在线笔记和实践操作的形式分享与博友们学习,希望能与您一起进步,加油~

    作者的github资源:

    前文分析:

    声明:本人坚决反对利用教学方法进行犯罪的行为,一切犯罪行为必将受到严惩,绿色网络需要我们共同维护,更推荐大家了解它们背后的原理,更好地进行防护。该样本不会分享给大家,分析工具会分享。(参考文献见后)


    一.PE文件数字签名过程

    1.基础概念

    PE文件数字签名能够有效保证文件未被非法篡改,安全软件通过验证文件是否有正规厂商的数字签名来降低误报。其基本流程如下图所示:

    签名:

    • 软件发布者使用散列算法(如MD5或SHA)计算PE文件的散列值。
    • 软件发布者使用私钥对散列值进行签名得到签名数据。
    • 将签名私钥对应的公钥和签名数据等以证书的形式附加在PE文件之中,形成经过数字签名的PE文件。
    • 软件发布者将经过数字签名的PE文件进行发布。

    验证:

    • 从PE文件证书中提取软件发布者的公钥、使用的散列算法、签名算法、原始散列值的签名数据。
    • 使用提取的公钥和对应签名验证算法将签名数据还原为原始PE文件的原始散列值。
    • 对现有PE文件使用同样的散列算法计算出对应的散列值。
    • 对比两个散列值是否一致,从而判断数据是否被破坏和篡改。

    在这里插入图片描述


    PE文件数字签名所使用的工具包括:

    • makecert.exe:生成数字签名证书
    • signcode.exe:数字签名工具
    • test.exe:被数字签名的目标PE文件
    • test.cer:数字证书文件
    • test.PVK:数字签名的私钥文件

    在这里插入图片描述

    我们首先需要通过makecert.exe工具生成证书test.cer和私钥文件test.PVK,接着调用signcode.exe工具对目标PE文件(test.exe)进行数字签名。其中,通过makecert.exe生成需要的证书常见参数如下:

    • -r: 自签名
    • -n: 证书名称,格式为-n “CN=名称, E=Email,O=组织名称,C=国家, S=省份(州), P=县城”
    • -a: 指定散列算法,其值必须是md5(默认值)或SHA1
    • -$: 指定证书的签名权限,其值必须是commercial(商业软件)或individual(个人软件)
    • -b: 证书有效期的开始时间,格式为mm/dd/yyyy
    • -e: 证书有效期的结束时间,格式为mm/dd/yyyy
    Error: Invalid algorithm
    Usage: MakeCert [ basic|extended options] [outputCertificateFile]
    Extended Options
     -sc  <file>         Subject's certificate file
     -sv  <pvkFile>      Subject's PVK file; To be created if not present
     -ic  <file>         Issuer's certificate file
     -ik  <keyName>      Issuer's key container name
     -iv  <pvkFile>      Issuer's PVK file
     -is  <store>        Issuer's certificate store name.
     -ir  <location>     Issuer's certificate store location
                            <CurrentUser|LocalMachine>.  Default to 'CurrentUser'
     -in  <name>         Issuer's certificate common name.(eg: Fred Dews)
     -a   <algorithm>    The signature algorithm
                            <md5|sha1>.  Default to 'md5'
     -ip  <provider>     Issuer's CryptoAPI provider's name
     -iy  <type>         Issuer's CryptoAPI provider's type
     -sp  <provider>     Subject's CryptoAPI provider's name
     -sy  <type>         Subject's CryptoAPI provider's type
     -iky <keytype>      Issuer key type
                            <signature|exchange|<integer>>.
     -sky <keytype>      Subject key type
                            <signature|exchange|<integer>>.
     -d   <name>         Display name for the subject
     -l   <link>         Link to the policy information (such as a URL)
     -cy  <certType>     Certificate types
                            <end|authority|both>
     -b   <mm/dd/yyyy>   Start of the validity period; default to now.
     -m   <number>       The number of months for the cert validity period
     -e   <mm/dd/yyyy>   End of validity period; defaults to 2039
     -h   <number>       Max height of the tree below this cert
     -r                  Create a self signed certificate
     -nscp               Include netscape client auth extension
     -eku <oid[<,oid>]>  Comma separated enhanced key usage OIDs
     -?                  Return a list of basic options
     -!                  Return a list of extended options
    

    2.数字签名操作

    第一步,打开CMD调用makecert.exe并输入命令生成证书文件。
    参数表示自签名、个人软件、授权者为YXZ、组织单位是WHU、国家及省份,散列算法采用md5,有效期是2020-03-16到2030-01-01。

    makecert -r -$ "individual" /sv "test.PVK" -n "CN=YXZ,O=WHU,C=China,S=Hubei" 
    -a md5 -b 03/16/2020 -e 01/01/2030 test.cer
    

    在这里插入图片描述

    需要注意设置密码如“123456”,成功之后,可以看到新增加的两个证书和私钥文件。

    在这里插入图片描述


    第二步,双击test.cer点击“安装证书”,并设置信任根证书机构。

    在这里插入图片描述

    信任之后,此时的证书是受信任且合法的,查看证书详细信息,能够看到签名算法md5RSA、散列算法md5、颁发者信息及有效期等,如下图所示。

    在这里插入图片描述


    第三步,利用signcode.exe工具进行数据签名。
    选择需要加密的“test02.exe”文件。

    在这里插入图片描述

    选择我们生成的数字证书“test.cer”和私钥文件“test.PVK”。

    在这里插入图片描述

    注意,这里的散列算法选择“SHA1”。这里的散列算法是PE文件的签名信息, 而之前makecert.exe设置的md5是证书的散列算法。

    在这里插入图片描述

    暂时不设置时间戳,最终成功为“test02.exe”进行数字签名。

    在这里插入图片描述


    第四步,打开test02.exe文件属性,可以看到它增加了一个“数字签名”的区域,并且能够看到此数字签名是正常的及详细信息。

    在这里插入图片描述


    第五步,我们采用PEView打开已签名和未签名的PE文件对比,发现CERTIFICATE Table区域为前面信息。

    在这里插入图片描述


    注意:图中PPT均为作者制作,相关视频在网易云中查看。



    二.PE文件签名数据提取

    PE文件数字签名信息存放在Certificate Table位置,同时PE文件可选文件头DataDirecotry第5项记录文件偏移及大小。下图为PE文件数字前面的PKCS#7格式。
    参考文献:https://docs.microsoft.com/zh-cn/windows/win32/debug/pe-format

    在这里插入图片描述


    1.PEView查看签名信息

    第一步,使用PEView查看签名的test02.exe文件,可以看到Certificate Table存储相关签名信息。

    文件开始位置:00000A00(长度:488H)

    • 表项长度:4字节,头部和签名数据的总长度
    • 证书版本:2字节,常见0x0200表示WIN_CERT_REVISION_2
    • 证书类型:2字节,常见0x0002表示包含PKCS#7的SignData结构
    • SignedData:包含PE文件Hash值的签名数据、软件发布者公钥,选用的签名及散列算法等。(在文件中为ASN.1编码)

    在这里插入图片描述

    对应的结构:

    在这里插入图片描述


    第二步,在PE文件可选文件头DataDirecotry第5项查看文件签名信息的偏移及大小。
    此时的偏移地址是“00000A00”、大小为488H,而未前面的PE文件其值均为0。

    在这里插入图片描述


    第三步,wRevision表示证书的版本号,wCertificateType表示证书类型,其值为0x0002,表示包含PKCS#7的SignedData结构。接下来我们对所提取的签名数据,就需要用该格式进行解析。

    在这里插入图片描述

    在这里插入图片描述



    2.010Editor提取签名数据

    第一步,通过010Editor打开签名后的test02.exe文件。

    在这里插入图片描述


    第二步,这里推荐读者在010Editor中导入PE文件解析模板,更方便读者对PE文件的解析。

    在这里插入图片描述

    模板运行结果如下图所示,我们可以查看各个区域的信息。后一篇文章将讲解PE文件的存储格式。

    在这里插入图片描述


    第三步,通过运行模板找到数字签名的偏移地址0A00h和大小488h。

    在这里插入图片描述


    第四步,定位到签名偏移地址00000A00,Certificate Table从第9个字节开始后为签名信息,将其复制另存为另一个文件,如“test02.dat”。

    在这里插入图片描述

    此时我们的签名信息成功导出,后续需要进行数据分析。



    三.PE文件签名数据分析

    PKCS#7 微软官方文档
    一个 PKCS#7 SignedData结构包括PE文件的哈希值,一个被软件出版厂商的私钥创建的签名,和将软件出版厂商的签名密钥和法人代表进行绑定的(系列)X.509 v3 证书。PKCS#7 1.5 版本规范定义了如下关于 SignedData 的 ASN.1(抽象语法符号)结构:

    在这里插入图片描述

    注意,导出的“test02.dat”签名数据为 ASN.1抽象结构,需要采用ASN1View或ASN1Dump进行解析,其效果如下图所示:

    在这里插入图片描述



    1.ASN1Dump分析签名数据

    第一步,调用ASN1Dump打开“test02.dat”解析基础数据。

    每个字段有对应的flag,比如:

    • 指定SignedData结构
      值为“1.2.840.113549.1.7.2”,表示采用PKCS#7结构
    • 生成签名的哈希算法
      MD5:1.2.840.113549.2.5
      SHA1:1.3.14.3.2.26
      SHA256 2.16.840.1.101.3.4.2.1
    • 签名属性
      SPC:1.3.6.1.4.1.311.2.1.4

    在这里插入图片描述


    第二步,获取证书颁发者信息,包括md5withRSA签名、证书颁发者YXZ、组织WHU、国家及省份。
    每块数据通常有一个标记变量,标记变量对应有相关值,比如颁发者标记2.5.4.3和颁发者YXZ、散列算法和散列值等。

    在这里插入图片描述


    第三步,其他相关信息。

    在这里插入图片描述


    核心数据包括:

    • 散列算法
    • 摘要数据
    • 公钥数据
    • 签名后数据

    在这里插入图片描述

    注意,RSA签名后的数据和公钥值会还原出来第一个hash值,摘要数据和散列算法将计算第二个hash值。如果两个值一致,则表示该PE文件在传输过程中未被篡改或破坏,且受信任;否则已经被破坏。

    在这里插入图片描述



    2.ASN1View提取证书及分析数据

    第一步,回顾我们前面的签名信息和证书信息,如下图所示。PE文章签名信息的散列算法是SHA1、签名算法是RSA,签名证书的散列算法是MD5。

    在这里插入图片描述


    第二步,采用ASN1View打开“test02.dat”。
    主要由三部分组成,左边是树形ASN1层次结构,右上部分是地址、数据和值,右下部分是对应的解析结构。接着回到最早的签名结构图,我们分别对每部分数据进行分析。

    在这里插入图片描述


    第三步,分析Contentinfo部分数据。
    该部分主要存储PE文件的hash值、以及标记变量、散列算法等。

    在这里插入图片描述

    比如sha1散列算法。

    在这里插入图片描述


    第四步,分析Certificates部分数据。
    该部分主要存储证书相关信息,包括证书发布者、证书时间戳等信息。注意,该部分内容可以直接导出,再和“test02.exe”的数字证书进行对比。

    在这里插入图片描述

    比如省份“Hubei”。

    在这里插入图片描述

    接下来,我们需要导出该部分的证书信息。下图的前4个字节为地址和大小,我们从“30 82”开始复制。这里采用010Editor工具复制。

    在这里插入图片描述


    第五步,采用010Editor导出证书部分数据,并进行对比实验。

    在这里插入图片描述

    对比从010Editor导出的“output.cer”证书和“test02.exe”数字签名信息,发现是一致的(包括公钥),该实验也证明了签名数据的第二部分为证书信息。

    在这里插入图片描述


    第六部分,分析Signerinfos部分数据。
    该部分主要存储签名使用者的信息、签名的hash、时间戳、UTC时间、摘要信息、签名算法等。
    在这里插入图片描述

    如下图所示,第三部分的长度为360,从“30 82”开始为第三部分的具体值。

    在这里插入图片描述

    重要的值包括:

    • 散列算法sha1

    在这里插入图片描述

    • 摘要数据:标记为messageDigest,对应的值存储在该节点的SET部分

    在这里插入图片描述

    • RSA签名后的数据

    在这里插入图片描述



    四.PE签名文件新增数据

    这里我提出一个问题:恶意软件是否能隐藏合法证书并进行签名呢?PE签名文件是否能新增数据而不影响签名的效果呢?

    Chrome浏览器中签名目录曾附加数据(配置数据或许可证信息),如GotoMyPc、PowerGrep、RegexBuddy等。那么我们是否也能完成相关的实验呢?
    参考文献:https://blog.didierstevens.com/2013/08/13/a-bit-more-than-a-signature/

    在这里插入图片描述


    当我们修改PE文件的签名数据或新增错误数据时,该PE文件的签名信息会显示被破坏。如何有效的新增数据呢?下面开始我们的实验。

    在这里插入图片描述



    第一步,用010Editor打开已签名的“test02.exe”文件,并导入PE模板。

    在这里插入图片描述


    第二步,修改PE文件数字签名的Certificate Table大小,我们将488h修改为498h,相当于增加16h。

    在这里插入图片描述


    第三步,并且在数字签名的末尾增加16h内容
    需要注意,增加的字节为8的倍数。

    在这里插入图片描述


    第四步,查看“test02.exe”属性,发现数字签名仍然存在且正常。

    在这里插入图片描述


    最终我们成功的在数字签名后增加信息,并且没有破坏数字签名。如果我们将恶意代码隐藏在该数字签名中,是不是其危害更大,如果能绕过杀毒软件并进行相关的hook或植入,是不是非常可怕呢?



    五.总结

    文章写到这里,就介绍完毕,本文主要讲解PE文件数字签名,并对其进行详细解析,属于系统安全和PE逆向相关知识,希望对您有所帮助。内容包括:

    • PE文件数字签名过程
    • PE文件签名数据提取
    • PE文件签名数据分析
    • PE签名文件新增数据

    文章同时也加深了读者对相关PE解析工具的使用理解,包括:

    • PEView
    • 010Editor及模板
    • makecert
    • signcode
    • ASN1Dump
    • ASN1View

    后续将学习PE文件结构知识、图标修改、对话框分析、EXE解析、加壳解密等。希望这系列文章对您有所帮助,同时真的感觉自己技术好菜,要学的知识好多。从网络安全到系统安全,从木马病毒到后门劫持,从恶意代码到溯源分析,从渗透工具到二进制工具,还有Python安全、安全论文、黑客比赛和漏洞分享。未知攻焉知防,人生漫漫其路远兮,作为初学者,自己真是爬着前行,感谢很多人的帮助,继续爬着,继续加油!

    欢迎大家讨论,是否觉得这系列文章帮助到您!如果存在不足之处,还请海涵。任何建议都可以评论告知读者,共勉~

    2020年8月18新开的“娜璋AI安全之家”,主要围绕Python大数据分析、网络空间安全、人工智能、Web渗透及攻防技术进行讲解,同时分享CCF、SCI、南核北核论文的算法实现。娜璋之家会更加系统,并重构作者的所有文章,从零讲解Python和安全,写了近十年文章,真心想把自己所学所感所做分享出来,还请各位多多指教,真诚邀请您的关注!谢谢。

    (By:Eastmount 2020-02-09 晚上7点写于贵阳 http://blog.csdn.net/eastmount )



    参考文献:
    [1] 武大《软件安全》课程
    [2] [网络安全自学篇] 五十七.PE文件逆向之什么是数字签名及Signtool签名工具详解(一)
    [3] http://www.microsoft.com/whdc/winlogo/drvsign/Authenticode_PE.mspx
    [4] https://blog.didierstevens.com/2013/08/13/a-bit-more-than-a-signature/
    [5] 对Windows 平台下PE文件数字签名的一些研究 - DoveFeng
    [6] https://docs.microsoft.com/zh-cn/windows/win32/debug/pe-format
    [7] 哈希 HASH·数字签名 - Phant
    [8] 恶意文件分析系统中的数字签名验证 - 绿盟科技
    [8] [翻译]Windows PE文件中的数字签名格式 - 看雪银雁冰大神
    [9] PE文件数字签名工具 - ahuo
    [10] PE文件解析-异常处理表与数字签名 - zhyulo
    [11] Authenticode签名伪造——PE文件的签名伪造与签名验证劫持 - 嘶吼RoarTalk
    [12] 数字签名 - CTF Wiki
    [13] 数字签名算法介绍和区别 - infiniSign
    [14] [求助]关于PE文件的数字签名 - 看雪论坛
    [15] 区块链:数字签名是什么?- ChinaKingKong
    [16] 校验文件数字签名的合法性(VerifyPE) - ahuo
    [17] 数字签名 - shinymood
    [18] 恶意文件分析系统中的数字签名验证 - 百度文库
    [19] 如何判断一个文件是否已经有数字签名 - CSDN论坛


    展开全文
  • 展开全部1、SE 是 Software Engineer 软件工程师du:zhi软件工程师分类有:高级软件工程师、dao软件工程师、助版理软件工程师、软件技权术员。2、SSE 是 Senior Software Engineer 高级软件工程师:高级软件工程师是...
  • 本文将详细介绍什么是数字签名,并采用Signtool工具对EXE文件进行签名,后续深入分析数字签名的格式及PE病毒内容。这些基础性知识不仅和系统安全相关,同样与我们身边常用的软件、文档、操作系统紧密联系,希望这些...
  • Kappa 提供了衡量两个法官 A 和 B 在将 N 个项目各自分类为 k 个互斥类别时的一致程度。 在这种情况下,“判断者”可以是一个人、一组对 N 个项目进行排序的个人,也可以是一些非人类机构,例如计算机程序或诊断...
  • 70 现代制造技术 与装备 2014 6 期 总 223 期感染型PE 病毒分析与专杀修复工具的开发李西山(临沂市人民医院,临沂 276003 )摘 要:本文对感染技术在病毒发展过程中的地位进行了分析、然后重点分析感染式病毒,针对...
  • TP = [] # 识别中每类分类正确的个数 for i in range(class_num): TP.append(confu_mat[i, i]) # 计算f1-score TP = np.array(TP) FN = col_sum - TP FP = raw_sum - TP # 计算并写出precision,recall, ...
  • PE文件格式

    2020-08-12 15:01:35
    PE文件是Windows操作系统下使用的可执行文件格式,它是微软在UNIX平台的COFF基础上制作而成的。 PE文件是指32为的可执行文件,也成为PE32,64位的可执行文件称为PE+或PE32+。 PE文件格式 PE文件种类 下图是...
  • 二进制菜鸟之PE文件结构

    千次阅读 2019-08-22 16:52:36
    PE(Portable Executable File Formate)。操作系统识别可执行文件的方法是依赖于文件头而不是文件扩展名,如果当前文件格式不符合任何已定义文件头格式则将其按照COM文件格式装入即将整个文件的数据当做代...
  • Kappa系数计算

    2021-11-15 10:40:29
    kappa系数是一种衡量分类精度的指标。 公式: k=po−pe1−pe k=\frac{p_o-p_e}{1-p_e} k=1−pe​po​−pe​​ 其中,pop_opo​是每一类正确分类的样本数量之和除以总样本数,也就是总体分类精度 。C是类别总数,TiT_...
  • 超级兔子魔法设置--启动程序--多系统选择 [b]分类:[/b] 电脑/网络 >> 操作系统/系统故障[br][b]问题描述:[/b][br]电脑上装了三个系统,一个是98简体,一个是98繁体,还有一个是XP简体,98简体跟繁体之间是用...
  • PE结论: PE中值 > PE等权 > PE加权 | PE平均 PB温度结论:PB中值温度 > PB等权温度 > PB加权温度 | PB平均温度 PE温度结论:PE等权温度 > PB加权温度 > PE中值温度 | PE平均温度 计算公式(以PB为例): ...
  • 首先在电脑 bios 设置里设置 U 盘启动为第一启动项 ,然后插入 u盘 ,U 盘启动进入 WindowsPE,在没有装过操作系统的电脑上首先要进行分区 ,设置主分区与逻辑分区。设置完毕后即可点击一键装系统,接下来即可等待进入...
  • 我用U盘装系统,在PE模式下,打开分区工具就显示U盘的容量,不显示硬盘的大小,要怎么处理这个问题?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!...
  • 计算机必备专用英语词汇

    千次阅读 2020-08-04 09:30:11
    非常好的单词整理,转载一下当作笔记 1.单词说明:  command n.... 单词拼写 名词 单词含义 音标(发音)  提示:着重记忆单词对应的意思,有能力最好词性也记忆。 2.词性说明: ...n v vi vt conj prep pron adj adv...
  • 三、多分类中各个类别的Precision和Recall计算。 这里举一个五分类的例子,看一下下面的混淆矩阵。 首先理解混淆矩阵的元素含义,例如第一行第二个的“3”表示实际标签为类别0的预测成类别1的有3个样本。如何绘制...
  • PE文件结构分析

    万次阅读 多人点赞 2016-03-22 10:40:56
    PE文件分析
  • PE文件结构

    千次阅读 2019-08-09 18:42:48
    参考《加密与解密》《Windows PE权威指南》 目录 1、PE文件的结构 1、什么是可执行文件? 2、PE文件的特征 3、PE文件的整体结构 4、PE文件到内存的映射 5、DOS部分 6、PE文件头(PE Header) 7、块表 8、...
  • PE文件格式(一)

    2021-04-06 16:22:16
    64位的可执行文件称作PE+或PE32+(注意不是PE64),这是PE文件的一种扩展形式。 PE文件种类 可执行系列:EXE、SCR 驱动程序系列:SYS、VXD 库系列:DLL、OCX、CPL、DRV 对象文件系列:OBJ 除了OBJ之外的文件都是可...
  • PE文件结构学习

    2019-07-12 07:03:35
    PE文件是指32位的可执行文件,也称PE32,64位称PE+或PE32+,是PE32的一种扩展形式(不是PE64) 2.PE文件格式 种类 主扩展名 可执行系列 EXE、SCR 库系列 DLL、OCX、CPL、DRV 驱动程序系列 ...
  • 沃特世Empower 3网络版软件可控制包括安捷伦、PE、岛津、Thermo等在内的多家色谱系统,最大程度上将实验室的计算机化系统数量和类型减至最低,帮助制药企业摆脱单机版高昂的验证成本,一劳永逸地解决色谱系统的...
  • 作者 | 杨秀璋,责编 | 夕颜出品 | CSDN博客这是一篇基础性文章,将介绍Windows PE病毒, 包括PE病毒原理、分类及感染方式详解,并通过案例进行介绍。01PE病毒概念什么...
  • 在没有存储程序型计算机之前,工程师发明了一种称为Plugborad Computer的计算设备(可直译为"插线板计算机"),这种计算机使用不同的电线连接不同的插口,从而完成各种计算任务 1.3 指令集分类 算术类指令 加减乘除 ...
  • 混淆矩阵计算代码: // 打开两幅待比较的分类影像 CFile datClassifyImg(ImgPath1, CFile::modeRead | CFile::typeBinary);// ImgPath1:路径根据自己的路径更换 CFile datGroundTruth(ImgPath2, CFile::modeRead | ...
  • //[2] [可选] 0仅开始菜单,1全部显示,2仅桌面 //[3] [可选] 0为所有PE同时显示,32为仅显示在32位的PE中,64为仅显示在64位的PE中 //[4] [可选] 命令参数,没有则填0 //[5] [可选] 自定义图标,可为 *.ico 也可为...
  • PE 格式详解

    千次阅读 2017-09-20 21:23:06
    PE文件是Win32的原生文件格式.每一个Win32可执行文件都遵循PE文件格式.对PE文件格式的了解可以加深你对Win32系统的深入理解. 一、 基本结构。   上图便是PE文件的基本结构。(注意:DOS MZ Header和部分PE ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,626
精华内容 2,650
关键字:

pe分类计算