PT简介
[TOC]
PT与BT
BitTorrent协议(简称BT,俗称比特洪流、BT下载)是用在对等网络中文件分享的网络协议程序。和点对点(point-to-point)的协议程序不同,它是用户群对用户群(peer-to-peer),而且用户越多,下载同一文件的人越多,下载该档案的速度越快。且下载后,继续维持上传的状态,就可以“分享”,成为其用户端节点下载的种子文件(.torrent),同时上传及下载。
BT 的设计理念是好的,但是在实际使用中,大部分人下载完成后没有保持做种,实际上违背了BT的共享精神。
PT 是 Private Tracker (私用种子服务器) 的简称,主要是在BT的基础上对每个用户进行了标记,可以统计用户的上传和下载量,计算用户分享率;而且PT 不同于 BT 的公开性质,PT 一般依附于邀请制论坛机制,用户需要收到论坛的规则制约。在拥有BT所有功能的同时,需要达到一定的分享率才能不被删除帐号。PT其实也是BT下载的一种,但有两个明显的改进:一是私密的小范围下载,二是进行流量统计,根据上载量决定你的权限。其通过禁用DHT有要求地选择并控制用户数量,这样,在有限的范围内,下载的用户基本上都可以达到自己的宽带上限,PT下载还通过论坛等方式的约束机制将BT下载的理念现实化,真正让用户做到下载的过程中努力上传。
PT 金融工具
魔力值公式
PT 主要利用虚拟货币魔力值(Magic value)来维系 PT 社区的可持续发展,是PT社区的唯一金融工具,魔力值由用户做种产生,可以进行种子购买和其他消费。
魔力值的公式不同社区可能略有不同,但是大致思路是相似的。魔力值公式是收敛的,这是为了避免通货膨胀和平衡所有用户的利益,这里以中国高校PT社区普遍使用的魔力值计算公式为例。
魔力值
式中
- 为中间变量
- 为第i个种子的生存时间(TTL), 即自种子发布起到现在所经过的时间,单位是周
- 为参数。
- 为第i个种子的大小,单位是GB
- 为第i个种子当前的做种者数
- 为参数。
- 为1小时中用户获得的做种魔力值点数
- 为参数,代表用户1小时获得魔力值的上限。
- 为参数。
公式分析
我们只讨论单个种子的情况,因此忽略掉 运算,该公式包含三个变量,我们分解公式。
- 式子(1) 种子周期影响 :
- 式子(2) 做种人数影响:
其中 为变量,分别代表周期数和种子数。
(1)函数图形如下
从图中我们可以很明显看到8周后时间对函数值没有明显影响。
(2)函数图形如下:
从图中我们可以很明显看到10种后时间对函数值没有明显影响。
(3)我们让做种数和周期数值相等, 的函数图形为:
从中可以看到,种子数计时间为5时 ,有最大值。
(4)我们让做种数、大小和周期的数值相等,的图形如下:
(5)每小时魔力值与A值关系:
在A 取值 为0-300时基本是直线关系。
(6)特殊情况分析
当周期大于8,种子数多于10,的值不再随他们的增加而明显改变,因此以此时的值代替周期大于8,种子数多于10的值是合理的。再分析满足以上情况时的魔力值。首先周期等于8,种子数等于10时, 的值分别为和,则值为 ,
值为其图形如下:
经过拟合,以上线性方程为 , 为种子尺寸, 为一个种子每小时魔力值。相关系数为 ,标准偏差为。该方程适合于周期大于8,种子数多于 10 的情况。
同时我们还可以考虑得到一个重要结论:另外,占用同样的做种磁盘空间,多个种子和一个种子所获得的魔力值是相等的(不考虑 ,适用于周期大于8,做种数多于10 的情况),因为他们的 值是相等的,比如一个100GB 种子和 1GB 种子 100个,他们A值可用 计算,显然二者相等。
结论
- 8周后时间的增加不会让魔力值明显增加。
- 做种人数超过 10 后,做种人数的增加不会明显减少魔力值。
- 一个种子存活8周后,且做种人数超过10,种子尺寸小于200GB 时,魔力值于种子大小由近似直线关系,即 $B = 0.9658 * 0.545$ 。
- 占用同样的做种磁盘空间,多个种子和一个种子所获得的魔力值是相等的。
PT存在的问题
- 断种:由于PT下载方式的私密性和小众性,导致下载资源,尤其是偏僻冷门的资源,经常会由于上传人数的不足而产生断种现象,这种现象在一些规模较小的PT下载站尤其明显。
- 作弊:由于PT下载所使用协议的漏洞,导致一些用户利用其漏洞模拟上传流量而进行作弊,这种作弊很难完全禁止。
- 地下交易:由于PT网站大多数不能自由注册,催生出一批依附于该规则的商人,他们通过第三方平台明码标价贩卖账号或者邀请,帮忙以正当或者作弊的方式,为客户增加上传流量、做种积分等,而上述私自贩卖账号、邀请、流量、积分的行为,极大破坏了PT网站的运作机制,通常都被PT网站明令禁止并长期大力打击,甚至因为该问题导致一些PT网站把一些国家或地区列入黑名单。
- 网游化倾向:由于PT网站详细记录每一个用户的流量数据,所以有部分用户以各种合法或者非法的手段,借此提高个人数据并以此为乐,而实际上这些用户平时很少甚至根本没有兴趣了解自己下载过的数据资料。
版权风险:PT网站分发的内容,大多以影视出版物、音像制品、软件或应用、图书的扫描或电子档等为主,当中绝大部分均未获版权所有者正式授权,只是基于PT网站本身的小众及私密性,才能长期行走于法律的灰色地带,每一位用户都需要承担被控告侵犯版权的风险。
突然关站:出于种种原因,每一年全球都会有几个PT网站毫无征兆突然宣布永久关闭网站,站点的大小与突然关站的概率并无明显关系。
PT的流量作弊与反作弊
做种是获得魔力值的重要途径,但PT 服务器 的 tacker 是通过通过用户客户端主动提供的流量信息来计算其的魔力值的,这致一些用户利用其漏洞模拟上传流量而进行作弊且这种作弊很难完全禁止。
PT自带检测机制
为了防止作弊,服务器有一些基本的作弊检测模块。第一个验证的地方是 USER_AGENT ,其中禁止了几种常见浏览器的USER_AGENT,并对HTTP请求头中的Cookie、Accept-Language、Accept-Charset这几项进行检查。如果HTTP请求头有Cookie、Accept-Language、Accept-Charset这几项,则会出错。
第二个验证的地方是端口port,跟踪函数 portblacklisted 限制了端口的范围,但是port 变量 是通过 GET 方式 得到的,我们可以进行伪造。然后还有身份信息,种子信息的获取及验证,略过。在服务端会动态维护一个peer的数据表,来记录当前的连接信息(session)。
第三个是对announce 时间间隔的验证,两次announce间隔不能小于30s。
第四个是对uploaded 和 downloaded 这个两个变量的监测,大一是在当前活动的sessio 中,uploaded和downloaded这两个变量的值必须是不断增加的。
第五个是比较重要的验证步骤,check_cheater 函数。heck_cheater函数中注释写的比较清楚,本质为不同情况下对上传速度的判断。在默认的安全级别下,首先,如果上传速度大于100MByte/S,很明显这一定是在作弊,系统会自动disable你的账号的;然后,如果你以MByte/S的速度上传了1GB,那你可能在作弊。如果管理员设置了更高的安全级别,则会进行当前下载peer数的检查,若正在下载的peer数较小但是你却以一个较高的速度在上传的话,那你就有可能在作弊。对于可能作弊的情况,如果在24小时之内cheater表没有你的记录的话会新增一条记录,若已经有记录的话记录中的hit数会增加1。该函数只检查了上传有关的参数,并没有检查下载时的情况。因此我们可以伪造下载量或者不产生下载量。
PT漏洞
经过以上的分析,我们可以总结出PT协议的漏洞。
上传下载的信息靠客户端发送GET请求包来完成,我们可以进行伪造;
PT对用户的识别只有passkey这一个信息,passkey的生成算法为MD5(用户名+时间+passhash)。Passkey存在于下载后的种子里,虽然不能伪造,但是可以进行提取;
作弊检测只有上传的部分,未对下载部分进行检测,有实现可以不计下载量下载的可能;
一个种子可以包含多个tracker,而服务器并没有或者说无法对此状态进行检测,客户端tracker进行更新的时候会向列表中所有的tracker发送同样的上传下载量信息。这样便能导致刷流量的可能;
所有的信息都由tracker进行处理,而处理过程中多次查询数据库,有CC攻击的可能,一旦成功,整个服务器便无法工作。
对于第一个漏洞的利用方法是人工发送数据包,只要满足之前所说的验证的规则就可以,即注意发包格式、请求内容、发包间隔、数据速率控制、安全级别高时还要关注当前下载者的数量等等。当前下载者的数量可由特定页面进行查询,正则匹配信息即可。
对于第二个漏洞,我们可以向一个不知情的用户要一个下载好的种子,用uTorrent载入,点高级查看tracker信息,记录下其passkey。当以后自己需要下载种子而又不想耗费自己的下载量的时候,可以将自己种子的tracker替换成受害者的。这样tracker更新时传送的信息为受害者的信息,计入受害者的下载量。当下载完毕后,重启uTorrent,把之前的下载信息清除,然后将tracker改为自己的tracker,这样上传量计入自己的账号。
对于第三个漏洞,我们可以在刚开始下载时tracker更新获得peer之后将tracker删除掉,这样即有peer传送文件给自己,又不会向服务器发送流量信息。等下载完成后,重启uTorrent,将tracker加入,继续上传,上传量计入自己的账号。这可能会导致其他人封号!
对于第四个漏洞,一个种子自己用各种途径下载完毕后,重启uTorrent,在tracker列表中加入自己和对方的tracker,一个人做种,多个人获得上传量。