0048E2A3 E8B456FDFF call 0046395C
0048E2A8 C3 ret
分析发现网络电视小精灵似乎使用TWebBrowser构件来播放网上的影音资料。 赶紧从网上找了一下TWebBrowser的资料, 原来是Delphi的一个控件……不会啊, 没办法。 不能死心, 再找其它的事件——12:00了, 还是睡觉再说, 明天早上还要上课呢!
刚躺到床上, 突然想起前面的ShellExecuteA不是可以打开网页吗?那还有没有其它作用呢?赶紧起床!用IDA反汇编网络电视小精灵, 找到ShellExecuteA(不要问我怎么找的, 在Names选项), IDA就是好啊, 给出了注释:
jmp ds:__imp_ShellExecuteA ; Opens or prints a specified file
看到了吗?简单翻译应该是:打开或打印一个具体文件。
看来有希望, 网上看电影不也是打开一个具体文件吗?还记得用Realone网上看电影吧, 突然掉线的时候, 是不是弹出一个对话框, 说什么*.rm不能播放。 赶紧用百度查了查ShellExecuteA的资料, 哇, 太多了, 大部分都是VB中怎么用这个控件, 没有一个我要的。 灵机一动, 换一种思维方式:当我们点击一个电视台或者广播台的时候, 不是用Media Player.exe打开就是用Realplay.exe打开的。 所以, 要是可以用ShellExecuteA并且用Realplay.exe作为参数可以打开一个网上的影音文件, 那么用“ShellExecuteA realplay.exe”搜索应该是有结果的。
好了, 搜索“ShellExecuteA realplay.exe”, 没有发现, , 不会吧?Ok, 再来搜索ShellExecuteA Media Player.exe, 也是一个结果也没有。 只好出绝招了, 拿出Cracker必备的API手册, 查ShellExecuteA, 居然是用VB描述的……
第二天上课的时候没有心思, 继续想这个问题, 没有什么结果, 回到寝室, 查MSDN, 有发现了:
HINSTANCE ShellExecute(
HWND hwnd,
LPCTSTR lpOperation,
LPCTSTR lpFile,
LPCTSTR lpParameters,
LPCTSTR lpDirectory,
INT nShowCmd
);
lpOperation支持的用法有:
edit
Launches an editor and opens the document for editing. If lpFile is not a document file, the function will fail.
explore
Explores the folder specified by lpFile.
find
Initiates a search starting from the specified directory.
open
Opens the file specified by the lpFile parameter. The file can be an executable file, a document file, or a folder.
Prints the document file specified by lpFile. If lpFile is not a document file, the function will fail.
英语菜, 就不翻译了, 更具体请查阅MSDN, 我怕说我骗稿费。 到这里, 你有什么想法?lpOperation已经指出了一些操作, 对编写网络电视有用的只有上面的“open”。 后来从网上找到了《深入浅出ShellExecute》:
Q:如何打开一个网页?
ShellExecute(this->m_hWnd,"open","notepad.exe", "c:\\MyLog.log","",SW_SHOW );
As you can see, I haven't passed the full path of the programs.
ShellExecute(this->m_hWnd, "open", "http://www.google.com", "", "", SW_SHOW );
你觉得哪个更有用呢?第一个?实验一下, 假如我替换Notepad.exe为Media Player.exe, 替换“c:\\MyLog.log”为“d:\\t.mid”, 当然这里的“d:\\t.mid”是真实存在的MID音乐, 这样行吗?先简单测试一下。 选择开始菜单->运行, 输入“Media Player.exe d:\t.mid”, 弹出Windows Media Player开始播放t.mid了。
赶快用VC新建一个Win32 Console Application工程, 输入如下代码:
#include <windows.h>
int main(int argc, char* argv[])
{
ShellExecute(0, "open", "Media Player.exe", "d:\\t.mid", "", SW_SHOW);
return 0;
}
执行, 呵呵, 是不是一个黑忽忽的界面之后, 弹出Windows Media Player开始播放t.mid了?成功!
小提示:Windows 98不是Media Player.exe, 98下面是Mplayer2.exe, 请大家对照自己的机器做实验。 文中的机器是Windows XP。
第二个例子打开一个网页, 用什么打开呢?用IE, 确切的说是用默认的浏览器, 因为这里没有指定有什么打开, 也就是说打开网页有一个关联程序, 也就是默认的浏览器。 发散一下思维, 如果把这里的http://www.google.com换成其它呢?这里我换成“d:\\t.mid”, 赶快用VC新建一个Win32 Console Application工程, 输入如下代码:
#include <windows.h>
int main(int argc, char* argv[])
{
ShellExecute(0, "open", "d:\\t.mid", "", "", SW_SHOW);
//注意与上面的不同之处,去掉了“Media Player.exe”, 同时要打开文件的具体位置成了第3个参数
return 0;
}
执行, 呵呵, 是不是一个黑忽忽的界面之后弹出Windows Media Player开始播放t.mid了。 因为我测试的机器默认MID关联Windows Media Player。 这就是为什么我在上面强调“打开网页关联默认的浏览器”, 如果你的机器默认关联其它的播放器(如豪杰系列), 则应该弹出豪杰的超级音频解霸播放t.mid。
已经出现曙光了, 现在到Baidu找一首歌曲, 我找的是:陈慧琳-记事本。 查看属性, 得到地址:http://mp3.baidu.com/u?u=http://www.jsshmzx.com/zhuwei/geci/flash/ZzI$.mp3
继续修改程序:
hellExecute(0, "open", "http://mp3.baidu.com/u?u=http://www.jsshmzx.com/zhuwei/geci/flash//ZzI$.mp3", "", "", SW_SHOW );
小提示:这个地址是Baidu搜索的, 到读者测试的时候可能已经过时了。
运行, Windows Media Player开始播放陈慧琳的记事本了!成功!
Hacker思维
当我们上网看电视的时候, Windows Media Player或者Realone会打开网络电视内置的网址, 这个网址是要作为Windows Media Player或者Realone的请求发给服务器的, 所以这里有两个方法:
1. 既然是网络电视内置的网址, 那么我们可以先用W32dasm反汇编之后去找网址。
这里仍以网络电视小精灵为例, 用W32dasm反汇编, 会发现大量的网址, 但是仔细看, 会发现几乎没有一个网址是用来看电视和听广播的, 都是网络电视小精灵里面网络导航提供的网址。 似乎此路不通?等等, 再用Ollydbg载入网络电视小精灵, 查看字符参考, 没有吃惊吧?基本可以找到所有的看电视和听广播的网址。
2. 既然这个网址是要作为Windows Media Player或者Realone的请求发给服务器, 所以我们可以用Sniffer获得真实地址。
测试时我用的Commview, 个人觉得这是我等菜鸟最好用的Sniffer, 这里我简单说一下, 设置过滤条件:IP为自己机器的IP, 只捕获流出的数据包。 设置协议, 因为播放影音文件一般的协议有这些:mms://, rtsp://等。 如果捕获不到地址, 放宽条件就可以了。
Ok, 现在解决了所有问题, 剩下的就是不停地加入网址, 写代码了。 下面谈谈怎么利用ShellExecute做一个属于自己的隐蔽的后门, 这也是从上面的内容中引发的灵感。 先看以下代码:
// test.cpp:定义控制台应用程序的入口点
//
#include <windows.h>
int main(int argc, char* argv[])
{
ShellExecute(0, "open", "Media Player.exe", "d:\\t.mid", 0, SW_HIDE);
return 0;
}
测试上面的代码, 运行, 有什么发现吗?应该有吧:黑忽忽的界面之后, 听到音乐了吧!但是看到“Media Player”的界面了吗?没有!这是因为最后一个参数改为了SW_HIDE;如果这里第2个参数不用Open, 而用0则不会呈现“Media Player”的界面, 但是却在播放音乐——想到了什么?仔细想想, 如果这里不是Media Player.exe, 而是你的木马xx.exe?你用另外的一个正常的程序悄悄启动xx.exe?呵呵, 这个想法不错吧!这可是拥有不容易被杀死的极品后门啊!
好了, 文章到这里就结束了, 希望大家能看明白, 我要在上面写出ShellExecute的原型就是因为我想让朋友们去发掘每一个参数的意义, 说不定就能发现宝藏哦!
……