一、实验目的

  • 了解程序加壳、脱壳原理
  • 掌握PE文件结构
  • 学习利用UPX Shell、LoardPE、IDA等工具完成软件的加、脱壳操作

二、实验题目

  • UPX加壳:对crackme加上UPX壳,用 LordPE 或 PEiD 工具查看加壳前后的变化
  • UPX脱壳:用UPX Unpacker对已加壳的 crackme.exe 程序进行脱壳
  • 手动脱壳:使用ESP定律和Ollydbg工具对crackme.exe进行手工脱壳
  • IDA静态分析:用 IDA 的 F5 反汇编功能查看脱壳前后的程序伪代码,获取运行crackme后屏幕提示的输入口令

三、实验环境

  • Windows 7系统或以上、连接Internet的主机
  • 可能会用到的软件:upxshell、LordPE、PEiD、upx unpacker、IDA、OllyDBG
  • 手动脱壳实例参考:https://www.52pojie.cn/thread-727090-1-1.html
  • ESP定律学习参考:https://www.52pojie.cn/thread-394116-1-1.html

四、实验步骤及结果

4.1 UPX加壳

首先查看未加壳前的应用程序

现在使用UPX Shell对壳进行加载

检查发现已经加壳成功

4.2 UPX脱壳

用UPX Unpacker对已加壳的 crackme.exe 程序进行脱壳

4.3 手动脱壳

根据ESP定律先找到PUSHAD下使得ESP变红的内存地址

然后在数据窗口中追踪

然后使用断点 --> 硬件访问 --> Word

然后使用F9直接运行到

然后再F8运行到OEP

然后删除硬件断点

然后使用Ollydbg脱壳工具进行脱壳

可以发现dump出来的文件脱壳成功

4.4 IDA静态分析

使用IDA打开脱壳后的文件可以看到main函数源代码

// write access to const memory has been detected, the output may be wrong!
int main_0()
{int v0; // ST14_4int v1; // edxint result; // eaxint v3; // ST14_4int v4; // edxunsigned int i; // [esp+50h] [ebp-2Ch]char v6; // [esp+54h] [ebp-28h]char v7; // [esp+55h] [ebp-27h]char v8; // [esp+56h] [ebp-26h]char v9; // [esp+57h] [ebp-25h]char v10; // [esp+58h] [ebp-24h]char v11; // [esp+59h] [ebp-23h]char v12; // [esp+5Ah] [ebp-22h]char v13; // [esp+5Bh] [ebp-21h]char v14; // [esp+5Ch] [ebp-20h]char v15; // [esp+5Dh] [ebp-1Fh]char v16; // [esp+5Eh] [ebp-1Eh]char v17; // [esp+5Fh] [ebp-1Dh]int v18; // [esp+60h] [ebp-1Ch]int v19; // [esp+64h] [ebp-18h]char v20[20]; // [esp+68h] [ebp-14h]v6 = 'r';v7 = 'o';v8 = 'i';v9 = 's';v10 = '2';v11 = '0';v12 = '1';v13 = '4';v14 = 'r';v15 = 'o';v16 = 'i';v17 = 's';v18 = '\0';v19 = '\0';printf("password:");scanf("%s", v20);if ( strlen(v20) == 12 ){for ( i = 0; i < 0xC && *(&v6 + i) == v20[i]; ++i );if ( i == 12 )printf("good job!\nthe key is your input!\n");elseprintf("try again!\n");if ( --stru_437180._cnt < 0 ){_filbuf(&stru_437180);}else{v3 = (unsigned __int8)*stru_437180._ptr;++stru_437180._ptr;}if ( --stru_437180._cnt < 0 ){_filbuf(&stru_437180);}else{v4 = (unsigned __int8)*stru_437180._ptr;++stru_437180._ptr;}result = 0;}else{printf("try again!!\n");if ( --stru_437180._cnt < 0 ){_filbuf(&stru_437180);}else{v0 = (unsigned __int8)*stru_437180._ptr;++stru_437180._ptr;}if ( --stru_437180._cnt < 0 ){_filbuf(&stru_437180);}else{v1 = (unsigned __int8)*stru_437180._ptr;++stru_437180._ptr;}result = 0;}return result;
}

程序是在与字符串rois2014rois进行比较,所以密码就是rois2014rois,测试成功

实验四:使用UPX加壳与脱壳相关推荐

  1. 【原创】脱UPX加壳的notepad.exe

    [文章标题]: 脱UPX加壳的notepad.exe [文章作者]: 微微虫[S.T.C][DCT] [作者邮箱]: ]nuxgod@163.com [作者主页]: http://wwcgodsoft ...

  2. Android UPX加壳源码解析

    ​目录 一. UPX加壳的原理 1. UPX的工作原理 2. UPX实时解压的原理和流程 3. UPX加壳应用的场景 4. 修改UPX源码需要注意以下几点 二. UPX加壳Android so的方法和 ...

  3. 什么是加壳和脱壳技术?加壳和脱壳技术是什么意思?

    什么是加壳和脱壳技术?加壳和脱壳技术是什么意思? 加壳,是一种通过一系列数学运算,将可执行程序文件或动态链接库文件的编码进行改变(目前还有一些加壳软件可以压缩.加密驱动程序),以达到缩小文件体积或加密 ...

  4. BUUCTF-Reverse:新年快乐 + 加壳与脱壳

    题目地址:https://buuoj.cn/challenges#%E6%96%B0%E5%B9%B4%E5%BF%AB%E4%B9%90 用IDA打开文件: 怎么可能才两个函数,猜测加了壳,直接查: ...

  5. 软件的壳和壳的含义、概念以及加壳和脱壳方法

    软件的壳和壳的含义.概念以及加壳和脱壳方法 PE(Portable Executable) 也就是EXE和DL)文件所具有的起压缩.加密.保护作用的东西.可以用PEiD等软件查壳. 加壳通过修改程序入 ...

  6. Android so文件保护——使用upx加壳

    最近有人问我关于UPX加壳的问题,关于UPX如何加壳以及脱壳,网上说的很清楚了,这里不细说了,附件是很早之前我配置UPX加壳环境的一些资料和配置包以及成功的实例,有需要的小伙伴可以下下来玩. 附件:点 ...

  7. 用ollydbg手脱UPX加壳的DLL

    用Ollydbg手脱UPX加壳的DLL 作者:fly [目标程序]:UPX加壳的EdrLib.dll.附件中还有输入表.重定位数据.UPXAngela以及UnPacked以供参考.        [作 ...

  8. .NET程序的代码混淆、加壳与脱壳

    通常我们通过代码混淆.加密的形式达到软件保护的目的.在Web开发里我们接触过的可能就是JS代码加密了,可以通过对JS代码进行混淆.加密从而实现对核心JS代码的保护.如果没有接触过的可以在这里简单了解一 ...

  9. Python pyc文件 bytecode的压缩, 加壳和脱壳解析

    我们常常看到, 自己用PyInstaller等库打包的exe被别人反编译.而源代码在exe文件中是以字节码形式存储的.掌握了字节码的加密技巧, 就可以防止源代码的反编译. 目录 1.字节码是什么 2. ...

最新文章

  1. 基于深度学习方式的点云处理算法汇总
  2. Hello Blazor:(2)集成Tailwind CSS
  3. 发现 ASP.NET Core SignalR
  4. 大数据分析必须要会的python函数操作!!!
  5. 159.Oracle数据库SQL开发之 SQL优化——若干
  6. 在matlab中配置vlfeat,在MATLAB R2018b中配置VLFeat
  7. yolov5深度剖析+源码debug级讲解系列(二)backbone构建
  8. linux 编辑文件出现E45readonly option is set (add! to .....)
  9. 连续四天!2018杭州·云栖大会你可以...
  10. 杀戮空间2服务器协议,杀戮空间2 云服务器搭建
  11. 流利说英语level4_英语流利说懂你英语 Level4 Unit1 Part1 Vocabulary
  12. QT——移植官方MQTT库
  13. AWS OpenSearch 1.0 简单部署安装
  14. 程序员如何写出技术好文?
  15. Java企业应用系统——MES工厂智造系统 包含ERP WMS
  16. 《网络是怎么连接的》读书笔记
  17. 迅雷5.5.4.268去广告版
  18. cosmos源码分析之二整体流程
  19. 锌矿如何计算机每吨价格,锌精矿价格计算方法
  20. SpringBoot配置文件的修改

热门文章

  1. 小程序js中for循环失效问题
  2. 7.12—通宵之后的学习
  3. 问题 A: 草地排水
  4. 经典书是必须要读吗?
  5. html怎样回车,html回车
  6. 提高mysql插入速度的方法
  7. 【python】算法与数据结构例题分析
  8. python中PIL安装教程
  9. 拒绝平庸——打造产品气质三步法
  10. PWA 实践/应用(Google Workbox)