2018-2019-2 网络对抗技术 20165322 Exp1 PC平台逆向破解
作者:互联网
2018-2019-2 网络对抗技术 20165322 Exp1 PC平台逆向破解
实验准备
由于kali镜像的原因,系统没有32位的运行库,pwn1文件没法运行,所以我们需要做一些准备工作。
- 下载阿里云与中科院的更新源
- 和安装教程里的相同,输入指令
leafpad /etc/apt/sources.list
打开sources.list文件,直接原来的源在后面家伙加上需要补充的更新源就可以了。 - 这里用同学分享在群里的博客中的源更新失败了,原因大概是kali对应的版本不正确,因此找不到相应的ip地址。多找几个教程总能有适合自己的源。
#中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib #阿里云 #deb http://mirrors.aliyun.com/kali kali-rolling main non-free contrib #deb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib
- 执行:
apt-get clean
,apt-get update
两条指令即可,之前的博客也说过apt-get upgrade是对所有软件进行更新,耗时过长,且容易蓝屏。不需要做这一步。
- 和安装教程里的相同,输入指令
- 安装32位运行库
- 更新好源以后,开始安装32位的运行库,主要是kali官方源不含这个32位的运行库,所以才有以上操作。
- 执行指令
apt-get install lib32z1
即可 - 此时试运行
./pwn1
已经能运行成功。
任务一:直接修改程序机器指令,改变程序执行流程
- 实验内容:手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数。
- 攻击目标:运行原本不可访问的代码片段
攻击原理:如图所示,代码一共有3个模块,1.getshell;2.foo函数;3.main函数。正常情况下,程序先从main函数开始执行,然后调用foo函数,运行完foo函数以后程序返回到main函数里。因此,正常情况下,getshell是不会被执行到的。我们要做的就是把pwn1程序进行反汇编,然后直接修改程序的机器指令,使程序由main函数直接跳转到getshell函数里。
- 实现过程:
- 首先备份pwn1文件:
cp pwn1 pwn20165322
对文件进行反汇编:
objdump -d pwn20165322
找到相对应的3个函数,我们发现,main函数里有一行指令:
call 08048491 <foo>
对应的正好是foo函数的起始地址,它所对应的机器码为e8 d7 ff ff ff
(此处e8为call指令的机器码)。我们要让call指令跳转到getshell函数的地址0804847d
就必须要修改call指令前面的机器码,这个机器码由下图的计算方法所得到:
- 首先备份pwn1文件:
*这里有个值得注意的地方:由于d7 ff ff ff在机器上是由小端形式储存,但是我们平时计算的习惯是按大端来读取,所以平时要换算成ff ff ff d7来进行计算。
- 接着使用命令vi pwn20165322
修改文件。
- 进入之后是乱码,使用:%!xxd
转换为16进制显示。
- 使用/d7
命令寻找e8d7ffffff机器指令所在地。
- 找到以后按回车,按r
修改d7为c3。
- 然后使用:%!xxd -r
换回乱码的样子再用:wq!
保存即可。
- 此时再次对程序进行反汇编objdump -d pwn20165322
,看到main函数里的机器指令和汇编指令已经修改了
- 运行一下`./pwn20165322`成功进入getshell函数。
标签:20165322,函数,kali,Exp1,PC,指令,ff,d7,main 来源: https://www.cnblogs.com/wangyaojia/p/10517682.html