查壳
解压完zip文件后发现是一个不知道是什么格式的文件
还是拖进exeinfope去看看
原来不是一个win exe文件,是一个elf文件,elf文件是linux平台上常见的可执行文件
IDA打开静态分析
接着在ida里打开该文件
直接F5反编译吧
__readfsqword这种前面是两个下划线的一般是系统函数,pid是进程号,fork()是创建进程的函数,if函数体里边我判断是判断进程中断之类的,不是题目的关键,只要大概明白这是啥,以便更好的往下分析就好了。
把数字转化成字符看看
这里我们先双击flag,看看flag对应的内存空间放了什么东西
(注意地址是16进制表示的)从601080到601091正好是18个字节,提醒一下不要被把flag的数值78h迷惑了,转换成字符看看
{hacking_for_fun}这是不是有些眼熟了。
再回到反编译界面接着分析
&flag是去flag的地址,&flag+i有没有觉得和数组有些相似了(flag[i]),这个推理是没有错的,这里把flag当作首地址,每次循环地址加1,外边套一个*号,取这个地址保存的数据,这样是不是就明白了,如果这个值是‘i’或者‘r’,就把它改成1,这样就变成了{hack1ng_fo1_fun},
printf和scanf函数
比较strcmp字符串比较函数比较flag和s2,相同则返回值为0,从而输出结果“this is the right flag!”,那么s2一定和flag相同,所以s2等于{hack1ng_fo1_fun},得到flag咯!