Exp1 PC平台逆向破解

一、实践目标

本次实践的对象是一个名为pwn1的linux可执行文件。

该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串。

该程序同时包含另一个代码片段,getShell,会返回一个可用Shell。正常情况下这个代码是不会被运行的。我们实践的目标就是想办法运行这个代码片段。

二、实验要求

报告内容

  1. 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码(0.5分)
  2. 掌握反汇编与十六进制编程器 (0.5分)
  3. 能正确修改机器指令改变程序执行流程(0.5分)
  4. 能正确构造payload进行bof攻击(0.5分)

报告整体观感

  1. 报告格式范围,版面整洁 加0.5。

  2. 报告排版混乱,加0分。

文字表述

  1. 报告文字内容非常全面,表述清晰准确 加1分。

  2. 报告逻辑清楚,比较简要地介绍了自己的操作目标与过程 加0.5分。

  3. 报告逻辑混乱表述不清或文字有明显抄袭可能 加0分。

三、实验方法

  • 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。

四、实验步骤

(一)反汇编查看pwn1的内容并计算修改地址的值

1. 输入反汇编指令 objdump -d 20154305|more查看可执行文件内容,其中20154305为pwn1的一个副本

2. 向下翻页找到getshell函数、foo函数和main函数

由图中可见“ call 8048491 "这条指令将调用位于地址8048491处的foo函数,其对应机器指令为“e8 d7ffffff”,e8即跳转之意。本来正常流程,此时此刻EIP的值应该是下条指令的地址,即80484ba,但如一解释e8这条指令,CPU就会转而执行 “EIP + d7ffffff”这个位置的指令。“d7ffffff”是补码,表示-41,41 = 0x29 ,80484ba + d7ffffff = 80484ba - 0x29 正好是8048491这个值。

main函数调用foo,对应机器指令为“ e8 d7ffffff ”,那我们想让它调用getShell,只要修改 d7ffffff 为 getShell-80484ba 对应的补码就行。用Windows计算器,直接 47d-4ba就能得到补码,是c3ffffff。

(二)修改可执行文件

1. 用vim编辑器打开20154305可执行文件,输入 vim 20154305

2. 在 vim 编辑器中按 Esc 键,输入" :%!xxd "将原格式转换成十六进制显示,结果如下图:

3. 查找要修改的内容,输入“ /e8 d7 "。


此处可通过记录改行机器语言前边的编号000004b0标识位置。

4. 修改d7为c3


具体操作是将光标移动到要修改的位置,然后按下键盘上的 r 键,然后按下修改的目标值。

5. 转换十六进制为原格式,输入 “ :%!xxd -r ” 。

6. 保存、退出 vim 编辑器

输入 “ :wq ”

(三)反汇编检查修改后的结果


修改指令成功,本次试验成功完成。

(五)实验总结

首先,由于条件有限,我实验的PC未能安装32位运行器,不能运行该可执行文件,但是已将修改后的文件在其他同学电脑上运行过了,可以执行且达到目的。

其次,本次实验内容虽然以前从未接触过,但是同样也给我带来了兴趣,使我能够深入地去学习研究,并且可参考的报告、案例比较多,理解相对比较深刻,但是对于该实验的其他攻击方法暂时没有头绪,会在以后的课上继续深入研究。

20154305 齐帅 PC平台逆向破解的更多相关文章

  1. 20165223《网络对抗技术》Exp1 PC平台逆向破解

    目录--PC平台逆向破解 1 逆向及BOF基础实践说明 1.1 实践内容 1.2 实践要求 1.3 基础知识 2 实验步骤 2.1 直接修改程序机器指令,改变程序执行流程 2.2 通过构造输入参数,造 ...

  2. 20155324《网络对抗》Exp1 PC平台逆向破解(5)M

    20155324<网络对抗>Exp1 PC平台逆向破解(5)M 实验目标 本次实践的对象是一个名为~pwn1~的~linux~可执行文件. 该程序正常执行流程是:~main~调用~foo~ ...

  3. 2018-2019-2 20165237《网络攻防技术》Exp1 PC平台逆向破解

    2018-2019-2 20165237<网络攻防技术>Exp1 PC平台逆向破解 一.实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调 ...

  4. 2018-2019-2 20165234 《网络对抗技术》 Exp1 PC平台逆向破解

    实验一 PC平台逆向破解 实验目的 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另 ...

  5. 20165221 《网络对抗技术》EXP1 PC平台逆向破解

    20165221 <网络对抗技术>EXP1 PC平台逆向破解 一.实验内容 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函 ...

  6. 2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解

    2018-2019-2 网络对抗技术 20165325 Exp1 PC平台逆向破解(BOF实验) 实验有三个模块: (一)直接修改程序机器指令,改变程序执行流程: (二)通过构造输入参数,造成BOF攻 ...

  7. 2018-2019-2 20165206《网络对抗技术》Exp1 PC平台逆向破解

    - 2018-2019-2 20165206<网络对抗技术>Exp1 PC平台逆向破解 - 实验任务 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:mai ...

  8. Exp1 PC平台逆向破解 20165235 祁瑛

    Exp1 PC平台逆向破解 20165235 祁瑛 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字 ...

  9. 2018-2019-2 20165317《网络对抗技术》Exp1 PC平台逆向破解

    2018-2019-2 20165317<网络对抗技术>Exp1 PC平台逆向破解 实验目的 掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 NOP:无作用,英文&quo ...

随机推荐

  1. github 添加wiki

    亲们支持我的新博客哦==>地址(以后更新会尽量在新博客更新,欢迎大家访问加入我的后宫w) ) 平时都是写readMe和docs的,一直眼瞎没有注意到有wiki这个功能 随便找一个写了wiki的看 ...

  2. Android 开发 系统组件集合

    常用的TextView.Button.ImageView和几个常用布局就不介绍了,我们介绍一些特别好用但是常常忘记的组件. 标题栏组件 <androidx.appcompat.widget.To ...

  3. [持续交付实践] pipeline使用:快速入门

    什么是pipeline 先介绍下什么是Jenkins 2.0,Jenkins 2.0的精髓是Pipeline as Code,是帮助Jenkins实现CI到CD转变的重要角色.什么是Pipeline, ...

  4. oracle12 安装

    oracle    oracle orcl    orcl

  5. leetcode283

    public class Solution { public void MoveZeroes(int[] nums) { ; ; i < nums.Length; i++) { //[0, 1, ...

  6. css:清楚html所有标签自带属性

    相信如果您动手写过网页的话,应该体会到有些标签会自带一些默认的样式,而这些样式或许又是我们不想要的,所以我们可以用以下代码清除所有标签的默认样式   html, body, div, span, ap ...

  7. 项目(三)PXE高效能批量网络装机

    PXE:预启动执行环境 PXE是由intel公司开发的网络引导技术,工作在Client/Server模式,允许客户机通过网络从远程服务器下载引导镜像,并加载安装文件或者整个操作系统. 若要搭建PXE网 ...

  8. TP-Link 路由器配置 config.bin 解密工具 python 代码 (转载)

    转自吾爱破解 https://www.52pojie.cn/forum.php?mod=viewthread&tid=574222 需要安装crypto #!/usr/bin/env pyth ...

  9. NodeJs学习相关网址

    node官方中文 https://nodejs.org/zh-cn/   Node.js 中文网 https://nodejs.org/zh-cn/   Node.js 教程 | 菜鸟教程 http: ...

  10. DB2 公共表表达式(WITH语句的使用)

    ----start 说起WITH 语句,除了那些第一次听说WITH语句的人,大部分人都觉得它是用来做递归查询的.其实那只是它的一个用途而已,它的本名正如我们标题写的那样,叫做:公共表表达式(Commo ...