20154305 齐帅 PC平台逆向破解

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位运行器,不能运行该可执行文件,但是已将修改后的文件在其他同学电脑上运行过了,可以执行且达到目的。

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

原文地址:https://www.cnblogs.com/qsss/p/8561083.html

时间: 2024-11-29 02:35:37

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

20145331魏澍琛 《网络对抗技术》 PC平台逆向破解

20145331魏澍琛 <网络对抗技术> PC平台逆向破解 学习任务 1.shellcode注入:shellcode实际是一段代码,但却作为数据发送给受攻击服务器,将代码存储到对方的堆栈中,并将堆栈的返回地址利用缓冲区溢出,覆盖成为指向 shellcode 的地址. 2.Return-to-libc 攻击实验:即使栈有不可执行的能力,无法将shellcode放入堆栈中运行,但我们却可以直接让漏洞程序调转到现存的代码来实现我们的攻击. 注入Shellcode并执行 1.设置环境 2.以 anyt

Exp1 PC平台逆向破解(5)M 20154307 冯彬

Exp1 PC平台逆向破解(5)M 20154307 冯彬 本次只是做了部分实验,课上学习了手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 首先,我们先了解本次任务需要用到的代码 1.反汇编,将汇编语言转换成机器语言 `objdump -d 文件名 | more` 2.vi命令,进入文件编辑界面 vi 文件名 3.vi命令状态下的进制转换 ①将当前文本转化为16进制格式 :%!xxd ②将当前文本转化回文本格式 :%!xxd -r 4.vi状态下的查找 /查找的内容 5.

2017-2018-2 《网络对抗技术》 20155322 第二周 Exp1 PC平台逆向破解(5)M

2017-2018-2 <网络对抗技术> 20155322 第二周 Exp1 PC平台逆向破解(5)M 1-实践目标 1.1-实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Sh

网络对抗技术 2017-2018-2 20152515 Exp1 PC平台逆向破解(5)M

PC平台逆向破解 实践内容1 直接修改程序机器指令,改变程序执行流程 知识要求:Call指令,EIP寄存器,指令跳转的偏移计算,补码,反汇编指令objdump,十六进制编辑工具 学习目标:理解可执行文件与机器指令 进阶:掌握ELF文件格式,掌握动态技术 实践目标 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 实践步骤 首先让我们对pwn文件进行一个反汇编,可以看到文件中的是跳转到foo函数 让我们把文件转换成十六进制看一下 找到 d7 的位置 把 d7 修改为 c3 将

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

20155338<网络对抗技术> Exp1 PC平台逆向破解 实践目标 1.实践的对象是一个名为pwn1的linux可执行文件. 2.该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 3.该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段. 4.本次实践主要是学习两种方法: (1).利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发get

2017-2018-2 《网络对抗技术》 20155319 第二周 Exp1 PC平台逆向破解(5)M

2017-2018-2 <网络对抗技术> 20155319 第二周 Exp1 PC平台逆向破解(5)M 一.实践目标 1.1实践介绍 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何She

PC平台逆向破解实验报告(待补充)

PC平台逆向破解实验报告(待补充) 实践目标 本次实践的对象是一个名为pwn1的linux可执行文件. 该程序正常执行流程是:main调用foo函数,foo函数会简单回显任何用户输入的字符串. 该程序同时包含另一个代码片段,getShell,会返回一个可用Shell.正常情况下这个代码是不会被运行的.我们实践的目标就是想办法运行这个代码片段.我们将学习两种方法运行这个代码片段,然后学习如何注入运行任何Shellcode. 实践内容 手工修改可执行文件,改变程序执行流程,直接跳转到getShell

20155312张竞予 Exp1 PC平台逆向破解(5)M

Exp1 PC平台逆向破解(5)M 目录 实验内容 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 注入一个自己制作的shellcode并运行这段shellcode. 实验步骤及结果 问题及解决方案 参考资料 实验内容 实验知识概要 1.掌握NOP, JNE, JE, JMP, CMP汇编指令的机器码 通过反汇编指令objdump -d 20155312zjy查看可执行文件201

20155313 杨瀚 《网络对抗技术》实验一 PC平台逆向破解(5)M

exp1 PC平台逆向破解(5)M 一.实验内容 1.手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 2.利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 3.注入一个自己制作的shellcode并运行这段shellcode. 二.实验目的 1.运行原本不可访问的代码片段 2.强行修改程序执行流 3.以及注入运行任意代码. 三.实验过程 第一阶段 1.将pwn1代码拷入kali上,改名20155313pwn1. 2.使用objd