转自:http://www.osdiy.com/Blog/article.asp?id=7
一日,上网下载回一RMVB影片,看几分钟后就弹出一些IE的广告窗口来,实在太烦,操起工具就开始分析。
1.用Process Explorer看进程关系,明确看到是mplayerc.exe启动的IEXPLORE.EXE
2.用OllyDbg附加到mplayerc.exe,既然是它创建的进程,那就下几个和进程创建的API。
常见的创建进程的函数不外乎下面几个
CreateProcessA/W
CreateProcessAsUserA/W
ShellExecuteA/W
ShellExecuteExA/W
WinExec
看着这么多函数,其实归根结底最后都会转换成CreateProcessInternalW来创建进程
经过分析,mplayerc.exe是在Real解码器中的pnen3260.dll调用WinExec来执行程序
文件路径为:C:\Program Files\Common Files\Real\Common\pnen3260.dll
3.既然找到模块了,拿IDA进行反编译,发现有下面几个地方调用WinExec
.text:6265E78D mov edi, ds:WinExec
.text:6265E793 add esp, 10h
.text:6265E796 push 0Ah ; uCmdShow
.text:6265E798 push ebx ; lpCmdLine
.text:6265E799 call edi ; WinExec
.text:6265E7B4 push 0Ah ; uCmdShow
.text:6265E7B6 push ebx ; lpCmdLine
.text:6265E7B7 call edi ; WinExec
.text:6265E7D6 push 0Ah ; uCmdShow
.text:6265E7D8 push esi ; lpCmdLine
.text:6265E7D9 call ds:WinExec
不管3721,直接nop。再试试,已经达到目的了
不过最好还是直接让函数返回失败,看看MSDN,
还是把以上代码改成mov eax,ERROR_FILE_NOT_FOUND就行了。
1.用Process Explorer看进程关系,明确看到是mplayerc.exe启动的IEXPLORE.EXE
2.用OllyDbg附加到mplayerc.exe,既然是它创建的进程,那就下几个和进程创建的API。
常见的创建进程的函数不外乎下面几个
CreateProcessA/W
CreateProcessAsUserA/W
ShellExecuteA/W
ShellExecuteExA/W
WinExec
看着这么多函数,其实归根结底最后都会转换成CreateProcessInternalW来创建进程
经过分析,mplayerc.exe是在Real解码器中的pnen3260.dll调用WinExec来执行程序
文件路径为:C:\Program Files\Common Files\Real\Common\pnen3260.dll
3.既然找到模块了,拿IDA进行反编译,发现有下面几个地方调用WinExec
.text:6265E78D mov edi, ds:WinExec
.text:6265E793 add esp, 10h
.text:6265E796 push 0Ah ; uCmdShow
.text:6265E798 push ebx ; lpCmdLine
.text:6265E799 call edi ; WinExec
.text:6265E7B4 push 0Ah ; uCmdShow
.text:6265E7B6 push ebx ; lpCmdLine
.text:6265E7B7 call edi ; WinExec
.text:6265E7D6 push 0Ah ; uCmdShow
.text:6265E7D8 push esi ; lpCmdLine
.text:6265E7D9 call ds:WinExec
不管3721,直接nop。再试试,已经达到目的了
不过最好还是直接让函数返回失败,看看MSDN,
还是把以上代码改成mov eax,ERROR_FILE_NOT_FOUND就行了。