打造自己的網路電視(菜鳥級)

看雪資料發表於2015-11-15

標 題:打造自己的網路電視(菜鳥級)

發信人:ngaut 

時 間:2005-01-04,11:05 

詳細資訊: 



相信這篇文章的出現將造成網路電視之類的東西漫天飛舞
1.事情起因
同學想看什麼網路電視,要註冊,把我這個義工叫了過去,幾下搞定了,一看註冊費,嘿嘿,要不我也寫一個得了,說不定我也可以搞點錢花花,住宿費還欠著呢,不交錢不讓考試,窮人家的孩子啊,5555~。可是,我也不知道怎麼寫啊,我還沒有學過windows程式設計啊,還記得上期雜誌我的文章《crack新手進化篇》嗎?我的補丁程式是黑忽忽的介面啊,哎,沒有辦法啊,不會windows程式設計,只好分析別人的程式了,就拿網路電視小精靈下手,peid檢查,delphi編寫,鬱悶,很難找到是哪個函式自動開啟realplay或wmplayer播放影音資料的,要是vc++編寫的就好了啊,只要作者不刻意加密,嘿嘿,到網上找了幾個,我暈,不是delphi就是vb寫的。沒有一個vc++的,當然了,我沒有找所有的網路電視程式(PS:要是你有信心和耐心,不妨找找)要vb就不說了,太混亂了。只好對網路電視小精靈動真功夫了。

2.Cracker思維:
用dede反編譯,過程,Tnit1的TForm1看到很多事件,仔細看看,看出不少東西啊,看到了一個cctv1Click事件,雙擊來到對應程式碼:

004A1A80   53                     push    ebx
004A1A81   8BD8                   mov     ebxeax
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     eaxebx

* 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不是呼叫wmplayer.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的一個控制元件,不死心,再找其他的事件,不是網頁的基本都是用TWebBrowser構件,看來沒有戲唱了。

不管了,12:00睡覺在說,明天早上還要上課呢?

剛躺到床上,突然想起前面的ShellExecuteA不是可以開啟網頁嗎?那還有沒有其它作用呢?用ida反彙編網路電視小精靈,找到ShellExecuteA(不要問我怎麼找的啊,呵呵,在names選項),ok,ida就是好啊,給出了註釋:
jmp     ds:__imp_ShellExecuteA ; Opens or prints a specified file
看到了嗎?簡單翻譯應該是:開啟或者列印一個具體檔案。(應該沒有翻譯錯吧,英語太差,4級才考了42分)
看來有希望,網上看電影不也是開啟一個具體檔案嗎?還記得你用realone網上看電影吧,突然掉線的時候,是不是彈出一個東東,說什麼......*.rm不能播放了,這就是一個具體檔案啊,呵呵。
趕緊用百度查了查ShellExecuteA的資料,哇,太多了,大部分都是vb中怎麼用,沒有一個我要的,靈機一動,換一種思維方式,當我們電擊一個電視臺或者廣播臺的時候,不是用wmplayer.exe開啟就是用realplay.exe開啟的(什麼?不知道上面2個是什麼東西,我暈,就是xp系統自帶的Windows Media Player和realone),所以,要是可以用ShellExecuteA 並且用 realplay.exe作為引數可以開啟一個網上的影音檔案,那麼用ShellExecuteA  realplay.exe搜尋應該是有結果的。
好了,搜尋ShellExecuteA  realplay.exe,哇,沒有發現,,不會吧。Ok,再來搜尋ShellExecuteA  wmplayer.exe,也是一個結果也沒有。
只好出2招了,拿出cracker必備的api手冊,查ShellExecuteA,我暈,居然是用vb描述的。
算了。睡覺了。 

第2天上課的時候沒有心思,繼續想這個問題,沒有什麼結果,回到同學寢室(因為我沒有電腦啊,只好用別人的了)查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. 
print 
Prints the document file specified by lpFile. If lpFile is not a document file, the function will fail. 
英語菜,就不翻譯了,更具體請查閱msdn,到這裡,你有什麼想法了嗎?lpOperation已經指出了一些操作,好象對編寫網路電視有用的只有上面的"open"啊。
還有以下幾個例子,這個函式非常有用,
如下:
To explore a folder,To open a folder,To launch the Shell's Find utility for a directory(沒有給出具體例子,請查閱msdn)
如果你看過:《自己試試:為OICQ新增顯示IP和埠功能》,《用pediy實現為程式新增對話方塊和網址的功能》,你就知道這個函式的功能實在太強大了,如過你看完了本文,你會發現ShellExecuteA的功能超級強(個人看法啊,沒有什麼windows程式設計經驗)。
後來從網上找到了《深入淺出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為wmplayer.exe,替換
"c:\\MyLog.log"為"d:\\t.mid", 當然這裡的"d:\\t.mid"是真實存在的mid音樂,這樣行嗎?先簡單測試一下,開始選單,執行,輸入wmplayer.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", "wmplayer.exe", "d:\\t.mid", "", SW_SHOW);
  return 0;
}
執行,呵呵,是不是一個黑忽忽的介面之後,彈出
Windows Media Player開始播放t.mid了.成功
注意:windows98不是wmplayer.exe,98下面是mplayer2.exe,windows2000不清楚,未具體測試.請大家對照自己的機器做實驗,PS:我同學的機器是xp
簡單思維,第2個例子開啟一個網頁(廢話),用什麼開啟的呢?用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);
//注意與上面的不同之處,去掉了"wmplayer.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 ,ok,繼續修改:
ShellExecute(0, "open", "http://mp3.baidu.com/u?u=http://www.jsshmzx.com/zhuwei/geci/flash/
      /ZzI$.mp3", "", "", SW_SHOW );
注意:這個地址是baidu搜尋的,到你測試的時候可能已經過時了。
執行,如何,呵呵,Windows Media Player開始播放:陳慧琳 的 記事本了吧。
那麼如果網上的檔案不被Windows Media Player支援呢?比如說:rm格式呢,那就用realone啊,這就是為什麼網路電視小精靈的幫助要提到的必被軟體。但是前提是realone關聯了rm格式,測試時請注意,具體測試我就不寫了,原理是一樣的。
但是請不要就此滿足,你可能覺得我要講的已經過了,但是我先想你可能沒有想過下面的東西:
  ShellExecute(0, "open", "realplay”, "d:\\t.mid", 0, SW_MINIMIZE);
這裡強行指定播放器為realplay,現在你可能覺得真的夠了,如果我告訴你沒有,呵呵,是不是有中想扁我的衝動,沒有關係,還是那句話:“我拼了命的教你們,你們還拍板磚。”仔細的發覺一下,還會有讓你吃驚的東西,一會我會講到,我希望這篇文章能夠讓你覺得實踐和思維的重要性,我想做到授人以漁,而不是授人以魚,I am tring to free you mind。希望我可以做得到。
希望你還沒有忘記文章的標題,我們要打造自己的網路電視,關鍵技術已經解決了,不是嗎?
現在用任何視覺化程式設計工具打造你自己我網路電視吧,這裡我用vc++,因為我正在學c++啊,用MFC畫個介面,不要問我怎麼畫的,我也不會,我讓我同學幫我劃的,基本就是照著嚮導做的。然後新增程式碼。等等,這裡有個問題,我怎麼知道那麼多電視臺的網址呢?嘿嘿,這就是下面要說的問題了。

簡單hacker思維,當我們網上看電視的時候,Windows Media Player或者realone會開啟網路電視內建的網址,這個網址是要作為Windows Media Player或者realone的請求發給伺服器的。所以這裡有2個方法:
既然是網路電視內建的網址,那麼我們可以w32dasm反彙編之後去找網址,這裡仍以網路電視小精靈為例,反w32dasm彙編,會發現大量的網址,但是仔細看,會發現幾乎沒有一個網址是用來看電視和聽廣播的,都是網路電視小精靈裡面網路導航提供的網址。似乎此路不同,是嗎?用ollydbg載入網路電視小精靈,檢視字元參考,沒有吃驚吧,基本可以找到所有的看電視和聽廣播的網址。為什麼w32dasm不可以,而ollydbg可以呢?(注:我用ollydbg僅僅是載入,還沒有開始除錯,這個時候應該也相當於靜態反彙編,經測試ida靜態反彙編也不能獲取看電視和聽廣播的網址)
其實我也不知道,還請大家指點啊。
當然還有可能就是軟體對網址進行了加密處理,但是這個加密必定是可以還原的,要不Windows Media Player或者realone怎麼識別呢?高手還原演算法就可以了,這個不是我能力範圍的事情。

2.既然這個網址是要作為Windows Media Player或者realone的請求發給伺服器,所以我們可以用sniffer獲得真實地址,測試時我用的commview,個人覺得這是我等菜鳥最好用的sniffer,這裡我簡單說一下,設定過濾條件,ip為自己機器的ip
,只捕獲流出的資料包,請設定協議,因為播放影音檔案一般的協議有這些:mms://, rtsp://等
如果捕獲不到地址,請放寬條件。
Ok,現在解決了所有的問題,剩下的就是不停的加入網址,寫程式碼了。
qq:254128123  email:ngaut@126.com

相關文章