利用ESP定律的upx脱壳实践

2023-11-17

背景:
除了命令行upx -d脱壳,还有手动脱壳。ESP定律的本质是堆栈平衡,又称堆栈平衡定律,是应用频率最高的脱壳方法之一,脱壳的目的就是找到真正的OEP(源文件的EP代码)

方法:
从pushad到popad是一段解压缩代码(解压UPX壳),这段代码执行后,紧跟在popad后的第一个JMP指令可跳转到OEP
实践:
1:查壳在这里插入图片描述
2:OD打开
在这里插入图片描述
3:F8
在这里插入图片描述
//对于寄存器,指令执行后发生改变的寄存器会用红色显示,此处ESP和EIP的值发生改变,因为执行pushad指令,将8个通用寄存器(EAX-EDI)的值保存至栈,栈中的值增加了,所以ESP的值发生变化,而EIP的值表示下一个要执行指令的地址,也发生变化
执行PUSHAD的原因是使栈平衡,这段代码的最后还有popad,两者执行后可以把ESP的值回到原值,这里不明白为什么使栈帧平衡要执行push和pop,如果没有这两步只执行movebp,esp,不是还有基准值,搞不懂push和pop的意义)

4:下硬件断点
在这里插入图片描述
//下硬件断点,与F2断点不同的是,硬件断点直到下断点地址处的指令执行完成后,才完成调试,也就是说,程序会不断执行直到遇到了硬件断点处的地址,把该处地址的指令执行完成后,才完成调试,此处在ESP为000DFF54处下硬件断点的原因,我的理解是,是为了到达popad处回到栈的初始状态完成解压缩代码,在popad未执行时,它前一个指令执行后ESP的值应该是000DFF54,所以运行后再次遇到ESP为000DFF54时,下一个命令是popad
(popad指令把pushad存储在栈中的值再次恢复到各个寄存器,我理解为8次pop命令)

5:F9运行
在这里插入图片描述
//猜测未执行popad时,ESP的值应该是000DFF54,此时还未将8个寄存器的值弹出栈。执行popad时的瞬间访问到硬件断点000DFF54,暂停调试,此时已执行了popad,回到了栈的初始状态,发现除了EIP其他寄存器值和初始寄存器的值一样

6:找到离popad最近的JMP,执行JMP跳转
在这里插入图片描述
//发现OEP处寄存器的值除了EAX和EIP,其他的的值和pushad的值一样
EAX中值不一样的原因是,EAX中保存函数的返回值,保存的是OEP的地址

7:脱壳
在这里插入图片描述
总结:
1:执行pushad,下硬件断点F9运行
2:找到popad后的第一个jmp指令F8
3:跳转到了OEP

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用ESP定律的upx脱壳实践 的相关文章

  • spring框架---IOC

    spring框架的概述 spring是轻量级的开源的JavaEE框架 解决企业应用的开发复杂性 spring有两个核心 IOC AOP IOC 控制反转 把创建对象的过程交给Spring进行管理 AOP 面向切面 不修改源代码的进行功能增强
  • SpringBoot小知识点(可能有你不知道的)

    SpringBoot复习 基础部分 1 SpringBoot中配置文件使用 配置文件间的加载优先级 properties 最高 gt yml gt yaml 最低 2 yaml数据读取 对于yaml文件中的数据 其实你就可以想象成这就是一个

随机推荐

  • 【Salvation】——怪物角色动画&主角碰撞死亡动画

    Salvation 怪物角色动画 主角碰撞死亡动画 写在前面 这个动画功能同样也是使用JavaScript编写脚本 在Unity3D游戏引擎的环境中实现 在怪物的角色动画中 很多与人物相同 这里不再重复 一 设计敌人 拖一个精英sprite
  • Tcp通信步骤

    package cn dali4 code01 TCP通信步骤 服务器先启动 服务器端不会主动请求客户端 必须使用客户端请求服务器 客户端和服务器端建立一个逻辑连接 这个链接包含了一个IO对象 客户端和服务器端可以使用IO对象进行通信 IO
  • 树莓派软连接修改(python为例)

    树莓派软连接修改 进入linux的软连接存放位置 cd usr bin 删除原有软连接 以python为例 rm python 建立新软连接 以python连接python3为例 ln s usr python bin python3 us
  • 大数取模运算,快速幂取模运算

    1 快速幂取模 http www cnblogs com yinger archive 2011 06 08 2075043 html 快速幂取模就是在O logn 内求出a n mod b的值 算法的原理是ab mod c a mod c
  • 微服务系列:Spring Cloud Alibaba 之 Sentinel 高级流控规则

    微服务系列 Spring Cloud Alibaba 之 Sentinel 基本流控规则 在上一篇中 我们学习完了 Sentinel 的基本流控规则 这篇我们来研究一下 Sentinel 的高级流控规则 话不多说 开始今天的学习 一 概述
  • 【进阶项目】Lombok 使用详解

    前言 在 Java 应用程序中存在许多重复相似的 生成之后几乎不对其做更改的代码 但是我们还不得不花费很多精力编写它们来满足 Java 的编译需求比如 在 Java 应用程序开发中 我们几乎要为所有 Bean 的成员变量添加 get set
  • 【java毕业设计】基于java+Lucene+Tomcat的搜索引擎设计与实现(毕业论文+程序源码)——搜索引擎

    基于java Lucene Tomcat的搜索引擎设计与实现 毕业论文 程序源码 大家好 今天给大家介绍基于java Lucene Tomcat的搜索引擎设计与实现 文章末尾附有本毕业设计的论文和源码下载地址哦 需要下载开题报告PPT模板及
  • 忽略shell脚本中回车的方法

    在实际应用过程中 经常遇到需要忽略shell脚本中回车的问题 本文做了一些总结 既有常规操作 也有令人拍案叫绝的方法 且让我慢慢说来 一 使用Linux shell自身的字符串操作 Linux shell内置了一系列的字符串操作符号 可以实
  • 高并发的epoll+多线程

    epoll是linux下高并发服务器的完美方案 因为是基于事件触发的 所以比select快的不只是一个数量级 单线程epoll 触发量可达到15000 但是加上业务后 因为大多数业务都与数据库打交道 所以就会存在阻塞的情况 这个时候就必须用
  • algorithm 修改序列的操作

    文章目录 修正序列算法 fill first last val random shuffle first last partition first last pred rotate first middle last 相关参考 修正序列算法
  • logback历史日志无法自动删除的问题

    例如在logback spring xml进行如下配置
  • 基于Tensorflow实现一个Transformer翻译器

    Transformer是谷歌在2017年的一篇论文 Attention is all you need 提出的一个seq2seq的模型架构 其创造性的提出了自注意力的思想 可以很好的表达序列中各个单词之间的相互注意力关系 这个模型在NLP领
  • html5 canvas+js实现ps钢笔抠图

    html5 canvas js实现ps钢笔抠图 原文 https www cnblogs com guozefeng p 3719915 html 1 项目要求需要用js实现photoshop中钢笔抠图功能 就用了近三四天的时间去解决它 最
  • react antd4.0 渲染树节点

  • 你应该知道如何跨域

    前言 转眼就是秋招季啦 经历了几场笔试面试 屡次被问到关于如何实现跨域 老实说 之前都是纸上谈兵 也没有项目需要跨域 甚至觉得这个东西没什么意义 直到今天项目中遇到了跨域问题 看了不少资料才理解跨域的普遍性和意义 特写此篇文章整理自己所得
  • [Error] 'else' without a previous 'if'

    使用if语句这样写 DevC 会报错 if语句后面如果有两条语句或者更多 要加上大括号 使之成为语句块 这样改之后 就可以正常编译运行
  • .NET发送请求(get/post/http/https),携带json数据,接收json数据

    C 发送https请求有一点要注意 ServicePointManager ServerCertificateValidationCallback new RemoteCertificateValidationCallback CheckV
  • C++面向对象特性之继承

    一 继承的概念 继承是一种机制 目的是实现代码复用的同时减少重复代码量 它允许程序员在保持原有类特性的基础上进行功能的拓展 这样产生的新类叫做派生类 被继承的类叫做基类 下面可以看一个实例 class Animal int age clas
  • 遇见未来

    互联网及其延伸 正在导向我们走向一个新的时代 软件技术在新一轮革命技术中毫无疑问是核心竞争力之一 C 语言发明人Biarne Stroustrup说 人类文明运行在软件之上 也突出了软件技术的重要地位 什么是软件定义 软件定义在企业的数据中
  • 利用ESP定律的upx脱壳实践

    背景 除了命令行upx d脱壳 还有手动脱壳 ESP定律的本质是堆栈平衡 又称堆栈平衡定律 是应用频率最高的脱壳方法之一 脱壳的目的就是找到真正的OEP 源文件的EP代码 方法 从pushad到popad是一段解压缩代码 解压UPX壳 这段