phase_4密码如下:10 5破解过程:
- 设置断点,运行,反汇编
- 观察到
401562: be 1f 33 40 00 mov $0x40331f,%esi401567: b8 00 00 00 00 mov $0x0,%eax40156c: e8 9f fb ff ff callq 401110 <__isoc99_sscanf@plt>
文章插图
答案是两个整型变量
- 再根据下面这段汇编语言
- 由
- 由
- 下面分析递归函数func4 。
func4里每次都用到 %edi, %esi,%edx,%eax 。
而我们输入的第一个数在一开始便是%edi 的值,%esi 一开始为0,%edx一开始为0xe,即为14 。
不妨,将这四个寄存器,记为 a,b,c,res
40151c: 89 d1 mov %edx,%ecx40151e: 29 f1 sub %esi,%ecx401520: 89 c8 mov %ecx,%eax401522: c1 e8 1f shr $0x1f,%eax// 逻辑右移31401525:01c8 add %ecx,%eax 401527: d1 f8 sar %eax //算术右移401529: 01 f0 add %esi,%eax写为公式:\(res = [(c - b) >> 31 + (c - b)] / 2 + b\).
化简一下,\(res = (c - b) / 2 + b\).
再看后面的分支,和分支的执行:
if(a < res) func4(a, b, res – 1, res), res *= 2, return reselse if(a > res) func(a, res + 1, c, res), res = res * 2 + 1; return reselse return 0
经验总结扩展阅读
- 公鸡为啥要打鸣
- 天空为什么是蓝的
- 有趣实验 .NET下数据库的负载均衡(续)
- 第五周 python实验报告
- 测定水中声速的实验
- 实验02_Proteus仿真数码管显示代码
- 独立动画是不是实验动画
- 风洞实验室是干嘛的
- 实验02_Proteus仿真数码管显示报告
- 有趣实验 .NET下数据库的负载均衡