还是由于学校 ctf 的状况原因,选择了古董 UPX,不过把 UPX 壳的标识位删了,普通的脱壳机是无法识别的,可以通过手动补回来再脱壳机脱,也可以手脱。
这里使用了简单的异或,将原来代码原来的部分字节异或了4
while (Size--)
{
*ptr = (*ptr) ^ code;
++ptr;
}
做题人可以选择很多很多方法对这里进行解密,最方便的就是找到解密函数,直接动态运行完后对加密代码段进行逆向,这样保护就像不存在一样。 解密出来的代码为:
for (int i = 0;i < 19;++i)
{
if(i%2)
step[i] ^= 4;
}
作用是将用户输入的字串进行异或后再继续接下来的判断。
怀念大一的日子,特意来了一个数塔的简单动态规划,但是也有个大意的地方,就是数塔的高低设得太低,可以通过爆破的方法找到答案,不过这样也是好的。 数塔通过伪随机生成,随机种子为 0xc,可以在windows平台通过相同的方式得到数塔,再进行求解即可。