【How2RE】 UPX壳及脱壳方式

article/2025/9/17 6:17:07

0x00 什么是壳

壳是另外在PE文件中包含的代码,并且不影响PE文件正常的执行。而壳也分为很多种,这里从UPX壳开始介绍。

0x01 压缩壳

压缩的分类

压缩的目的就是将体积大的可执行文件缩小的过程。分为损失压缩非损失压缩两种。损失压缩是指不能100%还原的压缩,常见的有JPG,MP4等格式。非损失压缩就是可以100%还原的压缩方式,一般有ZIP,7z等格式。

压缩壳

压缩壳的目的就是将PE文件变小。压缩有UPX, ASPack等方式。

Run-Time Packing

将原本的可执行文件的代码和数据压缩之后加入解压代码。压缩后的可执行文件很难进行静态分析。
可执行文件的起始地址称为OEP
压缩后的可执行文件起始地址称为EP

Unpacking

unpacking就是将packing后的可执行文件还原的过程,一般有以下几个步骤。

  • 找出解除压缩时的地址
  • 在压缩后的可执行文件中找出OEP地址
  • 找到OEP地址中断后取得原本可执行文件的内存数据
  • 最后将内存数据以可执行文件的方式重新整合

0x02 实验需要用到的工具

UPX: 用于压缩
https://github.com/upx/upx
OllyDumpEx: 找到OEP后可以直接通过这个工具还原导入表
https://low-priority.appspot.com/ollydumpex/

0x03 开始实验

首先准备个C语言的简单程序

#include<stdio.h>int add(int a, int b) {return a + b;
}int a = 0x11;int main() {printf("Hello World!\n");add(a, 0x22);return 0;
}

找到可执行文件之后拖入DIE后看一下程序大小
可执行文件大小
然后用UPX加了压缩壳之后的文件进行对比
在这里插入图片描述
可以发现经过压缩之后的可执行文件大小缩小了,这里可以用HxD打开看一下。之前的data,bss段等都被UPX0,UPX1代替,只有rsrc段和压缩前相同。
在这里插入图片描述

0x04 ESP定律

由于在程序自解密或者自解压过程中, 不少壳会先将当前寄存器状态压栈, 如使用pushad, 在解压结束后, 会将之前的寄存器值出栈, 如使用popad. 因此在寄存器出栈时, 往往程序代码被恢复, 此时硬件断点触发. 然后在程序当前位置, 只需要少许单步操作, 就很容易到达正确的 OEP 位置.
ESP定律法 - CTF WIKI

首先打开经过upx压缩过的程序,F9来到程序起始的位置,并且F8单步执行pushad指令保存寄存器状态。观察旁边寄存器的状态可以得知,ESP的值发生了变化。
ESP位置发生变化
在寄存器视图中右键在ESP上设置断点。然后按下F9前往ESP所指向的地址。
设置ESP断点
跳转到00AD7FEF之后观察这里的汇编代码,我们会发现在00AD7FFC处有一个jmp指令,这是一次大跳转,极有可能是OEP所处的地址。在00AD7FFC处设置断点,F9运行至此处。
第一次跳转到ESP
按下F8单步进入,下面这个00AD1633就是OEP的位置。
最后到达OEP
最后来恢复整个程序,在插件中使用Dump process,选择Get EIP as OEP,最后Dump文件并保存。
DUMP
在这里插入图片描述
但是有时会出现Dump了程序却依然无法打开的情况,这是因为在Dump程序的过程中IAT表可能出现了丢失的情况。这个时候用Scylla来修复IAT表,在入OEP的位置打开Scylla,按下IAT Autosearch -> Get Imports 将 Import 中红色的部分删去最后再Fix Dump覆盖之前的程序,或者是重新生成一个Dump的程序。

在这里插入图片描述

如果文章中存在错误,请评论或者私信我


http://chatgpt.dhexx.cn/article/fONjWn9F.shtml

相关文章

脱壳(中) 脱壳的方法

那些年我们一起脱过的衣裳&#xff0d;脱壳(中) 珈蓝夜宇 2015/10/29 10:42 0x01 我能在万花从中脱去壳的衣裳!&#xff08;续&#xff09; 3.3ESP定律法 3.3.1ESP定律介绍 ESP定律法是脱壳的利器&#xff0c;是国外友人发现的。有了ESP定律&#xff0c;可以方便我们脱掉大多…

脱壳简单总结

title: 脱壳 date: 2021-07-05 14:37:06 tags: RE 脱壳 1.概述&#xff1a; 1.壳&#xff1a; 一&#xff1a;加壳的目的&#xff1a;为了隐藏程序真正的OEP&#xff08;入口点&#xff09;&#xff0c;防止被破解。 二&#xff1a;加壳软件是一种在编译好可执行文件之后&…

最新乐加固脱壳详细教程(有图有真相)

一、前言声明&#xff1a; 本次破解是基于Xposed Installer框架&#xff0c;具体使用方法请上网查询。假设你已经安装好框架&#xff0c;按照下面的步骤&#xff0c;实现乐加固加固脱壳修复DEX&#xff0c;并且重打包运行。本次选择脱壳的APP是小猿搜题&#xff0c;特此声明&a…

脱壳之简单加密壳

一、简单分析与解密 脱壳最重要的三步&#xff1a;找原始OEP&#xff0c;转存文件&#xff0c;修复文件   压缩壳按照这三步就可以完成脱壳&#xff0c;而加密壳因为对PE文件的信息进行了加密处理&#xff0c;找到OEP只是刚开始&#xff0c;还需要将加密之后的代码、数据进行…

iOS完美脱壳

iOS端IPA脱壳 背景&#xff1a;在软件安全领域中&#xff0c;我们与黑产做对抗时&#xff0c;不是被动防守&#xff0c;自己也可以做攻击方&#xff0c;来验证我方软件是否安全。 关于iOS端逆向分析如&#xff1a;虚拟定位、虚拟设备、修改内存等&#xff0c;始终离不开脱壳。…

脱壳工具:Youpk的使用详解

一. Youpk概述 Youpk基于ART的主动调用的脱壳机&#xff0c;主要针对dex整体加固和各式各样的dex抽取加固。 目前 Youpk 只支持 pixel 1代。所以必须需要 pixel 1代手机&#xff0c;而且需要刷入对应的系统。 Youpk可以处理大部分的加固&#xff0c;一些企业版的加固也能处理…

使用upx脱壳工具脱壳

使用upx脱壳工具脱壳&#xff08;攻防世界新手第七题为例simple-unpack&#xff09; 查壳工具链接&#xff1a;https://www.52pojie.cn/thread-437586-1-1.html 脱壳工具链接&#xff1a;https://github.com/upx/upx/releases 先查壳 一般做到逆向的部分题的时候&#xff0c…

脱壳工具:反射大师的使用详解

一. 反射大师概述 一个脱壳插件工具&#xff0c;需要在 Xposed 环境中使用&#xff0c;支持市面上大多数加密壳。 反射大师简单容易使用&#xff0c;能脱掉大多数壳&#xff0c;很值得使用 二. 下载Xposed和反射大师 Xposed &#xff0c;一款可以在不修改 Android APK 的情…

逆向工具之脱壳神器反射大师(附脱壳环境搭建、脱壳实战)

相信点击进入这篇博客的小伙伴都知道并且搞过App逆向&#xff0c;不过有时候会遇到各种加壳的App&#xff0c;不让你反编译。但是道高一尺&#xff0c;魔高一丈&#xff0c;有正向加密&#xff0c;就有逆向解密。此篇博客博主带大家搭建脱壳环境&#xff0c;并且手动脱一个加了…

手动脱壳教程

一、什么是壳&#xff1f; 壳是指在一个程序的外面再包裹上另一段代码&#xff0c;保护里面的代码不被非法修改或反编译的的程序。它们一般先于程序运行&#xff0c;拿到控制权&#xff0c;然后完成它们保护软件的任务。 二、壳的加载过程 1、保存程序入口参数 …

简单脱壳教程笔记

文章目录 1、手脱UPX壳简介&#xff1a;脱壳&#xff1a;笔记&#xff1a;方法1&#xff1a;单步跟踪&#xff08;需要有耐心&#xff09;一、使用ODE插件二、tools按钮选择LordPE进行脱壳&#xff08;提前在SETUP PATHS里添加好&#xff09; 方法2&#xff1a;ESP定律法方法3&…

常用编程语言开发工具

编程语言开发工具可分为文本开发工具 和 集成开发工具。 文本开发工具的特点是 体积小&#xff0c;功能也不弱。 集成开发工具的特点是 体积大&#xff0c;功能强大。 1.文本编辑器 widows 下的 notepad&#xff08;记事本&#xff09; Unix下的 vim &#xff0c;这两个工具系…

开发工具:2022个人开发工具清单

目录 ​编辑 1、谷歌浏览器 2、腾讯文档 3、Notepad 4、IntelliJ IDEA 5、VisualStudio 6、VSCode 7、微信开发者工具 8、Navicat 9、PDManer 10、Git/Tortoise Git 11、Axure 12、NxShell 13、ApiPost 14、Xmind 15、Everything 16、WizTree 17、猿如意 …

开发工具推荐

1.前言 俗话说&#xff1a;“工欲善其事&#xff0c;必先利其器”。 为了助力大家的学习和进阶&#xff0c;本小节介绍几个对 Java 学习非常有帮助的 IDEA 插件&#xff0c;代码反编译和反汇编工具&#xff0c;以及非常不错的网站等。 2. IDEA 插件 首先不必多说&#xff0c…

【高效开发工具系列】开发工具

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 非常期待和您一起在这个小…

Linux--开发工具

前言&#xff1a; 是不是看见10月24日有种莫名的亲戚&#xff0c;在信息技术行业&#xff0c;由于2101024&#xff0c;所以1GB 1024MB&#xff0c;1MB 1024KB&#xff0c;1KB 1024B。于是1024是程序员们最为敏感的数字&#xff0c;那么今天祝所有铁子们节日快乐&#xff01;…

开发工具入门

配置SublimeText的编译 工具->编译系统->新建编译系统 修改如下代码到新建文件内&#xff0c;CtrlS保存内容到 “SublimeText安装目录下的\Data\Packages\User” # 配置文档 { "cmd": ["软件名如&#xff1a;php", "$file"], &qu…

开发工具的使用

git git管理你的项目 进入项目----》右键----》git bash here--->输入git init---->该文件夹和子文件夹都会被git管理 写项目.,...... 头部完成 头部完成想形成一个版本号(形成一个版本号目的是后期可以切换回来)&#xff0c; 有以下几个步骤 git add . git commit -m …

【开发工具系列】猿创征文|有了这8个开发工具,程序员可以早点下班了

&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3;&#x1f4e3; &#x1f38d;大家好&#xff0c;我是慕枫 &#x1f38d;前阿里巴巴高级工程师&#xff0c;InfoQ签约作者、阿里云专家博主&#xff0c;一直致力于用大白话讲解技术知识 &#x…

开发工具使用

一、markdown 1、MarkDown语法 Markdown 语法手册 &#xff08;完整整理版&#xff09;【Markdown语法】字体颜色大小及文字底色设置 二、IDEA工具 1.1 IDEA相关插件 idea插件下载地址&#xff1a;https://plugins.jetbrains.com/ 开发必装插件&#xff1a; &#xff08;1…