BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / security / #28971同步于 2010/7/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖

mp3-millennium栈溢出进一步深入分析

jmpesp
2010/7/13镜像同步0 回复
重要声明:本贴仅限于学习交流之用,请勿用于非法用途,一切后果请自负,与本作者无关! xsxtxt《一个SEH溢出示例》里面对mp3-millennium进行了黑盒分析,注重的是应用。 我也闲的蛋疼,就也分析了下那个软件,现在我们来看看软件的溢出地方在哪,为何会溢出。 溢出发生的地点在: 这时候看栈: 所以,溢出的原因找到了,就是SendMessage发送LB_GETTEXT消息的时候,接受缓冲区太小,从而导致溢出。 那么怎么预防这个? 看下MSDN怎么说: LB_GETTEXT Message 从列表框中获得一个字符串。 Syntax lResult = SendMessage(hWndControl, LB_GETTEXT, wParam, wParam; lParam); Parameters wParam 所要返回的字符串。 lParam 接收字符串的缓冲器。它的类型是LPTSTR,之后将强化转换为LPARAM。缓冲器必须具有足够的空间开存储字符串(包括结尾的NULL)。一个LB_GETTEXTLEN消息可以在应用该消息之前用来获得字符串长度(单位是TCHARS)。 Return Value 返回值是字符串长度(TCHARS)。不包括结尾的NULL字符。如果wParam未指定一个有效的索引,返回值是LB_ERR Remarks 如果以自绘样式创建一个列表框,缓冲器指针将接受与条目(条目数据)相关的值。 因而,软件在发送LB_GETTEXT之前并没有发送LB_GETTEXTLEN消息获得精确的长度,从而使得开辟的栈空间太小,导致溢出。所以为了防止溢出很简单,只要在LB_GETTEXT消息之前用LB_GETTEXTLEN获得正确的缓冲区长度后在堆中开辟内存,就ok了。
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。