CrackRTF
最近刷题遇到的不会又不错的题,考了几个我没有见过的API,以及一种奇妙的给出flag的方式
题目描述
在互联网时代,兼容就是胜利,兼容就是王道。为了遏制微软一家独大的趋势,小明自诩民族斗士,向微软CEO挑战,CEO给了他一个文件,据说破解后能得到一个微软的多信息文本格式文件。只有得到了才能获得挑战CEO的机会。小明绞尽脑汁,最后不得不求助大家。。。兄弟们该出手时就出手! 注意:得到的 flag 请包上 flag{} 提交
main函数:
int __cdecl main_0(int argc, const char **argv, const char **envp)
{
DWORD len_1; // eax
DWORD len_2; // eax
char Str[260]; // [esp+4Ch] [ebp-310h] BYREF
int v7; // [esp+150h] [ebp-20Ch]
char String1[260]; // [esp+154h] [ebp-208h] BYREF
char Destination[260]; // [esp+258h] [ebp-104h] BYREF
memset(Destination, 0, sizeof(Destination));
memset(String1, 0, sizeof(String1));
v7 = 0;
printf("pls input the first passwd(1): ");
scanf("%s", Destination);
if ( strlen(Destination) != 6 )
{
printf("Must be 6 characters!\n");
ExitProcess(0);
}
v7 = atoi(Destination);
if ( v7 < 100000 )
ExitProcess(0);
strcat(Destination, "@DBApp");
len_1 = strlen(Destination);
sub_40100A(Destination, len_1, String1);
if ( !_strcmpi(String1, "6E32D0943418C2C33385BC35A1470250DD8923A9") )
{
printf("continue...\n\n");
printf("pls input the first passwd(2): ");
memset(Str, 0, sizeof(Str));
scanf("%s", Str);
if ( strlen(Str) != 6 )
{
printf("Must be 6 characters!\n");
ExitProcess(0);
}
strcat(Str, Destination);
memset(String1, 0, sizeof(String1));
len_2 = strlen(Str);
sub_401019(Str, len_2, String1);
if ( !_strcmpi("27019e688a4e62a649fd99cadaafdb4e", String1) )
{
if ( !sub_40100F(Str) )
{
printf("Error!!\n");
ExitProcess(0);
}
printf("bye ~~\n");
}
}
return 0;
}
总体大致分为两个加密检验部分
第一部分
if ( strlen(Destination) != 6 )
{
printf("Must be 6 characters!\n");
ExitProcess(0);
}
v