C_and_CPP 板


LINE

在Win32底下,winsock.dll負責掌管對應於ISO OSI Model中的L4~L5的實作,所以許多 許多的網路應用程式,都會與此dll產生關係。 在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: 218.166.202.151 ※ 編輯: ccbruce 來自: 218.166.202.151 (03/18 18:05)
1F:推 H45:cool 03/18 18:06
2F:推 drkkimo:收錄精華:) 我等一下慢慢看~ 03/18 18:17
3F:推 UNARYvvv:滿有趣的,不過在這個例子中,為了 hook 兩個 API,而製 03/18 19:24
4F:→ UNARYvvv:作一個仿造的 DLL,應該是比單純 API hook 麻煩了一點吧? 03/18 19:25
5F:→ UNARYvvv:幸好 winsock DLL 輸出的 API 不多..XD 03/18 19:53
6F:推 lightspeed:推薦這篇文章 03/18 20:07
7F:→ ccbruce:只是因為懶,仿造只要用copy/paste就好了 03/18 20:34







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Gossiping站內搜尋

TOP