2018年05月01日

                       湖南大学Bump 实验 第一关 

201608010419 李汉俊

2018415

1)在这个实验之前,为了解决能够把电脑的文件传送到,虚拟机上,从百度查了,通过建立共享文件夹,可以使得完成共享。步骤如下:

关于把电脑本机文件共享给虚拟机

 

1、先在电脑建一个共享文件夹public,点击上面的共享,选择everyone

2、virtual box设备处 安装 增强功能,然后要重启

3、在设备除设置共享文件,选择其他,从电脑选那个public 共享文件

4、终端挂载

  Sudo mkdir /mnt/share

  Sudo mount -t vboxsf public /mnt/share

5、设置自动挂载

  修改/etc/fstab的内容

  Sudo vi /etc/fstab     //拥有修改权限

  添加内容

  Public /mnt/share vboxsf rw,gid=100,uid=1000,auto 0 0

 

  以:w!写入退出

  Wq 保存

(2) 另一个问题,在虚拟机上面,解压rar 文件,发现出现错误,然后用不了那个可执行文件。其实这个是因为确实这解压功能的软件,然后去终端安装了rar unrar 这连个软件后,就可以正常解压了。

(3) 当执行那个可执行文件时,发现,权限不够,得去修改那个可执行文件的权限属性,我觉得应该是,这个可执行文件不是gcc本身编译出来的,所以刚开始处理跟以前不大一样。

 

一、分析源代码

c语言代码可以看到,首先输入一个串,然后传参给phase_1函数

2018年05月01日 

二、查看汇编代码

2018年05月01日 

调用phase1前的栈帧

 

2018年05月01日 

此出是主函数调用了phase_1(),建立了新的栈帧

2018年05月01日 

2018年05月01日 

把数据移入栈

0x804115c移入 esp的上一个存到单元

main函数的第一个参数,input 移到当前esp栈顶

 

2018年05月01日 

调用字符串比较函数

2018年05月01日 

2018年05月01日 

调用字符串比较函数后,建立新的栈帧

 

2018年05月01日 

从这里可以看到,先读取0x8p),即 input这个值 到ebx

同理把    0x804115c 读到esi那里,然后进行比较

最后把判断结果保存在eax,如果等0,就结束,否则就调用爆炸函数

由于这个,字符串函数比较的功能,就是,当相同返回0,不相同返回1,现在要为0跳过爆炸,所以我们的输入,input 就是要跟地址0x804115c相同

 

这个就涉及到,查看内存地址的值,用x/s addr 命令可以查看

 2018年05月01日

 

由此可以看到该地址的内容是一个字符串

关于内存查看,有相关资料

gdb查看指定地址的内存地址的值examine 简写 x-----使用gdb> help x 来查看使用方式
     x/ (n,f,u为可选参数)
n: 需要显示的内存单元个数,也就是从当前地址向后显示几个内存单元的内容,一个内存单元的大小由后面的u定义
f:显示格式
               x(hex) 按十六进制格式显示变量。
               d(decimal) 按十进制格式显示变量。
               u(unsigned decimal) 按十进制格式显示无符号整型。
               o(octal) 按八进制格式显示变量。
               t(binary) 按二进制格式显示变量。
               a(address) 按十六进制格式显示变量。
               c(char) 按字符格式显示变量。
               f(float) 按浮点数格式显示变量
u:每个单元的大小,按字节数来计算。默认是4 bytes。GDB会从指定内存地址开始读取指定字节,并把其当作一个值取出来,并使用格式f来显示

               b:1 byte     h:2 bytes     w:4 bytes g:8 bytes
     比如x/3uh 0x54320表示从内存地址0x54320读取内容,h表示以双字节为单位,3表示输出3个单位,u表示按照十六进制显示。

 

 

 

 

从上面:我们知道,我们调用字符串比较时,我们的输入存储在eax寄存器里面

于是我设断点查看

2018年05月01日 

本以为,eax存储的是1,然而不是

后来发现,eax只是存了那个串的首地址

2018年05月01日 

换个方式查看,确实是存了1

当然,输入"We have to stand with our North Korean allies."这个串,就过第一关了。




































没有更多推荐了,返回首页