20155204 王昊《网络对抗技术》EXP1 PC平台逆向破解
(一)实验内容
一、掌握NOP、JNE、JE、JMP、CMP汇编指令的机器码
- NOP:NOP指令即“空指令”。执行到NOP指令时,CPU什么也不做,仅仅当做一个指令执行过去并继续执行NOP后面的一条指令。(机器码:90)
- JNE:条件转移指令,如果不相等则跳转。(机器码:75)
- JE:条件转移指令,如果相等则跳转。(机器码:74)
- JMP:无条件转移指令。段内直接短转Jmp short(机器码:EB)段内直接近转移Jmp near(机器码:E9)段内间接转移Jmp word(机器码:FF)段间直接(远)转移Jmp far(机器码:EA)
- CMP:比较指令,功能相当于减法指令,只是对操作数之间运算比较,不保存结果。cmp指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
二、掌握反汇编与十六进制编程器
反汇编指令:objdump -d xxx
将显示模式切换为16进制模式:%!xxd
转换16进制为原格式:%!xxd -r
三、正确修改机器指令改变程序执行流程
主要流程为:反汇编-->16进制查看文件修改foo函数返回地址为shellcode的地址,从而达成目的。
四、能正确构造payload进行bof攻击
在完成构造一个攻击输入字符串,覆盖返回地址,触发getShell函数
的基础上,
要构造一个能将shellcode地址注入foo后的返回地址寄存器的字符串。为了找到这个返回地址寄存器,需要:关闭地址随机化-->将字符串中返回地址设为特定数字-->在eip寄存器中找到foo后返回地址-->将字符串的返回地址改为上一步的那个地址-->完成攻击
(二)实验总结感悟
一、实验参考
二、感悟
实验感觉难度适中,接触到了漏洞与攻击,做很简单,理解起来花了一些功夫,可能还有点不到位。但是组长以及其他同学的博客给予的帮助还是很大的,不仅能解决操作问题,对比着不同同学的博客也能更好的去理解实验。