适合读者:破解迷、黑兵器库老板
前置知识:Crack工具的基本使用方法
Icefire:长久以来破解爱好者们都在不断地寻求一种方式, 可以突破Cracker局限的方式, 可以不单单在各类软件中随意驰骋, 更能在网络这块天地中自由翱翔。 或许本文就提供了一种让二者结合更巧妙的方式
适合读者:破解迷、黑兵器库老板
前置知识:Crack工具的基本使用方法
Icefire:长久以来破解爱好者们都在不断地寻求一种方式, 可以突破Cracker局限的方式, 可以不单单在各类软件中随意驰骋, 更能在网络这块天地中自由翱翔。 或许本文就提供了一种让二者结合更巧妙的方式, 希望能给你一点启发。
简单Crack与Hacker思维打造灵巧后门
文/ dickboy
相信这篇文章的出现将造成网络电视之类的东西漫天飞舞(或许还有一种新兴后门), 我可没有一点点私心啊, 知道这点东西就立刻和大家分享了。
同学想看网络电视, 可惜程序要注册, 把我这个义工叫了过去, 几下搞定后, 一看注册费……还真不是一般的贵!要不咱也写一个得了?说不定也可以搞点钱花花。 住宿费还欠着呢, 不交钱不让考试, 穷人家的孩子啊(Icefire:同道同道!想当初……唉, 还是不想了, 大过年的。 ), 5555……。 可惜我也不知道怎么写, 我还没有学过Windows编程, 还记得上期杂志我的文章《Crack新手进化篇》吗?我的补丁程序可是黑忽忽的界面啊!哎, 没有办法啊, 不会Windows编程, 只好分析别人的程序了, 就拿网络电视小精灵下手吧!
Peid检查后发现是用Delphi编写的, 郁闷, 很难找到是哪个函数自动打开Realplay或Media Player播放影音资料的, 要是用VC++编写的就好了。 到网上找了几个类似的网络电视程序, 不是Delphi就是VB写的。 没有一个VC++的, 只好对网络电视小精灵动真功夫了——按江湖规矩, 我们单挑……那个拿葱的大婶你过来!
Crack思维
用Dede反编译, Tnit1的TForm1看到很多事件, 仔细看看, 看到了一个CCTV1Click事件, 双击来到对应代码:
004A1A80 53 push ebx
004A1A81 8BD8 mov ebx, eax
004A1A83 6A01 push $01
004A1A85 6A00 push $00
004A1A87 6A00 push $00
* Possible String Reference to: 'http://www.cctv.com/sports/'
004A1A89 68A01A4A00 push $004A1AA0
004A1A8E 6A00 push $00
004A1A90 8BC3 mov eax, ebx
* Reference to: QForms.TCustomForm.GetClientHandle(TCustomForm):QWorkspaceH;
004A1A92 E88501FAFF call 00441C1C
004A1A97 50 push eax
* Reference to: shell32.ShellExecuteA()
004A1A98 E89B94F8FF call 0042AF38
004A1A9D 5B pop ebx
004A1A9E C3 ret
嘿嘿, 原来用的ShellExecuteA。 打开Ollydbg, 载入网络电视小精灵, 下断点在004A1A80, 也就是CCTV1Click事件开始的第一条语句。 运行, 点击中央一台, 开始播放了……等等, 不对啊, 竟然没有断下?!仔细看看网址, 原来用的ShellExecuteA是打开网页http://www.cctv.com/sports/的, CCTV1Click不是调用Media Player.exe打开中央一台的事件, 那这个到底是什么东东呢?打开网络电视小精灵看看, 在网络导航的体育栏目看到了原来是点击CCTV体育的事件, 晕倒。
继续, 再找一个熟悉的:BBC1Click, 从名字上看, 应该是播放BBC电台或者电视台的事件(不知道有没有BBC电视台, 呵呵), 双击来到对应的地方, 发现这次的代码和上面的完全不同:
0048E298 BAB0E24800 mov edx, $0048E2B0
* Reference to control TForm1.WebBrowser1 : TWebBrowser
0048E29D 8B805C040000 mov eax, [eax+$045C]
* Reference to : TWebBrowser._PROC_0046395C()
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的原型就是因为我想让朋友们去发掘每一个参数的意义, 说不定就能发现宝藏哦!
……