手脱UPX壳的方法
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壳的方法的更多相关文章
- 简单脱壳教程笔记(2)---手脱UPX壳(1)
本笔记是针对ximo早期发的脱壳基础视频教程,整理的笔记. ximo早期发的脱壳基础视频教程 下载地址如下: http://down.52pojie.cn/%E5%90%BE%E7%88%B1%E7% ...
- 【个人笔记】ximo早期发的脱壳教程——手脱UPX壳
[个人笔记]ximo早期发的脱壳教程--手脱UPX壳 壳分为两种:压缩壳和加密壳,UPX是一种很简单的压缩壳. 手脱UPX壳: 工具:ExeinfoPE.OD 对象:rmvbfix 方法1:单 ...
- 深入底层逆向分析TDC‘s keygenme(手脱压缩壳)
系统 : Windows xp 程序 : TDC‘s keygenme 程序下载地址 :http://pan.baidu.com/s/1gdWyt6z 要求 : 脱壳 & 注册机编写 使用工具 ...
- 脱upx壳--初试--单步追踪
脱upx壳--初试--单步追踪 这里的练习题目是reversing.kr 的Easy Crack 我自己用upx加壳工具给它加了个壳,由于原文件逻辑简单,所以用它来练练手 之后用到的工具是IDA和Ol ...
- 填坑专记-手脱FSG壳
妈呀,脱FGS壳真的是坎坷颇多,多亏吾爱破解前辈们的帮忙.我一定要记录下来,省的以后再无法解决. 已经查看是FSG壳了.找到入口也容易了.重点就是脱壳并修复好它. 脱壳 OEP为: 使 ...
- 手脱NsPacK壳
1.查壳 使用PEiD未能检测到壳信息,这时,我们更换其他工具 从图中可以看到壳的信息为[NsPacK(3.x)[-]] 2.百度壳信息 北斗程序压缩(Nspack)是一款压缩壳.主要的选项是:压缩资 ...
- 手脱UPX(3.91)
1.使用Detect It Easy进行查壳: 2.使用x32dbg打开该带壳程序,在选项->选项->异常中添加区间设置0~FFFFFFFF全忽略: 3.我们F9运行到程序入口处,看到了p ...
- 手脱UPX v0.89.6 - v1.02
声明: 只为纪录自己的脱壳历程,高手勿喷 这个壳的脱法很多一般都一步直达的,步过我喜欢ESP定律 1.载入OD,在入口下一行ESP定律运行一次 > pushad ; //入口 BE mov es ...
- 手动脱UPX 壳实战
作者:Fly2015 Windows平台的加壳软件还是比較多的,因此有非常多人对于PC软件的脱壳乐此不彼,本人菜鸟一枚,也学习一下PC的脱壳.要对软件进行脱壳.首先第一步就是 查壳.然后才是 脱壳. ...
随机推荐
- jwt-在asp.net core中的使用jwt
JWT学习文章: 第一篇:JWT原理 第二篇:JWT原理实现代码 第三篇:在asp.net core中的使用JWT 前两篇文章中我写了jwt的原理,并且也用原理实现了jwt的验证.如果要看前两篇文章, ...
- Linux中ls的用法
在linux系统中,可以说一切皆文件.文件类型包含:普通文件,目录,字符设备文件,块设备文件,符号链接文件等 我们可以用file这个命令来查看文件的属性: 这里可以看到1.sh是个脚本文件 下面开始介 ...
- 01_JVM与Java体系结构
JVM发展历程 Sun Classic VM Exact VM 为了解决上一个虚拟机问题,jdk1.2时,sun提供了此虚拟机. Exact Memory Management:准确式内存管理 SUN ...
- hadoop学习(一)环境的搭建
1.安装几台Linux虚拟机.安装的过程就不赘述了,网上教程很多.win7系统上装了一个VMWare,因为一些原因,VMWare版本不是最新的,是VMWare7.1版本,由于VMWare版本不高,所以 ...
- MySQL服务器 IO 100%的分析与优化方案
前言 压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情况下,最优先排查的是监控服务器资源利用率,例如先用TOP 或者nmon等 ...
- WPF下如何使用TTF字体
之前再写代码的时候如果遇到了图标,我都喜欢再资源文件下创建JPG或者PNG来作为图片. 但是随着TTF字体图标的普及,图标类型的的图片越来越多的被放入到TTF中. 这篇也主要是写再WPF下如何使用TT ...
- ROS2学习之旅(12)——创建工作空间
workspace(工作空间)是包含ROS2 packages(包)的文件夹.在使用ROS 2之前,有必要在终端中source一下ROS 2的安装工作区,这样就可以在该终端中使用ROS 2的软件包. ...
- Docker原理:Namespace
目录 Namespace UTS Namespae PID Namespace Mount Namespace User Namespace Network Namespace 参考 Namespac ...
- Linux | 压缩与解压详解
tar tar 命令用于对文件进行打包压缩或解压,格式: tar [选项][文件] tar命令的参数及其作用 参数 作用 -c 创建压缩文件 -x 解开压缩文件 -t 查看压缩包内有哪些文件 -z 用 ...
- C语言:复合语句
复合语句(compound statement)简称为语句块,它使用大括号把许多语句和声明组合到一起,形成单条语句.语句块与简单的语句不同,语句块不用分号当作结尾.用括号{}括起来组成的一个语句称复合 ...