【恶意代码分析】_第一站

2024-01-19 08:48

本文主要是介绍【恶意代码分析】_第一站,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 概述
    • 基本概念
        • 有损压缩
        • 加壳
        • 壳的装载及其分类
        • 压缩器和保护器
        • 恶意程序在线分析网站
    • UPX实验
        • 介绍UPX
        • 使用UPX压缩文件
        • UPX加壳原理
    • 使用工具查看和脱壳
        • Lord PE
        • 工具PEiD
        • 脱壳工具UPX UnPacKer 0.3
        • 使用upx进行脱壳
    • 使用Ollydbg手动脱壳(重点)
    • 反思

概述

  主要讲解加壳脱壳,每周讲解一种壳。
  参考教材:可以买来当字典。
《逆向工程核心原理》,作者李承远
《加密与解密(第4版)》,作者段钢
《恶意代码分析实战》,作者Michael Sikorski
《0day安全:软件漏洞分析技术(第二版) 》,作者王清等
《IDA Pro权威指南(第2版)》,作者Eagle。
在这里插入图片描述

  操作系统环境:Windows XP Service Pack系统,Win7环境可能出现执行失败等问题。
  本节目标:了解UPX壳解压缩过程、查找用UPX解壳软件的OEP(original entry point,原始入口点)。


基本概念

有损压缩

  有损压缩会损失一定的信息,常见的有损压缩有MP3、MP4、jpg等,无损压缩可以完全恢复原始数据,但文件大小会更大,常见的有png、加壳文件压缩器等,bmp是无压缩文件。

  Misc隐写:jpeg/jpg图片属性中的说明、来源都可以添加内容。

  LSB应用范围(最低有效位隐写):一般只能在无损压缩(PNG)、或无压缩(BMP)的图片上实现最低有效位隐写。JPG图片对像数进行了有损压缩,所以无法使用LSB隐写。


加壳

  加壳是指运行时压缩,即对可执行程序资源进行压缩,通过修改程序入口点等压缩、加密、保护exe和dll文件。
  只不过这个压缩之后的文件,可以独立运行,解压过程完全隐蔽,都在内存中完成。加壳后程序可以直接运行,但不能查看源代码,除非脱壳。
目的:反跟踪、被人跟踪调试、防止算法程序被别人静态分析。

  解压原理:是加壳工具在文件头里加了一段指令,告诉CPU,怎么才能解压自己。当加壳时,其实就是给可执行的文件加上个外衣。用户执行的只是这个外壳程序。当执行这个程序的时候这个壳就会把原来的程序在内存中解开,解开后,以后的就交给真正的程序。


壳的装载及其分类

  是什么?外壳程序负责把用户原来的程序在内存中解压缩,并把控制权交还给解开后的真正程序。
  壳的装载过程:获取壳自己需要使用的API地址。解压解密原程序的各个区块。进行必要的重定位。跳转到程序原入口点OEP。

  脱壳的目的是找到OEP(Original Entry Point,原程序的入口点),软件加壳就是隐藏了OEP(或者用了假的OEP),只要我们找到程序真正的OEP,就可以立刻脱壳。PUSHAD(压栈)代表程序的入口点。
  常见寻找OEP脱壳的方法,搜索OEP百度百科有五种方法。

  壳的分类
  压缩壳:想把程序压缩变小,例如ASPack、UPX、PECompact等;
  加密壳(保护器):商业程序防破解,ASProtect、Armadillo、ExeCryptor、Themida、VMProtect等;
  其他:病毒加壳,反病毒AntiVirus。


压缩器和保护器

  压缩器:PE压缩器是指可执行文件的压缩器。
  使用目的:缩减PE文件大小;隐藏PE文件内部代码与资源。
  两种分类:单纯压缩普通PE文件的压缩器。对源文件进行较大变形、严重破坏PE头、意图不纯的压缩器,指专用于恶意程序的压缩器。
  目的纯粹的压缩器(未经VirusTotal诊断): UPX、ASPack等;
目的不纯的压缩器(经VirusTotal诊断): UPack、PESpin、 NSAnti等。

  保护器:PE保护器是一类保护PE文件免受代码逆向分析的实用程序。
应用了多种防止代码逆向分析的技术(反调试、反模拟、代码混乱、多态代码、垃圾代码、调试器监视等),使压缩后的PE文件尺寸反而比源文件要大一些,调试难度高。
  使用目的:防破解;保护代码和资源。(保护器不仅可以保护PE文件本身,还可在文件运行时保护进程内存,防止打开Dump窗口。)
  使用现状:大量应用于对破解很敏感的安全程序。因为恶意的游戏破解者破解游戏的安全保护程序,利用“游戏内核”获取金钱回报。
另一方面,常见的恶性代码( Trojan、Worm )中也大量使用保护器来防止(或降低)杀毒软件的检测。
  分类:商用保护器: ASProtect、Themida、 SVKP等;
公用保护器: UltraProtect、Morphine等。


恶意程序在线分析网站

  www.virustotal.com,是一个提供免费的可疑文件分析服务的网站,可以用来分析恶意程序。
  它与传统杀毒软件的不同之处,在于通过多种反病毒引擎扫描文件。
使用多种反病毒引擎对上传的文件进行检测, 以判断文件是否被病毒, 蠕虫, 木马, 以及各类恶意软件感染。


UPX实验

介绍UPX

  UPX软件(The Ultimate Packer For Executables,可执行文件终极打包器)是一款可执行文件压缩器,压缩过的可执行文件体积缩小50%-70%。
  UPX压缩器官网:http://upx.sourceforge.net
下载地址: https://en.softonic.com/download/upx/windows/post-download

  UPX是一个著名的压缩壳,主要功能是压缩PE文件(比如exe,dll等文件),
有时候也可能被病毒用于免杀。


使用UPX压缩文件

  开启Windows XP SP3虚拟机,拖拽upx-3.96-win32文件夹到虚拟机。
命令行跳转到upx文件夹。

1.输入命令upx
在这里插入图片描述

2.压缩样例文件命令:upx -o 输出文件 被压缩文件
在这里插入图片描述  压缩到原来的71.97%,压缩率比ZIP压缩(35kb)要低。原因在于,upx压缩后得到的是PE文件(需要添加PE头),还要放入解压缩代码。

3.比较原程序和upx压缩程序:
在这里插入图片描述
不变:
  PE头的大小一样(0~400h)
  第一个节区的RawDataSize=0,即在PE文件中的大小为0
  
变化:
  节区名称改变:.text->.upx0,节区头.data->.upx1。
  EP(Entry point入口点)位于第二个节区.upx1,原notepad. exe的EP在第一个节区.text。(复习EP和.text的概念就能明白这一点)
  资源节区(.rsrc)大小变化不大。


UPX加壳原理

  首先将程序压缩。 所谓的压缩包括两方面:
一方面在程序的开头或者其他合适的地方插入一段代码。 另一方面是将程序的其他地方做压缩(也就是上面讲到的压缩),压缩也可以叫做加密。

  当程序执行时:实时的对程序解压缩。解压缩功能是在第一步插入代码时完成的功能。

  联起来就是: UPX可以完成代码的压缩和实时解压执行。且不会影响程序的执行效率。




使用工具查看和脱壳

Lord PE

  安装
  LordPE,是一款功能强大的PE文件分析、修改、脱壳软件。LordPE是查看PE格式文件信息的首选工具,并且可以修改相关信息。
  学习之初最好使用中文版,花费10C币重新下载中文版,
CSDN地址https://download.csdn.net/download/gdcat2008/1254308:

在这里插入图片描述
  运行程序,发现报错:

在这里插入图片描述
  参考《记修复“LordPE已停止工作”》,得知是LordPeFix.dll有错误,
直接下载文章作者分享的LordPeFix.dll,成功运行:
文章地址https://zhuanlan.zhihu.com/p/29924819

在这里插入图片描述

  实验:使用Lord PE对比两个程序的区段表

  Lord PE打开notepad.exe,查看nodepad.exe的区段表:
在这里插入图片描述

  Lord PE打开notepad_upx.exe,查看nodepad_upx.exe的区段表:
在这里插入图片描述
  从VirtualSize值可以发现notepad_upx.exe第一个节区的VirtualSize值竟被设置为10000(而SizeOfRawData值为0)。
  这就是说,经过UPX压缩后的PE文件,在运行瞬间将文件中的压缩代码解压到内存中的第一个节(UPX0)。
  说得更详细一点,解压缩代码与压缩的原代码( notepad.exe 的代码)都在第二个节区(UPX1)。文件运行时首先执行解压缩代码,把处于压缩状态的原代码解压到第一个节区(UPX0)。解压过程结束后即运行原文件的EP代码。


工具PEiD

介绍
  PEiD(PE Identifier)是一款著名的查壳工具,其功能强大,几乎可以侦测出所有的壳,其数量已超过470 种PE 文档 的加壳类型和签名,可以探测大多数PE文件封包器、加密器和编译器。
  具有三种扫描模式:
正常扫描模式:可在PE文档的入口点扫描所有记录的签名;
深度扫描模式:可深入扫描所有记录的签名,范围更广、更深入;
核心扫描模式:可完整地扫描整个PE文档,建议将此模式作为最后的选择。

使用
  点击右下角箭头,选择深度扫描,得到加壳方式;
  点击右下角箭头,选择Plugins- generic oep finder,得到OEP;
  点击右下角箭头,选择PEiD generic Unpacker,脱壳得到原程序。
(本地下载的PEiD v0.95自带插件不佳,脱壳失败)
在这里插入图片描述

脱壳工具UPX UnPacKer 0.3

  脱壳失败,参考《UPX UnPacKer 0.3 中文版》,
文章地址http://www.52bug.cn/cracktool/3371.html
(在软件园经常下载到流氓软件,不考虑软件园渠道寻找资源)
  直接手动脱壳吧!
在这里插入图片描述

使用upx进行脱壳

  询问同学得知,upx软件也可以用来脱壳。
输入命令upx -d notepad_upx.exe,查看文件,脱壳成功:
在这里插入图片描述

使用Ollydbg手动脱壳(重点)

反思

  把耐心用在关键环节!
顺序学习,到了手动脱壳部分已经做不动了。

这篇关于【恶意代码分析】_第一站的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/621886

相关文章

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

github打不开的问题分析及解决

《github打不开的问题分析及解决》:本文主要介绍github打不开的问题分析及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、找到github.com域名解析的ip地址二、找到github.global.ssl.fastly.net网址解析的ip地址三

Mysql的主从同步/复制的原理分析

《Mysql的主从同步/复制的原理分析》:本文主要介绍Mysql的主从同步/复制的原理分析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录为什么要主从同步?mysql主从同步架构有哪些?Mysql主从复制的原理/整体流程级联复制架构为什么好?Mysql主从复制注意

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Linux中的more 和 less区别对比分析

《Linux中的more和less区别对比分析》在Linux/Unix系统中,more和less都是用于分页查看文本文件的命令,但less是more的增强版,功能更强大,:本文主要介绍Linu... 目录1. 基础功能对比2. 常用操作对比less 的操作3. 实际使用示例4. 为什么推荐 less?5.

spring-gateway filters添加自定义过滤器实现流程分析(可插拔)

《spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔)》:本文主要介绍spring-gatewayfilters添加自定义过滤器实现流程分析(可插拔),本文通过实例图... 目录需求背景需求拆解设计流程及作用域逻辑处理代码逻辑需求背景公司要求,通过公司网络代理访问的请求需要做请

Java集成Onlyoffice的示例代码及场景分析

《Java集成Onlyoffice的示例代码及场景分析》:本文主要介绍Java集成Onlyoffice的示例代码及场景分析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 需求场景:实现文档的在线编辑,团队协作总结:两个接口 + 前端页面 + 配置项接口1:一个接口,将o

IDEA下"File is read-only"可能原因分析及"找不到或无法加载主类"的问题

《IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题》:本文主要介绍IDEA下Fileisread-only可能原因分析及找不到或无法加载主类的问题,具有很好的参... 目录1.File is read-only”可能原因2.“找不到或无法加载主类”问题的解决总结1.File