这个文件不是exe文件
1.查壳
64位ELF文件
ELF文件是Linux操作系统上的标准可执行文件格式。
2.用64位IDA打开
OK
找到main函数,F5查看伪代码
发现flag
if ( !strcmp(&flag, s2) )
return puts("this is the right flag!");
双击flag查看里面的内容
不要忘了7Bh,它对应ascii码表的{
flag{hacking_for_fun}
再往上分析伪代码,可以看出s2是我们输入的字符串
可以看出flag被修改过
for ( i = 0; i <= strlen(&flag); ++i )
{
if ( *(&flag + i) == 105 || *(&flag + i) == 114 )
*(&flag + i) = 49;
}
105对应ascii码的i
,114对应ascii的r
,49对应ascii的1
。
破案了,原来的flag中的i
和r
被替换为了1
。
我们写一个简单的脚本
flag='{hacking_for_fun}'
flag=list(flag)
for i in range(0,len(flag)):
if (ord(flag[i])==105) or ord(flag[i])==114:
flag[i]='1'
flagnew=''
for i in range(0,len(flag)):
flagnew+=flag[i]
print(flagnew)
>>>{hack1ng_fo1_fun}
最终的flag是
flag{hack1ng_fo1_fun}
补充
strcmp函数
比较两个字符串,返回一个整数
- 第一个字符串大于第二个字符串,则返回大于0的数字
- 第一个字符串等于第二个字符串,则返回0
- 第一个字符串小于第二个字符串,则返回小于0的数字