回头看了看别人的解析,发现我1和2的做法并不好。于是这次就按照人家的做法来做了3号实验。
解析视频:
https://www.bilibili.com/video/BV1VW411A77F/?p=1
这次就先把所有汇编代码导出来,然后分析一下:
objdump -d bomb >asm.txt
找到了几个关键点:一个是这一个 0x4025cf,等会进去一看是%d %d
然后是0x402470,进去一看是下一句的地址0x400f7c。
看了看下面的结构,全是跳转0x400fbe,然后0x400fbe是一个判断。这就像是一个条件选择判断的结构。分析这些代码,看出关键点就是rax和rsp。因为有7个分支,直觉rax就是1-7可选7个数分别对应7个分支。rsp我想的应该是栈指针,但是跟第二个输入参数有什么关系我也没想出来,只能试试。
0x4025cf是%d %d ,说明是要输入两个数字。这里我输入的是2 100
嗯,说明rax就是我输入的第一个值。既然是和1比大,那就是说明第一个数还不能输1。
这里看到0x402470的值就是0x400f7c。然后很巧的是,往下执行到比较
嗯?($rsp)是无符号数200?我输入的是2 和 100,那就是相乘呗?那就是解方程式呗
于是我做了这个式子去算,但是就很奇怪的是,之后怎么看这个($rsp)的值就千奇百怪一样,给我搞晕了。就困在这第二个数上一下午思路没走出来。无奈去看了解析。才反应过来不是这么回事。rsp就是栈指针,一般不用来受控的。那这个第二个判断只需要找到一个定值就可以了。其实就是我之前写出来的几个eax的值。分别相对应了就可以了。赶紧去试了一组 7 327 ,跑了下过了。
这次算是思路方向走死了,希望在做后续实验的时候不要出现这种问题了
网友评论