Re: [閒聊] 很久以前寫winsock API攔截的心得
請問一下,有誰還有留 SRC檔案,可不可以寄給我
那個連結已經不能下載了
想要研究一下,卻沒有檔案 QQ
: 在winsock2尚未推出前,winsock.dll就是實作socket的最底層實作品。它負責與更底層的
: NDIS驅動程式進行溝通。但在winsock2推出後,winsock.dll就不是socket的最底層實
: 作品,最底層的實作品改成了ws2_32.dll。而winsock.dll就只是跨接到ws2_32.dll而已。
: winsock體系實際上分成非常多層,詳情可看
: http://msdn.microsoft.com/library/en-us/winsock/winsock/windows_sockets_2_architecture_2.asp?frame=true
: 但可以簡單地分割成兩部份,一個稱為API;另一個叫作SPI。API就不用說了,至於SPI
: 就是與NDIS互連的那一頭,它負責提供服務給API。而我們所寫的程式,大部份都是在API
: 那一頭。
: 由於winsock是高於L3的實作品,所以我們不能用winsock來做出任何低於L3的功能,像是
: 使用arp、rip、ospf等等協定,如果要用這種較低層次的協定,就要另找函式庫,或是自
: 己去寫NDIS方面的程式。
: OK,有了一些對於winsock的背景瞭解,我們可以來討論關於winsock API的攔截。
: 攔截winsock API有何好處呢?最大的好處之一,就是可以寫出許多奇奇怪怪的程式。從
: 流量計算到遊戲外掛,都可以用這手段來達成。
: API攔截有很多方法可以實作,最最普遍的,不外乎是Hooking或是直接寫個假的winsock
: .dll來騙程式。這兩種方法各有利弊,Hooking的好處是想要就要,不要就可以關掉,而
: 且可以只針對想到的程式,所以大部份的遊戲外掛都是用Hooking達成;但它的壞處,就
: 是難寫,因為要直接插接想要Hooking的程式,如果不了解對象的行為,常會以失敗收場
: 。而且要動到虛擬記體的內容,所以很麻煩。寫假的winsock.dll就容易多了,只要偽造
: winsock.dll的內容,就可以騙程式來呼叫自己,但是缺點就是Hooking的優點。所以這個
: 比較少人用。
: 我以魔獸來當例子,說明如何寫個假的winsock.dll讓魔獸可以跨區網連線。
: 1.魔獸的區網遊戲,就真的只是區網遊戲,它不能跨越兩個網段來加入。也就是說,若你
: 在A網段,則你開的遊戲,B網段的同學看不到,就不能加入。這時候,強者我同學就會
: 去偷拔大學部的網路線,讓自己跟對方同網段。
: 2.為了要解決這個問題,我們可以先思考一下,魔獸是如何進行區網連線的。透過etter
: cap的觀察,我們可以發現魔獸在開遊戲時,會把自己開遊戲的通告,以廣播的方式丟
: 到整個網段上,但是router是不會forward廣播封包的,所以當然別的網段的人不能看
: 到自己網段的遊戲。
: 3.思考解決方法:最直接的方法,想辦法去管router,或是色誘(?)管理員讓router會去
: forward廣播封包?但這不在本文討論之列。既然魔獸會用廣播的方式做通告,那麼我
: 們只要強迫魔獸送通告的封包給同學的IP就好了嘛。
: 4.首先使用vc++附的dumpbin來看看魔獸主程式用了啥dll,我們可以發現,它是用winso
: ck.dll,因此較快的方法就是寫假的winsock.dll給魔獸吃。
: 5.一樣用dumpbin看看魔獸呼叫了哪些winsock的函式,注意魔獸是用Oridinal ID來呼叫
: 它們的,所以你會看不到它呼叫的函式名。不過一樣把Oridinal ID抄下來,我們一樣
: 用dumpbin去看winsock.dll的函式Oridinal ID就行了。
: 6.再來寫出檔名,函數名及calling conversion跟winsock.dll一樣的新winsock.dll就行
: 了。記得Oridinal ID也要跟winsock.dll一樣。
: 以上就是一種思考模式,從概念到實作的所有步驟。至於詳細的實作品,可參考我的網站
: http://phpweb.yuntech.edu.tw/g9223704
: 這種東西實作有一堆要注意的地方。但說穿了沒什麼,我也只是騙騙P幣而已。
: 只是令人吐血的是,寫好了這東西,我同學卻說要趕論文反而找不到腳來湊...Orz。
: 此程式曾經在魔獸版上PO過,現在放上src。
: 歡迎大家討論。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 59.115.177.184
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 3 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章