安全中国首页 > 文章中心 > 溢出文章
 
安全中国网友投稿专用上传FTP空间:
Ftp服务器:download.anqn.com
Ftp端口:21
用户名:anqn
密 码:anqn.com
 

RealPlayer 6.0.10到6.0.14整数溢出分析

更新时间:2007-11-28 1:15:59
责任编辑:池天
热 点:

.text:65E9C9A0 mov eax, esi
.text:65E9C9A2 pop edi
.text:65E9C9A3 pop ebx
.text:65E9C9A4 pop esi
.text:65E9C9A5 mov esp, ebp
.text:65E9C9A7 pop ebp
.text:65E9C9A8 retn
.text:65E9C9A8
:65E9E060 ; int __cdecl sub_65E9E060(HWND hWnd,int)
.text:65E9E060 sub_65E9E060 proc near ; CODE XREF: sub_65E9C4C0+10Ap
.text:65E9E060 ; sub_65E9C5F0+101p
.text:65E9E060 ; sub_65E9C720+2Ap
.text:65E9E060 ; sub_65E9C770+C3p
.text:65E9E060 ; sub_65E9C860+EEp
.text:65E9E060 ; sub_65E9C9B0+78p
.text:65E9E060
.text:65E9E060 lParam = dword ptr -0Ch
.text:65E9E060 var_8 = dword ptr -8
.text:65E9E060 var_4 = dword ptr -4
.text:65E9E060 hWnd = dword ptr 8
.text:65E9E060 arg_4 = dword ptr 0Ch
.text:65E9E060
.text:65E9E060 push ebp
.text:65E9E061 mov ebp, esp
.text:65E9E063 sub esp, 0Ch
.text:65E9E066 xor eax, eax
.text:65E9E068 lea edx, [ebp+lParam]
.text:65E9E06B mov [ebp+var_8], eax
.text:65E9E06E push edx ; lParam
.text:65E9E06F mov [ebp+var_4], eax
.text:65E9E072 mov eax, [ebp+arg_4]
.text:65E9E075 mov [ebp+var_4], eax
.text:65E9E078 push 0 ; wParam
.text:65E9E07A mov ecx, [eax+4]
.text:65E9E07D mov eax, [ebp+hWnd]
.text:65E9E080 add ecx, 0Bh
.text:65E9E083 push WM_COPYDATA ; Msg
.text:65E9E085 push eax ; hWnd
.text:65E9E086 mov [ebp+lParam], 0
.text:65E9E08D mov [ebp+var_8], ecx
.text:65E9E090 call ds:SendMessageA ; 发生消息给 realplayer, 将数据传给他
.text:65E9E096 neg eax
.text:65E9E098 sbb eax, eax
.text:65E9E09A neg eax
.text:65E9E09C mov esp, ebp
.text:65E9E09E pop ebp
.text:65E9E09F retn
下面转入 plugins\MPAMedia.dll, 这里会处理 rpplugins\ierpplug.dll 传过来的数据
6179D7D0 sub_6179D7D0 proc near ; CODE XREF: sub_61785500+A9p
.text:6179D7D0 ; sub_617865D0+40p
.text:6179D7D0 ; sub_61786660+40p
.text:6179D7D0 ; sub_61789080+3Ap
.text:6179D7D0 ; sub_6178E290+D3p
.text:6179D7D0 ; sub_6178E450+D3p ...
.text:6179D7D0
.text:6179D7D0 arg_0 = dword ptr 8
.text:6179D7D0 arg_4 = dword ptr 0Ch
.text:6179D7D0
.text:6179D7D0 push ebp
.text:6179D7D1 mov ebp, esp
.text:6179D7D3 push esi
.text:6179D7D4 mov esi, [ebp+arg_0]
.text:6179D7D7 test esi, esi
.text:6179D7D9 jz short loc_6179D801
.text:6179D7D9
.text:6179D7DB mov edx, [ebp+arg_4]
.text:6179D7DE test edx, edx
.text:6179D7E0 jz short loc_6179D801
.text:6179D7E0
.text:6179D7E2 push edi
.text:6179D7E3 mov edi, edx
.text:6179D7E5 or ecx, 0FFFFFFFFh
.text:6179D7E8 xor eax, eax
.text:6179D7EA repne scasb
.text:6179D7EC not ecx
.text:6179D7EE dec ecx
.text:6179D7EF push ecx ; 测字符串长度
.text:6179D7F0 push edx
.text:6179D7F1 push esi
.text:6179D7F2 call funnly ; 进去
.text:6179DF10 funnly proc near ; CODE XREF: sub_6179D7D0+22p
.text:6179DF10
.text:6179DF10 var_F4 = dword ptr -0F4h
.text:6179DF10 var_4 = dword ptr -4
.text:6179DF10 arg_0 = dword ptr 8
.text:6179DF10 arg_4 = dword ptr 0Ch
.text:6179DF10 strLength = word ptr 10h
.text:6179DF10
.text:6179DF10 push ebp
.text:6179DF11 mov ebp, esp
.text:6179DF13 sub esp, 0F4h
.text:6179DF19 push ebx
.text:6179DF1A push esi
.text:6179DF1B push edi
.text:6179DF1C mov edi, [ebp+arg_0]
...
.text:6179DF75 retn
.text:6179DF75
.text:6179DF76 ; ---------------------------------------------------------------------------
.text:6179DF76
.text:6179DF76 loc_6179DF76: ; CODE XREF: funnly+59j
.text:6179DF76 push 1
.text:6179DF78 push 0
.text:6179DF7A push edi
.text:6179DF7B call sub_61798210
.text:6179DF7B
.text:6179DF80 add esp, 0Ch
.text:6179DF83 test eax, eax
.text:6179DF85 jnz loc_6179E0B3
.text:6179DF85
.text:6179DF8B mov eax, [edi+69h]
.text:6179DF8E mov esi, [esi+0Ch]
.text:6179DF91 movsx ebx, [ebp+strLength] ; 取出字符串长度,由于长度是 unsigned short 类型,此处调整为 int 类型。
.text:6179DF91 ; 如果 strLength >= 0x8000, 由此导致整数溢出, 后面将用此进行内存拷贝操作
.text:6179DF95 mov eax, [eax+190h]
.text:6179DF9B cmp eax, 1Eh
.text:6179DF9E jnz short loc_6179DFEC
.text:6179DF9E
.text:6179DFA0 test ebx, ebx
.text:6179DFA2 jnz short loc_6179DFCB
.text:6179DFA2
 ...
.text:6179E005
.text:6179E007
.text:6179E007 loc_6179E007: ; CODE XREF: funnly+E8j
.text:6179E007 ; funnly+F3j
.text:6179E007 mov ecx, [ebp+arg_4]
.text:6179E00A push ebx
.text:6179E00B lea edx, [ebp+var_F4]
.text:6179E011 push ecx
.text:6179E012 push edx
.text:6179E013 push esi
.text:6179E014 call funlly2 ; 进去
.text:6179E014
.text:6179E019 push esi
.text:6179E01A mov ebx, eax
.text:6179E01C call sub_617B3C00
.text:6179E01C
 ...
.text:6179E0B3
.text:6179E0B3 loc_6179E0B3: ; CODE XREF: funnly+75j
.text:6179E0B3 pop edi
.text:6179E0B4 pop esi
.text:6179E0B5 pop ebx
.text:6179E0B6 mov esp, ebp
.text:6179E0B8 pop ebp
.text:6179E0B9 retn
.text:6179E0B9
.text:6179E0B9 funnly endp
.text:6179E0B9
[coce]
.text:6179D750 funlly2 proc near ; CODE XREF: sub_6179DD30+75p
.text:6179D750 ; funnly+104p
.text:6179D750
.text:6179D750 arg_0 = dword ptr 8
.text:6179D750 arg_4 = dword ptr 0Ch
.text:6179D750 arg_8 = dword ptr 10h
.text:6179D750 arg_C = dword ptr 14h
.text:6179D750
.text:6179D750 push ebp
.text:6179D751 mov ebp, esp
.text:6179D753 push ebx
.text:6179D754 push esi
.text:6179D755 mov esi, [ebp+arg_0]
...
.text:6179D79F
.text:6179D7A0
.text:6179D7A0 loc_6179D7A0: ; CODE XREF: funlly2+1Bj
.text:6179D7A0 ; funlly2+2Dj
.text:6179D7A0 mov edx, [ebp+arg_C]
.text:6179D7A3 mov eax, [ebp+arg_8]
.text:6179D7A6 lea ecx, [ebp+arg_C]
.text:6179D7A9 push ecx
.text:6179D7AA mov ecx, [esi+128h]
.text:6179D7B0 shl ecx, 5
.text:6179D7B3 push edx
.text:6179D7B4 push eax ; eax >= 0xF0000000 是一个很大的整数,由于堆栈就那么很短一片,直接导致堆栈溢出。
; 出现内存访问异常,系统堆栈中找 seh 处理程序,从而获取执行机会
.text:6179D7B5 lea edx, dword_617D1E58[ecx]
.text:6179D7BB push edi
.text:6179D7BC push edx
.text:6179D7BD call dword ptr [esi+2Fh] ; memcpy 导致堆栈溢出
.text:6179D7C0 mov eax, [ebp+arg_C]
.text:6179D7C3 add esp, 14h
.text:6179D7C6 add eax, ebx
.text:6179D7C8 pop edi
.text:6179D7C9 pop esi
.text:6179D7CA pop ebx
.text:6179D7CB pop ebp
.text:6179D7CC retn
.text:6179D7CC
.text:6179D7CC funlly2 endp[/code]具体利用代码就不放了,最后感谢茄子大牛。:)

任何后果自己负责。

上一页 1 2 

 
相关文章
一日一文章
 
一日一软件
一日一动画