题目:
注意进入正确的流程,用最短的步骤走完迷宫。
解题链接: http://ctf5.shiyanbar.com/423/re/rev2.exe
过程
IDA打开:
顺着去找main函数:
int main_0()
{
size_t v0; // eax
size_t v1; // eax
char v3[48]; // [esp+4Ch] [ebp-3Ch]
unsigned int v4; // [esp+7Ch] [ebp-Ch]
unsigned int v5; // [esp+80h] [ebp-8h]
int v6; // [esp+84h] [ebp-4h]
v5 = 0;
v4 = 0;
v6 = 0 / 0;
printf("Please input your key:\n");
gets(v3);
if ( strlen(v3) > 0x20 )
{
printf("Too long!\n");
}
else
{
v4 = 0;
v3[strlen(v3)] = 0;
if ( strlen(v3) )
{
do
{
if ( !isalpha(v3[v4]) && v3[v4] != 123 && v3[v4] != 125 && v3[v4] != 95 )// 不是是字母,且不是{,不是_,不是},就错了;即要求输入是字母,'{','_','}'中的一个
{
printf("Sorry,you are wrong!\n");
exit(0);
}
++v4;
v0 = strlen(v3);
}
while ( v4 < v0 );
}
_strlwr(v3); // 将字符串中的字母转化为小写,也就是输入时不分大小写是对的
v5 = 0;
if ( strlen(v3) )
{
do
{
v3[v5++] += 128;
v1 = strlen(