django 顺序查找 WorldCloud Jetbains全家桶 ssis linktosql Plupload vue修改样式 多店版微信商城 mysql降序 mysql卸载重装 h5下拉刷新 java 大文件上传 kubernetes集群 后台管理网站模板 python查找指定字符 python函数的调用 python获取输入 java在线学习 java集合框架 java开发入门 adobe清理工具 键盘模拟器 彻底删除mysql 免费书籍 蓝牙测试软件 思源字体 古风头像女动漫 数独软件 斑驳纹理 0x000007a linux格式化硬盘 firefox绿色版 hdcp是什么 一键清除锁屏密码 ps工具栏怎么调出来 js压缩图片 服务器系统安装教程 iar软件 ps魔棒快捷键
当前位置: 首页 > 学习教程  > 编程语言

upx脱壳日记

2020/9/19 13:40:47 文章标签:

一、静态方法

upx -d

有时候可能会失败,需要切换使用正确的UPX版本。Windows下内置对各UPX版本的第三方图形化界面UPXShell工具,可以方便的切换版本,通过go按钮,可以切换upx加壳版本与脱壳版本

   

二、动态方法(手脱)

虽然UPX本身可以脱壳,但是UPX是基于加壳后可执行文件内存储的标识来查找并操作的,由于UPX是开源的,软件保护者可以随意修改这些标识,从而导致官方标准版本的UPX脱壳失败。因为UPX中可以改动的地方太多,所以人们在这种情况下一般采用动态脱壳

x86的汇编指令pushad可以轻松将所有寄存器一次性压入栈,UPX使用了这样的方式,被形象的称为“保护现场”,所以将这里的下一步执行后,在esp下硬件读取断点,再次调用就是esp返回的时候,我们直接就可以回到原来的程序执行流

执行过程:

先F8到pushad的下一步,然后在寄存器那边右键ESP,"HW break [ESP]"下硬件断点

设置完成后,F9运行,再次中断到一个地址

实际上这是一个将栈空间向上清零0x80长度的循环,并不是程序真实代码,后面有一个向前的大跳转,从0x430638跳到0x404ddc,这样就跳到原程序的位置

单击这一按jmp指令,然后F4,使程序跳到此指令上执行,然后F8,此时看起来已经很正常了

然后对程序dump。在OD中选择“插件”-“OllyDump”-“脱壳正在调试的进程”,然后单击获取EIP作为OEP,再单击脱壳,保存后可完成脱壳

此时IDA中和程序执行都已正常

 

 

 


本文链接: http://www.dtmao.cc/news_show_200056.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?