1625-5 王子昂 总结《2017年9月21日》 【连续第354天总结】
A. Syclover成信CTF练习平台-RE
B.
ReverseMe
打开是一个elf文件,运行报段错误
通过gdb调试发现错误出现在sub_400646的puts函数处
拖入IDA反编译:
__int64 __fastcall main(int a1, char **a2, char **a3)
{
__int64 result; // rax@3
__int64 v4; // rdx@7
char v5; // [sp+10h] [bp-10h]@4
__int64 v6; // [sp+18h] [bp-8h]@1
v6 = *MK_FP(__FS__, 40LL);
if ( a1 != 3 && (unsigned int)sub_400646((__int64)a2) )// 验证参数
{
puts("Keep thinking!");
result = 0LL;
}
else
{
printf("Please input your password(5 words):", a2, a2);// 检查password
__isoc99_scanf("%5s", &v5);
if ( (unsigned int)sub_400755((__int64)&v5) == 1 )
{
printf("Good Job!\nThe password:%s", &v5);
result = 0LL;
}
else
{
puts("Wrong!");
result = 0LL;
}
}
v4 = *MK_FP(__FS__, 40LL) ^ v6;
return result;
}
我们知道,main的三个参数分别为argc, argc, env
很明显a1即argc没有被反编译出来,但是我们知道数量要