1.EasyRE
看题目感觉不会有加壳,直接扔进IDA找到主函数:
int sub_401080()
{
unsigned int lens; // kr00_4
signed int i; // edx
char *v2; // esi
char v3; // al
unsigned int j; // edx
int v5; // eax
__int128 myinput; // [esp+2h] [ebp-24h]
__int64 v8; // [esp+12h] [ebp-14h]
int v9; // [esp+1Ah] [ebp-Ch]
__int16 v10; // [esp+1Eh] [ebp-8h]
printf_401020((int)"input:");
v9 = 0;
v10 = 0;
myinput = 0i64;
v8 = 0i64;
scanf_401050("%s", &myinput);
lens = strlen((const char *)&myinput);
if ( lens >= 0x10 && lens == 24 ) // 24位
{
i = 0;
v2 = (char *)&v8 + 7; // 反汇编错误,其实是指向输入的字符串的最后一字符。
do
{
v3 = *v2--;
byte_40336C[i++] = v3;
}
while ( i < 24 );
j = 0;
do
{
byte_40336C[j] = (byte_40336C[j] + 1) ^ 6;// 倒序的输入字符,进行+1,再异或6。
++j;
}
while ( j < 0x18 );
v5 = strcmp(byte_40336C, "xIrCj~<r|2tWsv3PtI\x7Fzndka");// 关键比较。
// 还原输入,先-1,再异或6,然后逆序。完成。
if ( v5 )
v5 = -(v5 < 0) | 1;
if ( !v5 )
{
printf_401020((int)"right\n");
system("pause");
}
}
return 0;
}
发现不过是将24个数据与6异或并减一再转成字母即可得到flag。
写小脚本如下:
data=[ 0x78, 0x49, 0x72, 0x43, 0x6A, 0x7E, 0x3C, 0x72, 0x7C, 0x32,
0x74, 0x57, 0x73, 0x76, 0x33, 0x50, 0x74, 0x49, 0x7F, 0x7A,
0x6E, 0x64, 0x6B, 0x61]
for i in range(24):
data[i]=chr((data[i]^6)-1)
print(''.join(data)[::-1])
运行得到flag{xNqU4otPq3ys9wkDsN}
2.srm-50
吐槽:画质真感人
查壳,无壳,得知其是32位文件,扔进IDA:
主函数伪代码:
关于DialogBoxParamW函数,我去查了一下:
查dialogfun函数,问题应该在这里面
要求邮箱有’@‘和’.'字符,并且这两个字符并能在一起。
序列号即v11[4]+v12+v13+…v23
转换成ASCII码得出:CZ9dmq4c8g9G7bAX