前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >手动UPX脱壳演示「建议收藏」

手动UPX脱壳演示「建议收藏」

作者头像
全栈程序员站长
发布2022-09-09 10:33:06
1.5K0
发布2022-09-09 10:33:06
举报
文章被收录于专栏:全栈程序员必看

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

首先,用PEid打开加壳后的程序CrackmeUPX.exe,可以发现使用的是UPX壳。UPX壳是一种比较简单的压缩壳,只需要根据堆栈和寄存器的值进行调试,就能找到程序的正确入口点。当然,如果不怕麻烦的话,也可以全程单步调试,直到出现像正常程序的入口点一样特征的代码,这样就找到了入口点。

用我爱激活成功教程版ollydbg打开CrackmeUPX.exe,可以看到第一条指令是pushad,这显然不是普通程序应该有的第一条指令。pushad保存当前的上下文,即把寄存器的值存到堆栈中。

pushad后,可以看到堆栈中的内容正是之前的各个寄存器的值,其中栈顶保存的是EDI的值。栈顶的地址存储在ESP中。如果程序要正常运行,必定要从栈中取回这些值,因此可以到栈顶的内容表示的地址去看看会进行什么操作。

在栈顶所在地址设置断点,执行到此处,发现是一个跳转指令,跳转到0x00401000。

跳转后,发现出现的代码符合正常程序入口点的特征,那么正确的入口点应该就是0x00401000。基于此,进行脱壳并重命名为test.exe。

用PEiD打开test.exe,可以看到已经没有壳了。至此,脱壳完成。

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档