题目来源:攻防世界
1.查看是否加壳-》无
2.无脑ida
bool __cdecl sub_4011C0(char *Str)
{
size_t v2; // eax
int v3; // [esp+50h] [ebp-B0h]
char Str2[32]; // [esp+54h] [ebp-ACh] BYREF
int v5; // [esp+74h] [ebp-8Ch]
int v6; // [esp+78h] [ebp-88h]
size_t i; // [esp+7Ch] [ebp-84h]
char v8[128]; // [esp+80h] [ebp-80h] BYREF
if ( strlen(Str) <= 4 )
return 0;
i = 4;
v6 = 0;
while ( i < strlen(Str) - 1 )
v8[v6++] = Str[i++];
v8[v6] = 0;
v5 = 0;
v3 = 0;
memset(Str2, 0, sizeof(Str2));
for ( i = 0; ; ++i )
{
v2 = strlen(v8);
if ( i >= v2 )
break;
if ( v8[i] >= 97 && v8[i] <= 122 ) // 小写转大
{
v8[i] -= 32;
v3 = 1;
}
if ( !v3 && v8[i] >= 65 && v8[i] <= 90 ) // 大写转小
v8[i] += 32;
Str2[i] = byte_4420B0[i] ^ sub_4013C0(v8[i]);// 二者异或
// 0x55异或+72
v3 = 0;
}
return strcmp("GONDPHyGjPEKruv{{pj]X@rF", Str2) == 0;
}
int __cdecl sub_4013C0(int a1)
{
return (a1 ^ 0x55) + 72;
}
(shift+E可以提取数组)
写出来的脚本
res="GONDPHyGjPEKruv{{pj]X@rF"
res2=""
shuzu=[13,19,23,17,2,1,32,29,12,2,
25,47,23,43,36,31,30,22,9,15,
21,39,19,38,10,47,30,26,45,12,
34,4]
for i in range(len(res)):
t=(ord(res[i])^shuzu[i])-72
t=t^85
res2+=chr(t)
print(res2)