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灯, 水草

请输入看板名称,例如:BuyTogether站内搜寻

TOP