BUUCTF Reverse/[ACTF新生赛2020]usualCrypt
先查看文件信息:没有加壳且为32位程序
用IDA32位打开找到main函数查看伪代码
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // esi
int result; // eax
int v5[3]; // [esp+8h] [ebp-74h] BYREF
__int16 v6; // [esp+14h] [ebp-68h]
char v7; // [esp+16h] [ebp-66h]
char v8[100]; // [esp+18h] [ebp-64h] BYREF
sub_403CF8((int)&unk_40E140);
scanf("%s", v8);
v5[0] = 0;
v5[1] = 0;
v5[2] = 0;
v6 = 0;
v7 = 0;
sub_401080((int)v8, strlen(v8), (int)v5);
v3 = 0;
while ( *((_BYTE *)v5 + v3) == byte_40E0E4[v3] )
{
if ( ++v3 > strlen((const char *)v5) )
goto LABEL_6;
}
sub_403CF8((int)aError);
LABEL_6:
if ( v3 - 1 == strlen(byte_40E0E4) )
result = sub_403CF8((int)aAreYouHappyYes);
else
result = sub_403CF8((int)aAreYouHappyNo);
return result;
}
一点点分析代码
跟进查看发现这是个输出函数,又是一道字符串比较类型的题目
输入的flag进行变换后与byte_40E0E4中的值进行比较
while ( *((_BYTE *)v5 + v3) == byte_40E0E4[v3] )
{
if ( ++v3 > strlen((const char *)v5) )
goto LABEL_6;
}
这里对输入的flag进行了变换,跟进查看
sub_401080((int)v8, strlen(v8), (