脱壳第三讲,UPX压缩壳,以及补充壳知识

一丶什么是压缩壳.以及壳的原理

在理解什么是压缩壳的时候,我们先了解一下什么是壳

1.什么是壳

  壳可以简单理解为就是在自己的PE文件中包含了代码.而有不影响我们的PE文件的执行.

2.什么是压缩壳

  压缩壳指的是让我们的PE文件变小.

3.压缩壳原理

首先可以看到,我们的PE文件

一个PE头,两个节数据,其中节和节之间还有对齐值.而上图是我们的一个正常壳映射到内存中的示意图.

4.压缩壳的思路

从上图可以看出, 我们的PE文件,压缩一下变成了一个新的PE文件,其中我们的PE文件,压缩的数据是节里面的数据

也就是说,压缩壳的原理就是压缩PE文件中节的数据.然后产生新的PE,这个新的PE我们成为带壳的PE

而我们运行带壳PE的时候,这时候壳中的解压缩代码开始执行,从而把我们以前压缩数据的节重新映射到内存.

5.压缩壳方法1(PE的生成)

此时观察方法1我们会发现,我们新的PE, 解压缩的代码在压缩数据(节)的上面,那么这个时候则会面临一个问题

如果我们解压缩的时候,那么压缩数据的地址应该在我们解压缩代码的哪里,那么此时我们一边解压缩,一边压缩数据会覆盖解压缩代码,此时我们不知道是先解压完成,还是先覆盖完成

解决方法:

  首先我们知道原PE的节的个数以及大小,那么此时我们生成的新的带壳PE,则会获得大小.然后在其带壳PE的下面申请怎么大小的节用来占位置即可.

那么此时我们解压的数据,则会写到我们占位置的地方.

如果不懂可以看下图理解

此时Shell(中文翻译为壳)代表的就是解压缩的代码

这个图是映射到内存中的带壳PE分布图.

很简单,解压缩代码执行,然后解压的代码正好在我们占地方的位置.

二丶脱壳步骤,以及手脱UPX壳

首先我们知道压缩壳了,压缩壳就是缩小PE文件

那么在壳的世界 还有加密壳.  原理是一样的,只不过

压缩壳: 用来压缩数据,减小PE体积

加密壳:用来防住你们我们他们等等逆向人员的 ^_^

1.脱壳步骤:

1.查找OEP(入口点 )

   方法: 经验,这个主要看经验

   不过这个经验也好分辨.

2.脱壳手法

 2.1 ESP 定律

2.2 API

2.3 单步跟踪(步过循环,只向下跳转)

3. 经过上面步骤开始脱壳

  手工DMP内存(把内存拷贝下来)

然后修复PE (一般加密壳汇编PE中的导入表给抹掉)

首先ESP定律,在壳的第一讲已经讲解过了

这里我们说下怎么查看入口点,以及脱壳手法的API 跟踪,和单步跟踪.

2.识别入口点

如果要识别入口点,这里只简单说下,因为比如 VC++6.0  VSXXX  VB...等等入口点都是不一样的

这里直说一下VC和VS入口点的识别方法.

首先随便打开一个没有加壳的程序(VC++6.0的)OD打开查看.

1.VC6.0的识别

往下拖动一下

可以看出,VC6.0的入口点会固定的调用这三个API

只需要记住即可.看下VS的识别方法

2.VS系列识别方法

不知道还是电脑原因还是编译器原因,编译的程序不能在XP下使用OD打开,所以只能用IDA说下了

如果OD能打开,那么则是一个Call 然后下方紧接着跟着一个JMP跳转

那么它的入口点特征则是调用以上的API

3.使用API定位脱壳

因为ESP定律已经说过了,这里使用API进行脱壳.

思路:

  因为我们知道入口点的特征,比如VC6.0的,它会调用API,那么我们API下段点即可.肯定会过去的.

首先我们脱一个VC6.0的upx压缩壳.

首先我们知道入口点会调用的API

那么我们下断点即可.

(注意,这里使用UPX随便压缩了一个VC的程序,UPX可以官网下载,VC程序也可以自己编写一个)

F9以下,看看能不能断下来.

断下来了,只不过是断在里面了,然后我们执行到返回  CTRL + F9 即可看到我们的熟悉的特征

确实使我们的入口点位置

那么此时移动汇编代码到入口点,也就是一开始的地方,(因为此时程序已经执行的API可能数据已经破坏了,所以我们在入口点位置下段点,重新运行则可以断在入口点)

此时重新运行程序,当我们的EIP 位置是4014EC的地方我们则可以DMP内存了.

保存一份即可.

3.使用单步方法定位入口点.

这个就比较简单了,我们遇到循环,不看直接往下单步走,直到走到一个远跳即可.

比如我模拟一下OD

地址:     汇编代码

1   add eax,eax

2          mov eax,eax

3          jnz   1        EIP = 3

4    mov edx,edx

5         jmp  00401000

此时EIP = 3,那么会跳转到1,那么这个时候我们在4地址下段点即可,不看它的循环,一直到5地址,有个远跳,即可.

关于DMP内存和上面一样,不说了.

脱壳第三讲,UPX压缩壳,以及补充壳知识的更多相关文章

  1. 手动脱UPX压缩壳

    示例程序演示 样例程序选择win7自带的notepad.exe,该程序原本是没有加壳的: 拷贝notepad.exe文件一个副本,重命名为notepad - upx.exe,我们对notepad - ...

  2. UPX源码分析——加壳篇

    0x00 前言 UPX作为一个跨平台的著名开源压缩壳,随着Android的兴起,许多开发者和公司将其和其变种应用在.so库的加密防护中.虽然针对UPX及其变种的使用和脱壳都有教程可查,但是至少在中文网 ...

  3. Reverse Core 第二部分 - 14&15章 - 运行时压缩&调试UPX压缩的notepad

    @date: 2016/11/29 @author: dlive 0x00 前言 周六周日两天在打HCTF2016线上赛,没时间看书,打完比赛接着看~~ 0x01 运行时压缩 对比upx压缩前后的no ...

  4. UPX压缩

    什么是UPX UPX (the Ultimate Packer for eXecutables)是一款先进的可执行程序文件压缩器,压缩过的可执行文件体积缩小50%-70% ,这样减少了磁盘占用空间.网 ...

  5. 调试UPX压缩的notepad

    @date: 2016/11/29 @author: dlive 0x01 运行时压缩 对比upx压缩前后的notepad可以看到如下特点 PE头的大小一样 节区名称改变(.text -> .U ...

  6. 简单脱壳教程笔记(7)---手脱PECompact2.X壳

    本笔记是针对ximo早期发的脱壳基础视频教程.整理的笔记.本笔记用到的工具下载地址: http://download.csdn.net/detail/obuyiseng/9466056 简单介绍: F ...

  7. upx压缩notepad.exe(运行时压缩)

    PEView:https://www.lanzous.com/i5k9vbg UPX:https://www.lanzous.com/i5k9vch notepad.exe:https://www.l ...

  8. Upx 压缩go编译的程序 frp

    1. frp 程序占用大 .路由器 不够空间 2. UPX 下载地址       https://github.com/upx/upx/releases/ 3.  压缩命令  upx.exe -9 C ...

  9. 压缩感知中的数学知识:稀疏、范数、符号arg min

    转自:http://blog.csdn.net/jbb0523/article/details/40262629 1.稀疏:什么是K稀疏呢? 在压缩感知里经常提到 "K稀疏" 的概 ...

随机推荐

  1. Could not execute JDBC batch update; SQL [delete from role where roleId=?]; constraint [null]; neste

    今天在写多个删除功能的时候出现了这么一个错误:意思是删除操作的时候,没有找到对应的外键. Cannot delete or update a parent row: a foreign key con ...

  2. Java数据库连接泄漏应对办法-基于Weblogic服务器

    临时解决连接泄漏方案 当连接泄漏真的发生了,无可避免时,我们采取以下方案,可临时解决连接问题,以争取修改代码的时间. 步骤1:选择待分析的JNDI数据源 步骤2(可选):可配置最大数据连接数量 步骤3 ...

  3. HttpServletRequest获取URL、URI

    从Request对象中可以获取各种路径信息,以下例子: 假设请求的页面是index.jsp,项目是WebDemo,则在index.jsp中获取有关request对象的各种路径信息如下 import j ...

  4. 我的Java设计模式-工厂方法模式

    女朋友dodo闹脾气,气势汹汹的说"我要吃雪糕".笔者心里啊乐滋滋的,一支雪糕就能哄回来,不亦乐乎?! 但是,雪糕买回来了,她竟然说"不想吃雪糕了,突然想吃披萨" ...

  5. angularjs的几种常见写法

    学习angularjs不久,遇见的angularjs的写法也是很多的感觉,今天就在这里记录一下,还有没见过的,继续学习中... angularjs 常用的几种种写法 1.链式: angular.mod ...

  6. Vue 开发常见问题集锦

    涉及技术栈 CLI: Vue-CLI UI: Element HTML: Pug(Jade) CSS: Less JavaScript: ES6 正文: polyfill 与 transform-ru ...

  7. bzoj3624(铺黑白路)(并查集维护)

    题意网上自己随便找,绝对是找的到的. 题解:(白边表示鹅卵石路,黑边表示水泥路)这道题的解法,先考虑将黑边所有都先连起来,组成一个又一个的联通块,然后用白边去连, 如果可以联通的话,就用白边去代替黑边 ...

  8. [Gitlab运维系列]Gitlab 403 forbidden 并发引起IP被封

    问题 带着团队使用Git,使用的是自搭建的Gitlab.但今天打开页面的时候显示的是空白页面,上面还有一次文本Forbidden. 原因 Gitlab使用rack_attack做了并发访问的限制. 解 ...

  9. SpringMVC拦截器Interceptor

    SpringMVC拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似与servlet中的Filter. SpringMVC 中的Interceptor 拦截请求是通过Ha ...

  10. 索引节点inode详解

    Inode(index node),索引节点.Linux系统中,分区要进行格式化,创建文件系统.在每个Linux存储设备或存储设备的分区(可以是硬盘,软盘,U盘等)被格式化为ext3文件系统后,一般分 ...