0X00    了解 upx

UPX作为一款元老级PE加密壳,在以前的那个年代盛行,著名病毒【熊猫烧香】就是使用这款加密壳.

0X01    单步跟踪法

就是使用ollydbg加载程序后,按F8进行单步步过。如果遇到程序向上跳转(红色箭头表示跳转实现),则在程序命令的下一行按F4,将程序运行到所选位置。要保证程序一直向下跳转,否则运行一个向上跳转,就会跳到壳的循环当中,就出不来了。运行到一定代码后,如果看到一个比较大的跳转,可能是jmp,也可能是ret。跳转之后的代码是popad,一般就是到了程序的OEP了。然后脱壳即可。

注:

1.call 相当于高级语言中的函数调用。 当执行call指令时,进行两步操作: 将下一条的指令的地址压入栈中,再跳转到该地址处。

2.与call对应的就是RET,对于RET我们可以这样来理解:将当前的ESP寄存器中指向的地址出栈,然后跳转到这个地址

0X02     ESP定律

(1)  利用堆栈平衡的原理

ESP是应用频率最高的脱壳方法之一 ,不论是新手还是老手都经常用到。

而且,壳实质上是一个子程序,它在程序运行时首先取得控制权并对程序进行压缩。 同时隐藏程序真正的OEP。大多数病毒就是基于此原理,从而防止被杀毒软件扫描,而脱壳的目的就是找到真正的OEP(入口点)

由于在程序自解密或者自解压过程中, 多数壳会先将当前寄存器状态压栈, 如使用pushad, 而在解压结束后, 会将之前的寄存器值出栈, 如使用popad. 因此在寄存器出栈时, 往往程序代码被恢复, 此时硬件断点触发(这就是我们要下硬件断点的原因),然后在程序当前位置, 只需要一些单步操作, 就会到达正确的OEP位置.

注:几乎全部的压缩壳, 一些早期的加密壳,在载入程序后只有esp寄存器内容发生变化,那么这个程序多半可以用ESP定律。

(2)   具体操作

使用OD加载程序后,按F8进行单步跟踪,注意右上角的寄存器窗口,当发现ESP和EIP的值同时变红时(表示同时发生了变化)。在寄存器窗口中点击右键,选择“数据窗口中跟随”。然后在右下角的内存窗口中,点击右键,选择“断点”——“硬件访问”——“字”。最后按F9运行程序,就会直接来到程序的OEP附件了。最后记得要删除刚刚下的硬件断点。通过菜单栏上选择“调试”——“硬件断点”,就会看到我们下的断点,删除即可。

0X03   内存镜像法

(1)区段知识

数据段:数据段通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。
代码段:代码段通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,
并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等
资源段: .rsrc
偏移数据 : rdata

一般壳都是依次解密各区段的 数据(.data) , 等所有区段解密完成在跳转到代码段(.text) 去执行原始程序的代码。————出自rejector

(2) 具体操作

加载程序,按CTRL+M,或者点工具栏上的M按钮。打开内存窗口。在资源这一行上按F2下断点,即“.rsrc”这一行。然后按F9运行程序。再按CTRL+M打开内存窗口,在数据行上下断点(按F2)。即PE头的下一行。下断后,再按F9运行,就会达到程序的OEP附近了。

附:(看雪某佬的一段看法)

对区段的处理,第一次是解密,第二次就是执行到oep了,这种方法其实没啥用,一般的弱壳还是定位IAT的修改,改了以后基本就快到oep了,或者看看GetVersion或者delphi开始的调用的api,看看代码啥时候写好或者执行。弱壳基本就是把IAT改回来,单纯镜像法什么的没用,瞎猫碰死耗子,而且IAT还是得修改回来。强壳不会。

0X04    POPAD查找法

加载程序后,按CTRL+F进行查找。在查找框中输入“popad”,把“整个块”的复选框去掉。按后回车,就会来到程序OEP的附件了。按后按F4,将程序运行到当前位置,再单步跟踪几次就到OEP了。

手脱UPX壳的方法的更多相关文章

  1. 简单脱壳教程笔记(2)---手脱UPX壳(1)

    本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...

  2. 【个人笔记】ximo早期发的脱壳教程——手脱UPX壳

    [个人笔记]ximo早期发的脱壳教程--手脱UPX壳   壳分为两种:压缩壳和加密壳,UPX是一种很简单的压缩壳.   手脱UPX壳: 工具:ExeinfoPE.OD 对象:rmvbfix 方法1:单 ...

  3. 深入底层逆向分析TDC‘s keygenme(手脱压缩壳)

    系统 : Windows xp 程序 : TDC‘s keygenme 程序下载地址 :http://pan.baidu.com/s/1gdWyt6z 要求 : 脱壳 & 注册机编写 使用工具 ...

  4. 脱upx壳--初试--单步追踪

    脱upx壳--初试--单步追踪 这里的练习题目是reversing.kr 的Easy Crack 我自己用upx加壳工具给它加了个壳,由于原文件逻辑简单,所以用它来练练手 之后用到的工具是IDA和Ol ...

  5. 填坑专记-手脱FSG壳

      妈呀,脱FGS壳真的是坎坷颇多,多亏吾爱破解前辈们的帮忙.我一定要记录下来,省的以后再无法解决.   已经查看是FSG壳了.找到入口也容易了.重点就是脱壳并修复好它. 脱壳   OEP为:   使 ...

  6. 手脱NsPacK壳

    1.查壳 使用PEiD未能检测到壳信息,这时,我们更换其他工具 从图中可以看到壳的信息为[NsPacK(3.x)[-]] 2.百度壳信息 北斗程序压缩(Nspack)是一款压缩壳.主要的选项是:压缩资 ...

  7. 手脱UPX(3.91)

    1.使用Detect It Easy进行查壳: 2.使用x32dbg打开该带壳程序,在选项->选项->异常中添加区间设置0~FFFFFFFF全忽略: 3.我们F9运行到程序入口处,看到了p ...

  8. 手脱UPX v0.89.6 - v1.02

    声明: 只为纪录自己的脱壳历程,高手勿喷 这个壳的脱法很多一般都一步直达的,步过我喜欢ESP定律 1.载入OD,在入口下一行ESP定律运行一次 > pushad ; //入口 BE mov es ...

  9. 手动脱UPX 壳实战

    作者:Fly2015 Windows平台的加壳软件还是比較多的,因此有非常多人对于PC软件的脱壳乐此不彼,本人菜鸟一枚,也学习一下PC的脱壳.要对软件进行脱壳.首先第一步就是 查壳.然后才是 脱壳. ...

随机推荐

  1. Html中的canvas

    使用cancas完成袋鼠跳跃的界面,这个是怎么做得呀,我哭了呀

  2. Cloudflare DDoS配置案例

    导航: 这里将一个案例事项按照流程进行了整合,这样查看起来比较清晰.部分资料来自于Cloudflare 1.DDoS介绍 2.常用DDoS攻击 3.DDoS防护方式以及产品 4.Cloudflare ...

  3. [Usaco2018 Dec]Teamwork 题解

    题目描述 题目描述 在Farmer John最喜欢的节日里,他想要给他的朋友们赠送一些礼物.由于他并不擅长包装礼物,他想要获得他的 奶牛们的帮助.你可能能够想到,奶牛们本身也不是很擅长包装礼物,而Fa ...

  4. 解决asp.net丢失session的方法文件

    /* First uninstall - this section is exactly the same as uninstall.sql */USE masterGO /* Drop the da ...

  5. SpringMVC(11)表单标签

    本篇我们来学习Spring MVC表单标签的使用,借助于Spring MVC提供的表单标签可以让我们在视图上展示WebModel中的数据更加轻松. 一.首先我们先做一个简单了例子来对Spring MV ...

  6. [小技巧] 在bash中生成随机数

    译至:http://d.hatena.ne.jp/anmino/20091017/1255705586 bash的SHELL参数RANDOM可以生成0-32767的随机数.想设定从1到N的随机数范围的 ...

  7. fastposter发布1.4.2 跨语言的海报生成器

    fastposter发布1.4.2 跨语言的海报生成器 fastposter发布1.4.2 跨语言的海报生成器,一分钟完成海报开发 future: 完善docker镜像 引入异步asyncio 升级p ...

  8. 2021最新WordPress安装教程(二):安装PHP和MySQL

    这是 2021最新WordPress安装教程系列的第二篇文章,前一篇文章< 2021最新WordPress安装教程(一):Centos7安装Apache>已经完整的介绍了如何在Centos ...

  9. ctf之抄错的字符

    题目信息如图所示 得知该题为密码学问题 像英文的字母有 i=1,g=9,s=5,z=2 还有部分小写抄成了大写,搜索一段php代码测试 <?php $list=[]; function fun( ...

  10. "Shortest" pair of paths[题解]

    "Shortest" pair of paths 题目大意 给出 \(n\) 个点,\(m\) 条边,除第一个点和最后一个点外,其他所有的点都只能被经过一次,要求找到两条从第一个点 ...