利用ESP定律的upx脱壳实践

利用ESP定律的upx脱壳实践利用ESP定律的upx脱壳实践背景:除了命令行upx-d脱壳,还有手动脱壳。ESP定律的本质是堆栈平衡,又称堆栈平衡定律,是应用频率最高的脱壳方法之一,脱壳的目的就是找到真正的OEP(源文件的EP代码)方法:从pushad到popad是一段解压缩代码(解压UPX壳),这段代码执行后,紧跟在popad后的第一个JMP指令可跳转到OEP实践:1:查壳2:OD打开3:F8//对于寄存器,指令执行后发生改变的寄存器会用红色显示.此处ESP和EIP的值发生改变,因为执行pushad指令,将8个

大家好,又见面了,我是你们的朋友全栈君。

背景:
除了命令行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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/161728.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • datagrip激活码2021_在线激活

    (datagrip激活码2021)本文适用于JetBrains家族所有ide,包括IntelliJidea,phpstorm,webstorm,pycharm,datagrip等。https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~M…

    2022年3月21日
  • Avalondock 第一步 创建停靠面板

    Avalondock 第一步 创建停靠面板转载:https://www.cnblogs.com/minhost/p/7234647.html步骤1下载库文件加载指定的库,在项目上点击右键,打开管理NuGet程序包输入Avalondock安装Xceed.Products.Wpf.Toolkit.AvalonDock和Xceed.Products.Wpf.Toolkit.AvalonDock.Themes两…

    2022年7月20日
  • java出现中文乱码_JAVA中文显示乱码问题「建议收藏」

    java出现中文乱码_JAVA中文显示乱码问题「建议收藏」在基于JAVA的编程中,经常会碰到汉字显示乱码的问题,经一番查询现总结如下。在JSP中建议网页编码方式用GBK,这样会方便一些。这个问题是因为JAVA编码方式转换出现了问题,Java中默认的编码方式是UNICODE,而中国人通常使用的文件和DB都是基于GB2312或者BIG5等编码,故会出现此问题。我知道一定有很多朋友也会碰到这个问题,所以特就总结了一下,来拿出来让大家一起分享了。自己也做个备忘。…

    2022年7月8日
  • 如何搭建自己的git服务器_git 创建远程仓库

    如何搭建自己的git服务器_git 创建远程仓库GitHub,Gitee想来大家都用过,我们的代码就是托管在这些平台上的。因此,你可能好奇为什么我们不自己大家一个git服务器呢?下面,就开始教大家如何一步步搭建自己的git服务器(试验成功的那一刻还是很让人激动的)。我自己的虚拟机是centOS7的,首先肯定要安装git和git-daemon,可以使用自带的yum进行安装。yuminstall-ygityuminstall-ygit-daemon虚拟机服务端创建git目录[root@ma.

    2022年9月25日
  • t460 拆解_转一个详尽、全面的的X201拆机 – ThinkPad系统与软件技术|应用技巧|软件分享区 – 鸿利在线|北京ibm水货|IBM水货|Thinkpad笔记本|Thinkpad全球购|…

    t460 拆解_转一个详尽、全面的的X201拆机 – ThinkPad系统与软件技术|应用技巧|软件分享区 – 鸿利在线|北京ibm水货|IBM水货|Thinkpad笔记本|Thinkpad全球购|…占楼············下载(30.5KB)2010-6-123:42下载(20.97KB)2010-6-123:42ThinkPadX201的防水键盘,其实很多商务机都具备防水键盘,并不是说底部没有排水口的笔记本其键盘就不防水,是否防水取决于键盘导电薄膜边缘是否被密封。X201的键盘侧面有漏口,严格来说这不仅是防水键盘,而是进一步的防泼溅键盘。下载(23.51KB)2010…

    2022年6月27日
  • 取反是什么意思_1取反是多少

    取反是什么意思_1取反是多少很多编程语言使用~作为一元按位取反(NOT)操作符,Go重用^XOR操作符来按位取反://错误的取反操作funcmain(){fmt.Println(~2)//bitwisecomplementoperatoris^}//正确示例funcmain(){varduint8=2fmt.Printf(“%08b\n”,d)//00000010fmt.Printf(“%08b\n”

    2022年8月14日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号