永久链接(很多细节来自内存,所以我在必要时重新创建图像和信息。)
俱乐部Bing是一系列从2007 - 2012年跑的游戏。游戏是您可以在线玩的所有单词游戏,以赢得积分,这些积分可以在线奖品商店购买奖品。其中一场比赛被称为Chicktionary。目标是使用7个字母尽可能多的单词。
您可以使用的字母在底部,您需要制作的单词在顶部的小鸡蛋中。总有一个7个字母的单词。
回到它的早期,你可以得到很多奖品。虽然他们只允许您获得每个地址的每个奖品中的一个,但它很容易将公寓号码拍摄到您的单身家庭的地址并创建许多唯一地址:
显然,Xbox Controller有最好的美元/点,因此您将留下计算机运行以收集多个帐户的点,然后使用所有要点来购买控制器。在一个论坛上有一个帖子,一个家伙照片在一天内由UPS收到100个Xbox控制器。他迅速把它们放在eBay上并卖掉了他们。其他奖项包括:
Micrsoft在游戏中涌入他们的搜索引擎,Bing。每次您在答案中输入时,您的浏览器将在另一个帧中搜索它。这可能会说服人们更多地使用Bing,但它也增加了似乎使用Bing的用户数量。并且该数字可帮助Microsoft从想要出现在Bing搜索结果上的广告商中需要更多的资金。我曾解决过,扮演Chicktionary的所有脚本者都会有助于所有Bing搜索的2-4%。我也做了一些背包数学比较了Google'谷歌和搜索/月份,并以Bing的收入和搜查,并想到了微软在游戏中获得了非常好的回报。 Bing的出现更受欢迎,可能会带来比奖品的价格更多。
周围有几个脚本自动播放游戏,通常使用自动黑键。我在拥有嵌入式浏览器的VB.NET中写了自己的,我叫做"鸡"在Chicktionary之后,还因为在我国内有一个有趣的电视素描关于Kuriitza。
因为游戏在闪存中,它是' t容易与Dom中的元素互动,所以玩游戏是:
微软ISN'这是一堆假人。他们知道骗子。他们擅长追踪将过快地完成谜题的用户,他们会使他们的奖品无效。他们也在识别重复送货地址时更好。当然,他们使用了CAPTCHAS。
你知道,你必须输入的那些quiggly字母来证明你和#39;重新人:
你认为这将是自动化的交易破坏者,但它是' t。有十几个在线CAPTCHA解决方案。 500个解决的谜题,他们花了大约1美元。俱乐部Bing每4场比赛一次弹出一次CAPTCHA。如果您获得了所有单词,则每场比赛都会获得20张门票,Xbox是55,000张门票。
(55000票/ Xbox)*(1游戏/ 20张门票)*(1 CAPTCHA / 4游戏)*(1 USD / 500 CAPTCHA)= 1.375USD每个Xbox
非常好。此外,它将需要55天,因为你每天只能获得1000个门票。但是你可以在55天结束时运行一些不同的帐户,你' d拿起几个xboxs。更便宜的奖品甚至更快:视频游戏是5000门票。
CAPTCHA解决服务解释为什么作弊如此受欢迎:这些服务有会员计划。解决该脚本与请求一起发送联盟代码,并且附属公司获得了用户支付的一系列资金。因此,剧本编写者被激励,以分享脚本,非常宽阔,并写出最好的脚本。
2010年左右,Microsoft将CAPTCHA算法从Squiggy字母切换到Asirra。 Asirra看起来像这样:
这些图像中的每一个都是猫或狗的缩略图。要解决难题,您需要在12块正确标识中获得12个,或连续两次。
当俱乐部Bing转向这一点时,整个作弊社区围绕俱乐部Bing停止了。我去上班了。
我尝试的第一件事就是向CAPTCHA服务发送猫和狗。回到2010年,那些CAPTCHA服务不是一些高度先进的图像识别。他们只是孟加拉国的人回答你的疑问。我试图锻炼他们赚了多少:
(2000年工作时间/年)*(1 CAPTCHA / 5秒)*(1USD / 500 CAPTCHA)= 2880美元/年全职工作。
也许有一半去了网站的所有者,因为你知道,资本主义,所以工人可能会根据一些随机选择的网站赚取接待员。
我想看看他们是否可以解决Asirra。在这里'我发送的图像:
这对我来说并没有。首先,我需要12个。假设每次在孟加拉国找到一个工作人员都会需要我4次尝试,这将是48个请求。 Xbox的成本才达到66美元!如果他们甚至错了,我必须加倍。猥亵!我需要更好的解决方案。
这是2010年,还记得吗?深度学习并不靠近。斯坦福的本文表明,他们能够使用机器学习令人难题约~10%的时间。那个'不是很棒! (主要是他们只是注意到颜色绿色,因为狗更有可能比猫在草坪上。)
还有一个令牌 - 桶计划,暂时锁定你,以连续获得太多错误。虽然令牌桶没有在ASIRRA测试服务器上运行,但它确实在俱乐部冰上运行。
Microsoft Research建立了一个网站来展示新的Asirra技术。它有一个测试地面,你可以尝试一下,如果你有权,它会告诉你。再次查看图像:
看那个小"采用我"按钮?那里有,因为Asirra是与Petfinder.com的合作关系。佩特仪是一家宠物收养服务,有许多列表。当你点击"采用我"按钮,它会带你到那个宠物和#39; s的档案。当然的个人资料包括物种:猫或狗。
再次,微软不是一堆假人。他们知道你和#39;重新试图单击每个图像上采用我并获得正确的答案。所以他们所做的是使难题无效,并在第一次点击采用我的时候之后的所有采用链接。所以你只得到一个答案。
我的想法是编写一个程序来做到这一点,并收集从图像到数字的映射:
每次尝试都很快,但我没有知道我需要学习多少宠物。 Asirra网站声称310万。它真的是310万吗?
大多数人都知道生日悖论:尽管一年中有一个完整的365天,你只需要22人在一个房间里有一个50-50机会,其中两个有两个生日。如果d = 365和n = 22那么你可以解决这样的概率:
这一反向是,如果你知道房间里的22个人给你一个50-50射击在找到两个带有同一个生日的人时,你可以扭转等式来计算一年中有多少天。
同样,如果我查询ASIRRA服务器并跟踪看到每个图像的轨道,直到我又复制了多长时间?我做了一个实验,这样的东西(但在VB.NET中而不是Python伪代码):
def试用():images_seen = []而true:p = fetch_puzzle()在p中的图像。图像():如果图像中的图像_seen:断开图像_seen。附加(图像)返回len(images_seen)
对于每次试验,我要求谜题,直到我在试验中获得一份重复的猫或狗。我运行了许多试验,并追踪直到第一次复制的图像。然后我采取了所有这些试验的中位数,告诉我有关有多少宠物需要看到有50-50款的重复。然后我通过上面的等式运行它,反向弄清楚图像的数量。果然,我的答案很长310万。
我把我的脚本放在USB拇指驱动器上,并将它们递给朋友。我还写了一个组合数据库的合并程序。每天或两个朋友都会向他们的USB拇指管制吧,我会运行合并(再次,农民主题)并将它们放回所有拇指管道,以便收割机不会重复努力。收割机只点击"采用我"在未知的图像上,以便保持分布式数据库的当前阻止重复的工作。
2-3周后,我们收集了约150万张图片。它已经到达拼图的地方有时几乎从数据库中解决了。但是,数据库中有一些漏洞永远不会因为"采用我"链接坏了。也许宠物已经被采纳了?我向数据库添加了另一个结果:
Asirra会告诉您是否正确解决了拼图。我运行了一段时间并测量了这些数字:
采用时间:点击&#34需要多长时间;采用我"链接,加载petfinder.com,并获得猫/狗答案。
peatm_success_rate:点击"采用me"让我答案,而不仅仅是一个破碎的链接。
猜测时间:提交猜测并学习是否正确解决了困境需要多长时间。 (这比Petfinder.com装载时间更快。)
假设猫对狗(更像是40-60但是,无论如何),我可以为每秒使用多少宠物学习时,我可以制作一个等式,使用我:
我也可以解决猜测的学习率。如果有n个未知的宠物,那么我的猜测率的几率是2 n。但是当我搞定时,我学习了所有的n:
将这两者设置为相等并解决n,我能够计算出一个超过12个宠物中的7个以上的7个,我可以猜到其余部分,它比采用我更有效。我把它放进收割机,几周后,我的朋友们和我有一个足以工作的数据库。
微软研究做得很好,但他们做了几个议定书。首先,他们从未限制他们的服务。这是使收割机成为可能的原因。其次,他们没有正确处理工作证明。
一种方法可以使其工作是服务器要求提供商拼图和答案。然后服务器将拼图发送到用户,用户解决了它,向后发送,并服务器确认它。
现在它'从您的服务器完成所有处理。如果服务器拧紧它怎么办?
如果ASIRRA曾经想要更改协议,则每个服务器都需要更新他们的网站。
现在服务器不需要了解它如何运作的详细信息。服务器没有+ 39;甚至有答案!但这里'微软犯了一个错误:
俱乐部Bing有一个速率限制,所以你不能连续得出太多错误,但Asirra没有速率限制。
因此,我很容易创建Cats-be-gone.kicks-ass.org网站,该网站在HTTP上享用了有效的令牌。像这样:
(虽然没有检查令牌IP地址,但他们的时间戳是。令牌只有一个小时的时间。猫已经离开了服务器实际上提前产生了它们,并且始终在手上保持20个,使它们' D.准备好了根据需要。)
我的朋友们和我使用了一段时间的服务器,它随着服务器猜测新答案,它随着时间的推移而变得更好。
和我的朋友聊天,我想,"嘿,让我们打开服务器给每个人并制作出业务!"人们已经习惯于支付验证码的服务,所以我想他们可以付钱给我。我' D每200个解决方案充电,这超过了1/500美元的速度,但我没有竞争。我向客户宣传了这类东西的最受欢迎的论坛之一,并打开了谷歌商店接受付款。相当兴趣回顾它!
论坛上有很多喋喋不休的关于这是如何绕过的,而不是求解器,所以获得的门票会在购买奖品时失效。在过去,CAPTCHA旁路者遇到了问题。人们是可疑的。所以我暂时放弃了它。在开始证明自己并且没有替代方案之后,我有一些客户,潜在销售额有50美元。哦,哇我'我现在很富有!是的,对!即使是孟加拉国也在更好的时间回来。
我答应了我会在花费10%的支付之前处理收费,我会退还不满意的客户,证明它有效。但只需一周后,我取消了所有订单,因为微软防御最终击败了这个想法。
微软尝试了一些事情来打败我的作弊。他们尝试的第一件事之一是重命名他们所有的图像。这是一个完全灾难,我必须重新开始,因为我只映射到猫/狗的文件名!
不,开玩笑。我已经下载了所有图像。我的意思是,每次1MB的310万像素,只有3.1磅。甚至回来然后3个terabytes实惠。它没有影响我。我想到他们可能会尝试这样的东西,所以我跑了一个下载收割机。
他们尝试的另一件事是调整图像。它们会随机选择图像中的10-20像素并调整颜色。这将是越来越足以打破我可能已经使用的任何加密哈希,就像Sha1(图片)的地图一样, - >猫狗。但我没有使用它。我用minhash。
Minhash超级简单:从图像中选择十个像素并连接它们的值。而且它'它。只要你总是挑选相同的十个像素,它就' ll是一致的
如果微软在这里修改了几个像素,没有大量的交易。我们碰撞的几率是多少?即使我们这样做,它也可能是12个图像中只有1个,所以我可以为该图像发送猜测。最糟糕的情况,得到一个新的拼图再试一次。
它的工作正常。我也有服务器更新,只要它得到猜测就会,以便数据库随着时间的推移填补自己。
Microsoft最终速率限制Asirra,因此不再可能为单个猫的服务器服务器为每个人创建令牌。他们开始将令牌与IP地址相关联,因此猫的服务器令牌令牌毫无价值。最糟糕的是,他们从Petfinder.com中擦掉了310万只图像,并获得了一个全新的批次。
由于速度限制,我无法再收获它们,而且我不能因为IP地址检查而卖掉它们,所以我完全放弃了一定程度的企业。我从未处理过任何付款。但我仍然对客户感到有些义务,我确实想赢得一些奖品,所以我转向众群。
我知道一些用户愿意回答CAPTCHAs自己,所以我调整了客户端要求服务器答案,得到它们,然后让用户填写未知数。然后,客户端将将结果发送回服务器以更新数据库。
为了使恶意用户填充我的数据库,用垃圾填充我的数据库,我加密了与硬编码密钥的所有通信,我在释放中运行了一个.NET obfuscator,以使得更难找到。它只阻止休闲用户破坏数据库,但它足够好。唯一弄清楚如何通过逆向工程访问数据库的人是那些想要下载整个数据库的人。我决定我不在乎,所以我让它发生。
此外,因为我没有' t有图像,所有哈希都在客户端代码中,因为我没有想向服务器发送12张图片,因为每个请求。我知道Minhash' t强大,所以我切换到窃听。
Phash有一个图书馆和它,显然不是在VB.NET中所以我自己实施了。如今你' D只是使用具有图书馆的不同语言,但是我' ll经过菲什斯的工作原因,因为它&#39非常酷。
相当简单,只需将每个像素的RGB值转换为亮度。有几种方法,但这个是在维基百科:
从PIL Import ImageImage = Image.Open(' dog.jpg')oply.show()在范围内x(image.size [0]):for y在范围内(image.size [1]) :(r,g,b)= image.getpixel((x,y))亮度= 0.2126 * r + 0.7152 * r + 0.0722 * b new_pixel = tuple([int(亮度)] * 3)image.putpixel(( x,y),new_pixel)图像.show()
您将每个像素替换为其周围的像素的加权和。这是一个半径为8的模糊。
离散 - 余弦变换是一种像傅里叶变换一样,您可以将您的系列数字从一种形式转换为另一个形式并反转它。 inverse_dct(dct(图像))==您不必知道频率分析的所有信息。只要知道您可以采取数字矩阵,如黑白图像,并将其转换为其他数字矩阵。你可以转换回来。
与傅立叶变换不同,DCT由余弦而不是E的力量,因此所有结果都是实数,没有虚数。 JPEG用于缩小图像的技术。
这里的一些代码在这里找到它在Python中找到它。我修改了一点。这里的重要位:
IM = RGB2GRAY(IMREAD(' dog.jpg'))#read在图像中到灰度imf = dct2(im)#dct fractract = 1在范围内(len(im)):对于x范围(Len(IM [Y])):如果x> Len(IM [Y])//分数或Y> len(im)// fraction:im [y] [x] = 0#返回左上角的左上角的黑色像素imf [y] [x] = 0#areN' t的blacken像素。左上角IM1 = IDCT2(IMF)#逆DCT
我们在图像中读取并执行DCT。然后,我们将其上的一些原始图像的一些分数和相同的变换图像分数变黑。然后反转变换。在这里'它看起来没有什么变黑:
没有惊喜。 DCT是可逆的,因此输出与输入相同。它' DCT图像只是黑色;我们很快就会到达那个!
尽管失去了四分之三的信息,但DCT转换图像仍然看起来非常好。让'太黑了。
原来失去了很多数据,但DCT图像仍然看起来很合理! DCT的力量:所有重要的位在一个角落里,我们可以扔掉剩下的时间。
现在让' s放大到DCT图像的左上角,我们没有扔掉的部分。
那个' s只是DCT图像的左上角。我们可以看到所有大量的比特都在拐角处。那个'为什么DCT工作,即使我们扔掉了这么多的比特:我们扔掉了不' T.它只适用于照片,而是'我们想要处理的东西。
要将其编码为多个数字,我们使用之前提到的方法:仅在左上角64号码中查看,如果该值高于中位数,则为0。结果是64位数字,其中半个0s 。有(64选择32)这样的数字,超过1018个以上的方式超过310万个图像,我们想要编码所以我们'重新碰撞。
VANTAGE POINT树是一种类似于这样的二叉树:对于每个节点,您可以指定一个中心和半径。如果指出你和#39;重新寻找的是在半径内,左转。如果它' s外,右转。继续,直到找到你的答案。
这棵树的优势在于您可以根据您喜欢定义距离。对于我们的图像哈希,我们希望均匀地称重所有的位,以便我们使用汉明距离。汉明距离是两个数字之间有多少位不同的计数。
哈希与汉明距离很好地运作良好,因为它结果是,如果两个图像几乎相同但是Don' T具有相同的哈希,汉明距离将很小。
现在 ......