-
-
[求助]对“191个字节的bindshell”一处代码很困惑
-
发表于:
2008-7-26 17:09
5387
-
[求助]对“191个字节的bindshell”一处代码很困惑
对“191个字节的bindshell”一处代码很困惑,希望大牛指点一下
P139页第二行代码: sub edi, 0x6c;
此时edi 应该指向的是STARTUPINFO结构中的hStdInput,然后设置输入输出句柄为Socket
不过我对这个 0x6C 十分不解:
STARTUPINFO的结构如下, 大小为44h,
typedef struct _STARTUPINFO {
DWORD cb;
LPTSTR lpReserved;
LPTSTR lpDesktop;
LPTSTR lpTitle;
DWORD dwX;
DWORD dwY;
DWORD dwXSize;
DWORD dwYSize;
DWORD dwXCountChars;
DWORD dwYCountChars;
DWORD dwFillAttribute;
DWORD dwFlags;
WORD wShowWindow;
WORD cbReserved2;
LPBYTE lpReserved2;
HANDLE hStdInput; //hStdInput起始位置距离STARTUPINFO结束位置为0xc个byte
HANDLE hStdOutput;
HANDLE hStdError;
} STARTUPINFO, *LPSTARTUPINFO;
在P137页倒数第5行开始:
lea ecx, [eax+0x30]; //此时eax=0;
mov edi,esp
rep stosd
以上几句初始化出一STARTUPINFO结构体,而esp则指向的是STARTUPINFO的起始位置,edi=esp+0x30*4=esp+0xc0
所以当设置STARTUPINFO中的参数时,sub edi, 0x6c, 为什么edi就指向hStdInput,我很疑惑???
hStdInput距离STARTUPINFO结构的起始位置为0x38, 我将sub edi, 0x6c 改为 lea edi,[esp+38h]也能运行成功,
不过对应的机器码多了一个字节
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课