注册 登录
编程论坛 汇编论坛

关于bindshell中代码的疑问?

发布于 2012-01-09 09:25, 1069 次点击
关于有名的191个字节的bindshell代码:
mov eax,0x0
lea ecx,[eax+0x30]
mov edi,esp
rep stosd
....
书上说,为将栈上一大片区域置成NULL,才有了上述代码。关键是第二句:lea ecx,[eax+0x30]与某结构体的大小0X44有关,怎么理解?
7 回复
#2
zaixuexi2012-01-09 10:08
ecx不就=0x30么,0x44哪里冒出来的?VC里__asm自己跑下
#3
2012-01-09 10:25
这么有名的代码是不会错的,在MOV EAX,0x0之后本来还有一句
mov byte ptr [esi+0x13],al 目的是向ESI所指的栈区某位置赋0,但lea ecx,[eax+0x30]仍解释不通?
#4
zaixuexi2012-01-09 10:47
好吧,就算你加句
mov eax,0x0
mov byte ptr [esi+0x13],al
lea ecx,[eax+0x30]
这里ecx会等于0x44?这也倒真的是神奇了,我是解释不了
#5
naruto012012-01-10 10:31
我看到的注释是:clear some stack to use as NULL parameters
STARTUPINFO结构体(CreateProcess的一个参数,可以查MSDN或有关资料)的size是0x44字节
代码一共在栈上设置了0x30*4个NULL
#6
zaixuexi2012-01-10 11:31
0x30*4 = 0xC0 = 0x44 + 0x44 + 0x38 纯属个人猜测
但是你说0x30和0x44有什么关系,我是真的看不出来
#7
naruto012012-01-11 12:41
http://bbs.
#8
你们都要疼我哦2012-01-12 04:43
以下是引用hb0zyj在2012-1-9 09:25:10的发言:

关于有名的191个字节的bindshell代码:
mov eax,0x0
lea ecx,[eax+0x30]
mov edi,esp
rep stosd
....
书上说,为将栈上一大片区域置成NULL,才有了上述代码。关键是第二句:lea ecx,[eax+0x30]与某结构体的大小0X44有关,怎么理解?
没分。。。这个不太好吧。。。

这个你要联系上下文 有时候光联系上下文还不够 还需要自己动手调试才行。
rep stosd 按4字节填充
ecx为计数器
edi为起始地址
这样填充完以后 edi为esp+0x30*4,
某结构体大小为0X44,假如填充完成后,
需要用EDI寻址结构体内地址,就要减去一个值,
根据所需结构体内的不同地址,减去不同的值。
当然也可以从起始地址开始加,但是那样就体现不出灵活性。

上面的相信你都早已理解,我就是没事温习一下指法。
你的问题是 它们为什么“有关”。。。
实际上它们是相对无关的,作为填充的大小,可以是
超过0X44的任何允许值,
但是当完成后,需要用edi来寻址结构体内位置时,就需要计算具体偏移了。
当然 用0X30个dw可能是比较合适的,也许是这个结构体就固定用这么多的地儿来盛。。。

这样的数据是 自己构造 出来的,倒着减 正着加,只要能定位到需要的地方怎么样都行,但是有时候用esp不保险,在这里是用edi。

这个似乎是个很简单的问题。。。。。。
不摸汇编几百年了 啥都忘了  




1