Tan's Blog.

Challenge:Phase5

字数统计: 457阅读时长: 1 min
2019/04/19 Share

Phase 5

解题思路


逐行分析代码,可以看出在8048d76处调用了<string_length>函数获得输入的字符串,紧接着判断输入的字符串的字符个数是否为6,不为6就会爆炸。再往下对%edx、%eax初始化,进入循环。循环的内容是对输入逐字符分析,取出字符放入%ecx,和00001111相与,得到的结果放入%ecx,做0x804a1a0+%ecx* 4运算,用gdb调试器查看该地址的内容,将内容加到%edx中。

如此循环6次,也就是读完输入的字符串,判断%edx=0x2a?不成立会爆炸。如此一来,基本上明确思路6个地址的内容相加为42,那就可以有很多种组合方式,我随便选择其中一种,转换为相应的Ascii可显示字符。进行输入,拆除炸弹。

总结

Phase 5题目考察的是字符数组指针的使用,在此基础上要了解And运算,熟练掌握gdb获取地址内容的操作。本题出现新的汇编代码语句,今天进行一个扩充。

操作名称作用
MOVSBL将做了符号扩展的字节传送到双字
AND按位“与”操作
ADD两数相加

今天还学习一些gdb调试器数据显示格式的指令
x 按十六进制格式显示变量。
d 按十进制格式显示变量。
u 按十六进制格式显示无符号整型。
o 按八进制格式显示变量。
t 按二进制格式显示变量。
a 按十六进制格式显示变量。
c 按字符格式显示变量。
f 按浮点数格式显示变量。
本题用到p/x就是按十六进制格式打印任意地址的变量值

CATALOG
  1. 1. Phase 5
    1. 1.1. 解题思路
  2. 2. 总结