这两周比赛接着比赛打到头爆。。。。
网鼎杯的题目质量感觉都还行,也练习到了不少东西
SimpleSMC
这里的0x400aa6函数点过去一看就可以发现它是乱的字节无法执行,根据题目SMC(Self-Modifying Code)可以猜到这个函数就是被修改的目标了
查看它的交叉引用可以发现有两个函数有调用
sub_400c48
关键代码如下
for ( i = 0; *((_BYTE *)sub_400AA6 + i) != 0xC3u; ++i )
{
v1 = *((unsigned __int8 *)sub_400AA6 + i);
*((_BYTE *)sub_400AA6 + i) = v1 ^ *((_BYTE *)sub_41E1B0 + i);
}
是一个函数字节码异或的固定调用,直接写个IDC脚本解就行
查看这个函数的交叉引用是在init_array中,所以是在调用之前调用的
sub_400bac
signed __int64 __fastcall sub_400BAC(char *key)
{
int i; // [rsp+Ch] [rbp-Ch]
for ( i = 0; *((_BYTE *)sub_400AA6 + i) != 0xC3u; ++i )
*((_BYTE *)sub_400AA6 + i) ^= key[i % 7];
return