- luck_guy
- 拖进ida 然后shift+F12 找字符串。发现一条带有flag的字符串。
2.把有这个字符串所在的函数转成伪代码后可以看到这里有一个strcat的函数(查了一下啊这个好像是把前一个字符串和后一个合并然后得到一个新字符串的函数)
于是大胆推测这道题最后的flag 是f1和f2合并得到的flag
- 双击f1发现f1直接就是GXY{do_not,同理双击f2之后什么都没有发现于是返回伪代码。
- 3.发现在case 4和case 5中f2又出现了于是便推测在case 4或是case 5中可以获取到f2的值。发现在case 5 对case 4里处理过的f2又一次进行了处理,推测是以0X后加两位构成的十六进制数,则编写脚本里是将十六进制做减2或是减1处理再对应ascii码转换。
4.编写运行脚本(f2数组那里如果最后一位不加0会有乱码出现)
此题完。
脚本代码:
#include <stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
int main()
{
char f2[] = { 0x69,0x63,0x75,0x67,0x60,0x6f,0x66,0x7f,0};
for (int i = 0; i < 8; i++)
{
if (i % 2 == 1)
f2[i]=f2[i] - 2;
else
f2[i]=f2[i] - 1;
}
char f1[] = "GXY{do_not_";
cout << f1 ;
cout << f2 ;
return 0;
}