我如何与盗窃斗争...使用PHP


当我们每天为服务付费时,它就是购买服务。
如果我们每天不付任何费用(有时甚至不知道),这就是盗窃。

下午好,哈伯的读者们!

一切如何开始


我想少偷东西,让我们战斗吧! 但是手动操作非常累人,时间长且效率低下,然后这个想法就以某种方式使该业务自动化。

我到底是哪个“盗窃案”? 关于我们在互联网上行走的位置,单击“观看视频”按钮,加载了一些页面,由于某种原因,视频没有播放,我们离开并走了很远,但实际上我们是“自愿地”激活了服务以接收每天从他的移动帐户收取30卢布的象征性费用,这是前所未有的。 在人们中,这称为wap-click或移动订阅,移动运营商想出了各种漂亮的名字。 不过,请勿在服务列表中包括盗窃视频按钮。

这里更多细节。 这是一个关于“赚钱”的好方法故事。

例如,描述了很多不完全自愿订阅的情况。 不成文-还有更多。

摔跤手还具有:


什么和为什么是自动化的


在Google AdSense发布商面板中搜索和屏蔽广告。
目的是提高堵塞效率,并释放花费在手动清洁上的时间。

问题的实质和可用的解决方案
多年以来(我发现类似事件的第一次提及是在2014年夏天),出版商手动捕获了“雅库波维奇之死”,“石块上升者”,“观看视频观看,点击观看”和其他恶魔( 开始继续 )的过程,这一过程几乎没有自动化1 ,而且似乎几乎不可能。

1有(至少一次)两个解决方案,但它们有相当严格的要求,并非每个人都能负担得起。
这些非常好的解决方案:

  1. AdSense Cleaner 。 这需要很多额外的费用。 软件。
  2. AdsAutomation 。 用于控制Google Chrome浏览器的脚本(据我了解,在ZennoPoster上)。 需要一台单独的PC。 目前,该项目已从GitHub中删除。

如果您制作的软件可以代替屏蔽广告的人员,则必须考虑以下要求来完成此操作:

  • 应该在几乎所有站点所有者拥有的硬件和软件上工作;
  • 不需要其他软件并更改现有设置;
  • 易于安装和配置,以便普通用户可以交付。


通常,php(带有cURL)将具有所需的功能。 您可以直接上传到您的网站上,而无需其他计算机和其他麻烦。

并对要求进行细化。
由于该解决方案本应在php中实现自动化,因此可以通过cron运行,因此用户设置和临时数据的存储应位于磁盘上(而不是cookie中)。 Cookie中只会存储用于访问控制面板的键。 对于无法配置cron但可以在PC /平板电脑/智能手机上打开一个选项卡的精英人士,将添加定期在Javascript上运行计时器的功能。

开头或Google API预示了什么


对于AdSense,有一个API,我以某种方式从眼角看到了它,并且没有深入。 现在是时候去研究了。 有很多可能性,但事实证明, 这里没有关于CPU API的描述。 想要观看网站上旋转的广告,请手动进行。

开始


Google AdSense界面是基于AngularDart构建的,从设备的角度来看,一切看起来都很漂亮而且非常复杂。

首先,我查看了“网络”标签上的Google Chrome开发人员工具,以“窃听”此复杂界面与服务器的通信方式。 那里有很多要求,对我来说最有趣的是在“ XHR和Fetch”部分,如果您仔细考虑的话,我发现其中的内容似乎很容易猜到。 例如,发布请求之一:

传输的字符串。
{"method":"searchArcApprovals","params":"{\"1\":\"ca-pub-8958890276790964\",\"2\":{\"1\":0,\"2\":1,\"3\":0,\"4\":{\"1\":{\"1\":\"AClZvXKL6S3HChRty5YBa81BLWDBQkb3FYDsifZ9V/mBTKbOGlj3gMWVpzTtXggA1880Le9NyVZIicNm/4pz724e/MO8fyLfjOReF205cyjLV9C8OCCeKe7VvZHyvyKpXh8x9smTQ0n8qIIqzuIXle5UK0hD4VBkZDvy//qoSPRCr94UtWYqqi//Rot22LJ2JFNjWEGb4n1YQbAw0cKWPR3LAugPBajInWXEFGWJRTnmY2TkI5VzUzIkcXpJ/bkajn3c8GnecCfFNvNhGLS10VXdRwiykngG3xfoMTRhQOR5GXbm4kwdIhzQUM/d6xP0Xda3FOIZGGk9bymneg+9oDY+rMFiRfDFCb66g50t9J9r++oHXjek09Ci1rqC7LOw2pvkqp3hjG6RyVmsiT/eWGq+OsfjE7CgRk43QIRMSa+jlZBQhARUPlpUXzyZyoTiIPTRZ5ND/4MnIMqaUWSRoDGffiE/XkHJPEkNZtLX2XR5gZ3x5/K+ejU/fqxfZIjI6A3kueJybNA46wSLbmflhDCGDJEE2aeYemLFGqNzFG43B80LzU3yuwgZhrLu/jaMvBJozi0nq+gXEz6r+8tic4fvsQ9lWDA+IXzXw6MKzamgfWV0ORGDW0+966KIY6IkjtIlNRKGyp3pSAd2Po+br4Dl4WNwSkMdmuV60wOrkb5BpnKZKIhDtpjWF7q6ly3FFhwo8Ktdq5ddVJ8ijJ9Y9tQhs2O0idA9N0yV86khV1IQ72OgbMv15qAswnbqF9WCo3qpfJNjJqMCHBRTohPCxhRp0cWz2thszZTmDDADPxU46sclnurd/JxHFO7lJZVdrsFB4vdLIx9kObV3bP1gOpU66kdcmom2tiedknugj7s0jLcgf1EfXnp+SUUAQyoqwS+kdhhQtGqSXgI2TopsuaLVzj+EtAuPwWeLvtI9CFPSe4o2x+gjCRPl8wVvWKV5FIrZavUVOAHZIL4nKyJjHxZi3jPfVnAia/hq1gW6XKoCg1eWGg/cAWZY4mZYQ6W4XnC0MY0uMC6fhPQdXnIS5iLZNhan80jbr/leBr4fO22+tXc6oZpZsDkXd0r3ilBJFPS2I/zAhotuzZgNA+nF2N86pyiSrdeEYFDhKWKadcKAVc3BMxxlrqZYcAXnlus9GW7R9F/ImXQ/fjRfSjVRUaJuQ0EnFejNAwdGcS6STYMa1G0wnNMAKcZ52xcHgil1SZ6N9BQ7A27z6eViOxw0LHBqNJIRZwQml2KjPd5b00D9XvohDr6jBqYXLGS/HMVvpGDJZLDI2LRlmkqBqx7YEgDZqvspeoMLHIJP22SkQDnaJtsOLGVBSi20ZD5nRyjAgS6MmcgFCvfJVWjCIL1RPHqmUU90eK4WXve0ayH9cJnpbtWrkXYCibhVPCMmYowMROw7rI4bPir0\"}}}}","xsrf":"ABOvogKvrE9fIqAKh0w02RIsB4OJ4hsB_g:1535467885347"} 

在请求中可以立即看到发布者的标识符,在第二段下有一组参数,其实质可以通过实验和XSRF令牌确定。

作为回应,他收到了有关公告的详细信息,但并非没有公告本身就包含了所有信息(此处和下方,在base64中扩展的图像被裁剪了)。

几页纸。
 {"result":{"1":[{"1":0,"3":0,"4":{"1":"AClZvXJ2t4wiEZ/VZ0i54m0Qtqpi2DTqkI1kaPMTRi4LnsQn0iR5K1xBlFpS1xmJV7ko4a6qx5RcTkp7CzVjwoy5UDSWZ5jOCPLGRcoQdDt+wOk46bdr0yA\u003d"},"5":{"1":82,"2":0,"3":0,"4":"\u003cdiv id\u003d\"ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\"\u003e\u003c/div\u003e","5":"\u003cdiv id\u003d\"ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\"\u003e\u003c/div\u003e","6":"\u003cdiv\u003e\u041c\u043d\u043e\u0433\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u043d\u044b\u0435\u003cspan id\u003d'multi-format-tooltip'\u003e\u003c/span\u003e\u003c/div\u003e\u003ca class\u003d'arc-url-link-ellipsis' target\u003d'_blank' href\u003d'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/' title\u003d'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/'\u003ehttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u003c/a\u003e","7":"\u003cdiv class\u003d'arc-one-by-one-legend'\u003e\u0422\u0438\u043f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003e\u041c\u043d\u043e\u0433\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u043d\u044b\u0435\u003cspan id\u003d'multi-format-tooltip'\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-legend'\u003e\u0426\u0435\u043b\u0435\u0432\u043e\u0439 URL\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003e\u003ca class\u003d'arc-url-link-ellipsis' target\u003d'_blank' href\u003d'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/' title\u003d'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/'\u003ehttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u003c/a\u003e\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-legend'\u003e\u0414\u043e\u043c\u0435\u043d\u044b \u0438\u0437\u0434\u0430\u0442\u0435\u043b\u0435\u0439\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003e4aynikam.ru\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003eandroidphone.su\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003eandroidphones.ru\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003efull-repair.com\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003ehowgadget.com\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-legend'\u003e\u041e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u0439 \u0440\u0435\u043a\u043b\u0430\u043c\u043e\u0434\u0430\u0442\u0435\u043b\u044c\u003cspan id\u003d'adx-advertiser-tooltip'\u003e\u003c/span\u003e\u003c/div\u003e\u003cdiv class\u003d'arc-one-by-one-data'\u003eDNS Shop\u003c/div\u003e","8":"\u003cdiv\u003e\u003cspan class\u003d'arc-impression-score high'\u003e\u0412\u042b\u0421\u041e\u041a\u041e\u0415\u003c/span\u003e \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u043a\u0430\u0437\u043e\u0432\u003c/div\u003e","9":{"1":"\u003ca href\u003d\"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\" target\u003d\"_blank\"\u003e\u003cimg onerror\u003d\"this.src\u003d'data:image/gif;base64,RA7'\" src\u003d\"https://www.google.com/webpagethumbnail?c\u003d58\u0026s\u003d400:400\u0026r\u003d4\u0026d\u003dhttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u0026a\u003dAIYkKU9ZGGjFTOWtm771MQwgDYxqtlBLCw\" border\u003d0 alt\u003d\"\"\u003e\u003c/a\u003e","2":"\u003ca href\u003d\"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\" target\u003d\"_blank\"\u003e\u003cimg onerror\u003d\"this.src\u003d'data:image/gif;base64,R0AA7'\" src\u003d\"https://www.google.com/webpagethumbnail?c\u003d58\u0026s\u003d400:400\u0026r\u003d3\u0026d\u003dhttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u0026a\u003dAIYkKU_CQ2K6v5f11Nk1RXtc87FtmG2B1w\" border\u003d0 alt\u003d\"\"\u003e\u003c/a\u003e","3":"\u003ca href\u003d\"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\" target\u003d\"_blank\"\u003e\u003cimg onerror\u003d\"this.src\u003d'data:image/gif;base64,R0lAA7'\" src\u003d\"https://www.google.com/webpagethumbnail?c\u003d58\u0026s\u003d400:400\u0026r\u003d6\u0026d\u003dhttps://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/\u0026a\u003dAIYkKU_My0a48LAsW-ZKpQX-ATXkMoPEVg\" border\u003d0 alt\u003d\"\"\u003e\u003c/a\u003e"},"10":"https://adwords-displayads.googleusercontent.com/da/b/preview.js?client\u003dasfe-arc-external-preview\u0026obfuscatedCustomerId\u003d5240877441\u0026creativeId\u003d288930210411\u0026htmlParentId\u003dad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\u0026sig\u003dACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ","13":"https://adwords-displayads.googleusercontent.com/da/b/preview.js?client\u003dasfe-arc-external-preview\u0026obfuscatedCustomerId\u003d5240877441\u0026creativeId\u003d288930210411\u0026htmlParentId\u003dad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\u0026showVariations\u003dtrue\u0026sig\u003dACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ","14":"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/","15":"","17":"","18":"DNS Shop","20":"adv-5594449542310820","21":["site1.ru","site2.com","site3.com","site4.ru"]},"6":{"5":"-6668648012302470727","7":["DNS"],"9":0},"7":1,"9":{"3":[{"1":{"1":"AClZvXLE9HJbFYq9TrAsXFgV4YkXsQt9lXp1xWjSB5aT5bFBpe4VNgo\u003d"},"2":"\u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442 \u0438 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u0438","3":"\u0422\u043e\u0432\u0430\u0440\u044b \u0438 \u0443\u0441\u043b\u0443\u0433\u0438, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0442\u0435\u043b\u0435\u043a\u043e\u043c\u043c\u0443\u043d\u0438\u043a\u0430\u0446\u0438\u044f\u043c\u0438, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043a\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0435 \u0438 \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u043e\u0432\u043e\u0435 \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0434\u043e\u0441\u0442\u0443\u043f \u0432 \u0418\u043d\u0442\u0435\u0440\u043d\u0435\u0442."},{"1":{"1":"AClZvXKrUJJ3kKBen2scP56BynOtGhf160i1F1LLmtBj3b/oh2dUFg8\u003d"},"2":"\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b","3":"\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0438 \u0441\u043e\u0442\u043e\u0432\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440\u0438\u0441\u0442\u0438\u043a\u0438 \u0438 \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0430\u043d\u0430\u043b\u0438\u0437 \u0442\u043e\u0432\u0430\u0440\u043e\u0432. \u0412 \u044d\u0442\u0443 \u043a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044e \u043d\u0435 \u0432\u0445\u043e\u0434\u044f\u0442 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u044b \u0434\u043b\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u043e\u0432."},{"1":{"1":"AClZvXL4W+khZ4O9SJiu97cTbTs2+0Wecf1IVNju8ffd4ysIT9PJ7XY\u003d"},"2":"\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b \u0438 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u044b \u0434\u043b\u044f \u043d\u0438\u0445","3":"\u041c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u044b, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u043f\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0430\u043a\u0441\u0435\u0441\u0441\u0443\u0430\u0440\u044b \u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0447\u0435\u0445\u043b\u044b, \u043c\u043e\u043d\u043e\u043f\u043e\u0434\u044b \u0434\u043b\u044f \u0441\u0435\u043b\u0444\u0438, \u0437\u0430\u0449\u0438\u0442\u043d\u044b\u0435 \u044d\u043a\u0440\u0430\u043d\u044b \u0438 \u0437\u0430\u0440\u044f\u0434\u043d\u044b\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430."},{"1":{"1":"AClZvXLQ3gPoVwjQbokDpB3+nni4xURwH5+YlnwkqjYtUowjhiKvk8Q\u003d"},"2":"\u041f\u041a \u0438 \u0431\u044b\u0442\u043e\u0432\u0430\u044f \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u0430","3":"\u0422\u043e\u0432\u0430\u0440\u044b, \u0443\u0441\u043b\u0443\u0433\u0438 \u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430\u043c\u0438 \u0438 \u0431\u044b\u0442\u043e\u0432\u043e\u0439 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u0438\u043a\u043e\u0439."},{"1":{"1":"AClZvXLKYOGgOROaa32IUxU15jP89AtTM4dV24WKS+daMhqJMTNmeSY\u003d"},"2":"\u0422\u0435\u043b\u0435\u0444\u043e\u043d\u0438\u044f","3":"\u0422\u043e\u0432\u0430\u0440\u044b, \u0443\u0441\u043b\u0443\u0433\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0438\u0435\u0439 \u0438 \u0433\u043e\u043b\u043e\u0441\u043e\u0432\u043e\u0439 \u0441\u0432\u044f\u0437\u044c\u044e."}]},"10":{"1":"AClZvXLdGOShgJo+BM3apOUAFzQkE41z1/hiZhIY8eUlC7p7xXPm82P3dq7yXhbEI+tN/YHgdH4P"}}],"2":0.0,"3":"60609","4":1,"5":"","6":"ClD3Z2nP2P/////1/ff99fXV98nMyMrJz8rH9fHV883Hx8bMz83Oz8vOzv8A/v/+9f33/fX11ffJzMjKyc/Kx/Xx1fPNx8fGzM/Nzs/Lzs7//hABIWxUk293Pm+qOQAAAAAnMJaYSAFQAFoLCS8wxxaTatL1EAJgp7737gY\u003d","7":"3639","9":0},"xsrf":"ABOvogKaRsVZECZZJU-gDWrOqoP0CSqf7Q:1535467886413"} 

在json_decode之后,它看起来像这样:

来自json字符串的对象(警告,175行)。
对象(stdClass)#19(2){
   [“结果”] =>
  对象(stdClass)#18(8){
     [“ 1”] =>
    数组(1){
       [0] =>
      对象(stdClass)#1(8){
         [“ 1”] =>
        整数(0)
         [“ 3”] =>
        整数(0)
         [“ 4”] =>
        对象(stdClass)#2(1){
           [“ 1”] =>
          串(120) “AClZvXJ2t4wiEZ / VZ0i54m0Qtqpi2DTqkI1kaPMTRi4LnsQn0iR5K1xBlFpS1xmJV7ko4a6qx5RcTkp7CzVjwoy5UDSWZ5jOCPLGRcoQdDt + wOk46bdr0yA =”
         }
         [“ 5”] =>
        对象(stdClass)#3(17){
           [“ 1”] =>
          整数(82)
           [“ 2”] =>
          整数(0)
           [“ 3”] =>
          整数(0)
           [“ 4”] =>
          字符串(102)“ <div id =“ ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60”> </ div>”
           [“ 5”] =>
          字符串(102)“ <div id =“ ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60”> </ div>”
           [“ 6”] =>
          字符串(355)“ <div>多种格式<span id ='multi-format-tooltip'> </ span> </ div> <a class ='arc-url-link-省略号'target ='_空白'href =' https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/'title ='https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547- 00155d03330d /'> https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/ </a>“
           [“ 7”] =>
          字符串(1066)“ <div class ='arc-one-by-legend'>广告类型</ div> <div class ='arc-one-by-one-data'>多种格式<span id ='multi -format-tooltip'> </ span> </ div> <div class ='弧形一对一传奇'>目标URL </ div> <div class ='弧形一对一数据'> <a class ='arc-url-link-省略号'target ='_ blank'href ='https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/'title = 'https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/'>https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d / </a> </ div> <div class ='arc-one-by-one-legend'>发布者域</ div> <div class ='arc-one-by-one-data'> 4aynikam.ru </ div> <div class ='arc-one-by-one-data'> androidphone.su </ div> <div class ='arc-one-by-one-data'> androidphones.ru </ div> <div class ='arc-one-by-one-data'> full-repair.com </ div> <div class ='arc-one-by-one-data'> howgadget.com </ div> <div class ='arc-one-by-legend'>(检测到的广告客户<span id ='adx-  Advertiser-Tooltip'> </ span> </ div> <div class ='弧形一对一数据'> DNS商店</ div>“
           [“ 8”] =>
          字符串(98)“ <div> <span class ='arc-impression-score high'> HIGH </ span>印象</ div>”
           [“ 9”] =>
          对象(stdClass)#4(3){
             [“ 1”] =>
            字符串(4191)“ <a href="https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/" target="_blank"> <img onerror =” this.src = '数据:图片/ gif; base64,RCw“边界= 0 alt =“”> </a>”
             [“ 2”] =>
            字符串(4191)“ <a href="https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/" target="_blank"> <img onerror =” this.src = '数据:图片/ gif; base64,R1w“边框= 0 alt =“”> </a>”
             [“ 3”] =>
            字符串(4191)“ <a href="https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/" target="_blank"> <img onerror =” this.src = '数据:图片/ gif; base64,Rg“ border = 0 alt =”“> </a>”
           }
           [“ 10”] =>
          串(291)“https://adwords-displayads.googleusercontent.com/da/b/preview.js?client=asfe-arc-external-preview&obfuscatedCustomerId=5240877441&creativeId=288930210411&htmlParentId=ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60&sig=ACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ ”
           [“ 13”] =>
          串(311)“https://adwords-displayads.googleusercontent.com/da/b/preview.js?client=asfe-arc-external-preview&obfuscatedCustomerId=5240877441&creativeId=288930210411&htmlParentId=ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60&showVariations=true&sig=ACiVB_yMUjLwDjRO2T -0VAaVuRPt8uLHGQ“
           [“ 14”] =>
          字符串(69)“ https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/”
           [“ 15”] =>
          字符串(0)“”
           [“ 17”] =>
          字符串(0)“”
           [“ 18”] =>
          字符串(8)“ DNS商店”
           [“ 20”] =>
          字符串(20)“ adv-5594449542310820”
           [“ 21”] =>
          数组(4){
             [0] =>
            字符串(8)“ site1.ru”
             [1] =>
            字符串(9)“ site2.com”
             [2] =>
            字符串(9)“ site3.com”
             [3] =>
            字符串(8)“ site4.ru”
           }
         }
         [“ 6”] =>
        对象(stdClass)#5(3){
           [“ 5”] =>
          字符串(20)“ -6668648012302470727”
           [“ 7”] =>
          数组(1){
             [0] =>
            字符串(3)“ DNS”
           }
           [“ 9”] =>
          整数(0)
         }
         [“ 7”] =>
        整数(1)
         [“ 9”] =>
        对象(stdClass)#16(1){
           [“ 3”] =>
          数组(5){
             [0] =>
            对象(stdClass)#7(3){
               [“ 1”] =>
              对象(stdClass)#6(1){
                 [“ 1”] =>
                字符串(56)“ AClZvXLE9HJbFYq9TrAsXFgV4YkXsQt9lXp1xWjSB5aT5bFBpe4VNgo =”
               }
               [“ 2”] =>
              字符串(52)“互联网和电信”
               [“ 3”] =>
              字符串(217)“与电信相关的产品和服务,包括电缆和卫星服务以及Internet访问。”
             }
             [1] =>
            对象(stdClass)#9(3){
               [“ 1”] =>
              对象(stdClass)#8(1){
                 [“ 1”] =>
                字符串(56)“ AClZvXKrUJJ3kKBen2scP56BynOtGhf160i1F1LLmtBj3b / oh2dUFg8 =”
               }
               [“ 2”] =>
              字符串(35)“手机”
               [“ 3”] =>
              字符串(359)“手机和手机以及相关信息,例如技术规格和产品的比较分析。此类别不包括手机配件。”
             }
             [2] =>
            对象(stdClass)#11(3){
               [“ 1”] =>
              对象(stdClass)#10(1){
                 [“ 1”] =>
                字符串(56)“ AClZvXL4W + khZ4O9SJiu97cTbTs2 + 0Wecf1IVNju8ffd4ysIT9PJ7XY =”
               }
               [“ 2”] =>
              字符串(73)“手机及其配件”
               [“ 3”] =>
              字符串(283)“移动电话以及相关配件和硬件,例如手机套,自拍照,安全屏幕和充电器的外壳。”
             }
             [3] =>
            对象(stdClass)#13(3){
               [“ 1”] =>
              对象(stdClass)#12(1){
                 [“ 1”] =>
                字符串(56)“ AClZvXLQ3gPoVwjQbokDpB3 + nni4xURwH5 + YlnwkqjYtUowjhiKvk8Q =”
               }
               [“ 2”] =>
              字符串(45)“ PC和消费类电子产品”
               [“ 3”] =>
              字符串(142)“与计算机和消费类电子产品有关的产品,服务和信息。”
             }
             [4] =>
            对象(stdClass)#15(3){
               [“ 1”] =>
              对象(stdClass)#14(1){
                 [“ 1”] =>
                字符串(56)“ AClZvXLKYOGgOROaa32IUxU15jP89AtTM4dV24WKS + daMhqJMTNmeSY =”
               }
               [“ 2”] =>
              字符串(18)“电话”
               [“ 3”] =>
              字符串(181)“与电话和语音通信有关的产品,服务以及信息和其他资源。”
             }
           }
         }
         [“ 10”] =>
        对象(stdClass)#17(1){
           [“ 1”] =>
          字符串(76)“ AClZvXLdGOShgJo + BM3apOUAFzQkE41z1 / hiZhIY8eUlC7p7xXPm82P3dq7yXhbEI + tN / YHgdH4P”
         }
       }
     }
     [“ 2”] =>
    浮点(0)
     [“ 3”] =>
    字符串(5)“ 60609”
     [“ 4”] =>
    整数(1)
     [“ 5”] =>
    字符串(0)“”
     [“ 6”] =>
    串(168) “ClD3Z2nP2P ///// 1 / ff99fXV98nMyMrJz8rH9fHV883Hx8bMz83Oz8vOzv8A / V / + 9f33 / fX11ffJzMjKyc / Kx的/ Xx1fPNx8fGzM / NZS / Lzs7 // hABIWxUk293Pm + qOQAAAAAnMJaYSAFQAFoLCS8wxxaTatL1EAJgp7737gY =”
     [“ 7”] =>
    字符串(4)“ 3639”
     [“ 9”] =>
    整数(0)
   }
   [“ xsrf”] =>
  字符串(48)“ ABOvogKaRsVZECZZJU-gDWrOqoP0CSqf7Q:1535467886413”
 }


这是一个仅包含一个声明的示例响应。 了解什么是可能的。
对于其他查询,方法非常人性化。 一些例子:

  • getWebPropertyMetricsToken
  • getAdDisplayLanguages
  • getArcSettings
  • getAdNetworkApprovals
  • getPubControlsCapabilities

从理论上讲是可能的。 战斗?


好的,可以(理论上)解决他们的交流,但是所有这些都将毫无用处,并且如果您未在Google上授权,该理论将继续存在。

授权书 或如何在php + cURL上输入Google


再次,开发人员使用工具,退出帐户并查看数据交换。 我记不清了,因为我什么都不懂。 大量的JS,似乎某种计算是直接在客户端上完成的,结果被发送到服务器。 一般来说,一个人进入几乎是不可能的。

我们会进一步考虑。 一堆JS。 如果禁用JS? 但是Google会不会剥夺没有JS的用户的登录能力? 好吧,尝试不使用JS。 从外部看,授权窗口看起来已经很容易了。 和以前一样,首先输入登录名,然后在下一页输入密码。 最重要的是,就HTML而言,它也要容易得多! 具有通常的“输入”字段的通常的“ form”标签,尽管并非没有保护或系统隐藏字段。 但是隐藏字段不是问题,因为它们在输入中收到的内容将传递到下一个脚本。 因此事实证明是要登录Google。 和两步授权? 稍后再详细介绍。 首先,您需要确保可以拉出广告进行检查,否则就没有意义了。

在实践中理论可行吗?


Google已经进入-现在该在实践中测试揭密通信协议的理论了。 我必须细心地进行实验和观察,仔细观察并记录哪些用户操作导致了哪些查询,确定常见且变化中的查询元素,将从服务器接收到的长的难以理解的值与在下一个请求中返回的长值进行比较。 那是一片茂密的森林,随着时间的流逝,它变得更加清晰和透明。

要理解延续是有意义的,必须做些什么?

  1. 登录到中心
  2. 获取广告列表。
  3. 取得特定的广告(文字优先)。

粗略地说, 登录CPO是最简单的,只需单击链接即可。 原来如此。

详细资料
我们只需点击链接,我们就会得到答案(在这种情况下不使用)。 我们还需要请求并保存数字令牌以备将来使用。

在撰写本文时,AdSense有两个公共服务中心。 我将有条件地命名它们为新旧。

对于旧的CPO。

没有加载请求:

https://www.google.com/adsense/gwt-properties?pid=pub-8958890276790964&authuser=0&tpid=pub-8958890276790964&ov=3&hl=en

答案是:

 <meta name="gwt:property" content="usePropertyService=true"> <meta name="gwt:property" content="applicationType=ASFE3"> <meta name="gwt:property" content="syn.token=ABOvogJ1yQyL9pgHcGYM-J3OLj_9VSh31w:1535115071772"> <meta name="gwt:property" content="syn.token.pb=ABOvogKJ6-xmsNWK4Mbe_H5bT1xXhyj8SQ:1535115071772"> <meta name="gwt:property" content="syn.login=XXXXXX@gmail.com"> <meta name="gwt:property" content="syn.csi.backendUrl="> <meta name="gwt:property" content="syn.helpCenterUrl=//support.google.com/adsense/"> <meta name="gwt:property" content="syn.helpHost=//support.google.com"> <meta name="gwt:property" content="syn.helpCenterUri=/adsense"> <meta name="gwt:property" content="syn.newHelpHost=https://clients6.google.com"> <meta name="gwt:property" content="syn.newHelpCenterUri=/adsense"> <meta name="gwt:property" content="syn.helpCenterGaiaAuthDisabled=false"> <meta name="gwt:property" content="syn.billing3BaseUri=https://bpui0.google.com"> <meta name="gwt:property" content="syn.contextPath=/adsense"> <meta name="gwt:property" content="syn.userLanguage=en-US"> <meta name="gwt:property" content="syn.bruschettaContextPath=/adsense/new"> <meta name="gwt:property" content="userProfileImageUrl=https://lh5.googleusercontent.com/-v7nuoAI4eEQ/AAAAAAAAAAI/AAAAAAAAAAA/AT3-yjmKyg8/s96/photo.jpg"> <meta name="gwt:property" content="userDisplayName=" "> <meta name="gwt:property" content="userSettingsUrl=https://www.google.com/settings"> <meta name="gwt:property" content="googlePlusProfileUrl=https://plus.google.com/me"> <meta name="gwt:property" content="googlePrivacyUrl=http://www.google.com/intl/en_US/policies/privacy/"> <meta name="gwt:property" content="syn.features=562,465,612,604,616,618"> <meta name="gwt:property" content="analyticsHomePageUrl=https://www.google.com/analytics/web/"> <meta name="gwt:property" content="disableDebugIds=true"> <meta name="gwt:property" content="syn.pubControlsCapabilitiesLoadTimeout=5000"> <meta name="gwt:property" content="pid=pub-8958890276790964"> <meta name="gwt:property" content="tpid=pub-8958890276790964"> <meta name="gwt:property" content="syn.asfeGtmCampaignId=GTM-K7WZ"> 

我们需要第四行,即“ syn.token.pb”。 我们保留此值以进一步生成查询。

对于新的CPO。

没有加载请求:

https://www.google.com/ads-publisher-controls/acx/5/darc/loader?onearcClient=adsense&pc=ca-pub-8958890276790964&tpid=pub-8958890276790964&hl=en

答案是:

 (function() {function loadAsyncOrDefer() {var scriptElement = document.createElement('script'); scriptElement.src = 'https:\/\/ssl.gstatic.com\/ads-publisher-controls\/onearc_20180822-12_RC00\/darc\/arc_app.dart.js';scriptElement.type = 'application\/javascript';scriptElement.defer = true;scriptElement.nonce = window['acxCspNonce'];scriptElement = document.head.appendChild(scriptElement); if ('_resourceTimingBuffer' in window) {_resourceTimingBuffer.add(scriptElement.src);}};loadAsyncOrDefer();})();window['__darc_app_params'] = {'onearcClient': 'ADSENSE','hl': 'ru','pc': 'ca-pub-8958890276790964','tpid': 'pub-8958890276790964',};window['__app_metadata'] = {'token': 'ABiMD8TT9vzK99SFB7iaI0ssBySxT9jjrQ:1535116725529','pre': '\/ads-publisher-controls\/acx','scs': 'https:\/\/ssl.gstatic.com\/ads-publisher-controls\/onearc_20180822-12_RC00','oacf': '\x7b\x221\x22:\x5b5,25,22,8,27,32,43,44,45,48,49,5,25,22,8,27,32,43,44,45,48,49,29,46\x5d\x7d','hats': 'ibhswcm2x2iztju5i6jbbzlkma',}; 

我们需要的序列在这里:

'token': 'ABiMD8TT9vzK99SFB7iaI0ssBySxT9jjrQ:1535116725529'


获取列表是一项有趣的任务,因为您需要传递一系列设置-告诉我们我们想要接收的内容(广告类型,已选中/已新建/已阻止,广告数量等)。 每个请求还有一个数字XSRF令牌。 原来如此。 作为响应,传入了大量数据,其中甚至包含广告所在网站的缩略图。 并且,当然还有公告的链接。

详细资料
我的尝试草稿已保存下来,以找出哪个参数导致了什么。 我给它们加了一点点, 剪掉了所有的垫子和图释,然后贴在这里。 首先,旧CPO将有一个顺序,然后是新CPO。

接下来,我将调用方法的名称(仅用于新CPU,对于在请求正文中指示的旧方法)和json字符串,因为它们是信息的“载体”,其他所有内容(地址,标头,数字令牌,其他参数)-“包装器“,它们不是基本知识,我稍后会告诉大家。

对于旧的CPU(json请求参数变量):

 { "1":"ca-pub-8958890276790964", "2":{ "1":0, //  ,          "2":32, // -   "3":0, // 0 - , 1-  "4":{ "1":{"1":"-    "} //    }, "5":{ "1":"video" //   "2":1, //  ,     "3":1, //       "6":7, //      "16":[0], // 0 - ; 1 - ; 2 - .      . "17":0 //       } }, "3":"-3945261286198141534" //,    } 

解密是,我们提出请求,然后收到答案。

对于旧的CPO,您首先需要获得令牌-在请求广告之前再次提出请求:

 {"method":"getWebPropertyMetricsToken","params":"{\"1\":\"ca-pub-8958890276790964\"}","xsrf":"ABOvogKJ6-xmsNWK4Mbe_H5bT1xXhyj8SQ:1535115071772"} 

答案是:

 {"result":{"1":{"1":{"1":"AClZvXKte+4mEwsFB7kw20LrbWQ6jOMxmK8j4At4Vxqc7w+5dDDYWIx2k1ldCvvGbAT59UClLSkQty6zyZZQSmgxKvpKhq22bKRfGy8ywt0B5L8WE53vo+YtI8ixM8Xe0RPixTjPtOLQA8sCZod+hvHxqU5Depi3I9XUV6JMn8uCOg67m+5oe5TT1L0OytnUBDIsjAaQ+kcldN23yGoppKKCs2Zf5XI6i7nk5QHehS8wvsDlugvkKSU3fUo3J+ZHJvoUXyCGLP3lP9Gh+6fOMir/SLrOJx8udRbtjTJhLsvXTXUN2QbjcEfFFAIaWfgMr5euHtYwYYWuMoI5ofZTc9L8sCY5pA0Q/CWyZ6QLH85XI70vxH6cBZtsnfrPLRh18cxSxFgzXuAwPHW8+CueCznqiHcY7gOhxQc2YWmSgwMIP9Cpgr089dWoB58wulcK0g+EqnTJiQdI9MMUj4zzLpu5DYja5ftP7lF3jeCSuKT9q70B9OqMDvlGlruZd2hhHe3k5S+LoyWo/4WZDUTvWpCMmnPzCP3R4OIQnrhS0s5ffOVxjyNHrXJXtrNhppap3BY4iByIn1cowMfVFfx3hNep0JW59db9fVuXKaSy/mqHZKC1ToRM/UyCoSZ9ZjY/Ot091ptURLRYoTFal5TBbMKISgxn5UCz4vSoxVe1fC64dwXHatSzCCg9AjJOpKR4p/9smxOaKg73pmMHsEY98I6TJhvaeJ9o6lcHsG8PZnB6xNS4ZJHBtN1baHkrCHOfqaepMVyRCF2kPNhr9SgujjTTbiKGMUO3UVamOQQ5/EckTgFMr0PIda7PPw7op8qFEhxZmkoo9KgERcYLGHxzGePjfo0IiNbf7k50lgDipwk5ag3CI0tw3CtDicQn6isHwKOmlfSctrEGv/Fjlmcgjhl1sTAL/rTWxDCABKN7/OhdysBAOq0j6viFgzjM8WI0ZuYPIVIm19CQ+YGcOx77oiyxev+3sAj7uSJoYFslmgiZV4jrF5P+b+U/5fknRf2Ho8plAUh4AHweXMeaPFYZAYooe6jC79EzgizqXvx1H/HrKKQcaXdDZ1ivoOM/7DtzJbawzO7ALUnHkqR1ZYmw3+3E/pmsDXedYgzERWYWvJltS+P46iWYOS43SUVw+whDWZnjJOwVOFFLDWcg4ykfzNmbq4B/vUibrV1dCiRpTIXSP92xk1I8MCfQGiptqo5MiKttqJ9Orj7nrGXEDz5pJBTTem919nz5rNIjI/sus3GZ+G4rBE+9i1sJN0jxszvpRD2AKsl1KSOrPCuOBhpNbD2HnFgQd+EUw8CpH2MLZlrZ8l3cqzDVc5aeCQ1eiUKlONlZpIxZi5wE5HyKZRxC8ljtX5xe+Fpg8R8/yDarvAkjeb0yKzN/e893nEVz3CmF68pphNp71kjJtvwBS2JtSWhFc81Ys51GEw\u003d\u003d"}}},"xsrf":"ABOvogJLbcTkcBxU_TCJddIrW4L-mVwPcw:1535115072920"} 

我们需要请求此巨大的令牌(“ 1”:“ AClZ ...”)。

请求广告:

 {"method":"searchArcApprovals","params":"{"1":"ca-pub-8958890276790964","2":{"1":0,"2":24,"3":0,"4":{"1":{"1":"AClZvXKte+4mEwsFB7kw20LrbWQ6jOMxmK8j4At4Vxqc7w+5dDDYWIx2k1ldCvvGbAT59UClLSkQty6zyZZQSmgxKvpKhq22bKRfGy8ywt0B5L8WE53vo+YtI8ixM8Xe0RPixTjPtOLQA8sCZod+hvHxqU5Depi3I9XUV6JMn8uCOg67m+5oe5TT1L0OytnUBDIsjAaQ+kcldN23yGoppKKCs2Zf5XI6i7nk5QHehS8wvsDlugvkKSU3fUo3J+ZHJvoUXyCGLP3lP9Gh+6fOMir/SLrOJx8udRbtjTJhLsvXTXUN2QbjcEfFFAIaWfgMr5euHtYwYYWuMoI5ofZTc9L8sCY5pA0Q/CWyZ6QLH85XI70vxH6cBZtsnfrPLRh18cxSxFgzXuAwPHW8+CueCznqiHcY7gOhxQc2YWmSgwMIP9Cpgr089dWoB58wulcK0g+EqnTJiQdI9MMUj4zzLpu5DYja5ftP7lF3jeCSuKT9q70B9OqMDvlGlruZd2hhHe3k5S+LoyWo/4WZDUTvWpCMmnPzCP3R4OIQnrhS0s5ffOVxjyNHrXJXtrNhppap3BY4iByIn1cowMfVFfx3hNep0JW59db9fVuXKaSy/mqHZKC1ToRM/UyCoSZ9ZjY/Ot091ptURLRYoTFal5TBbMKISgxn5UCz4vSoxVe1fC64dwXHatSzCCg9AjJOpKR4p/9smxOaKg73pmMHsEY98I6TJhvaeJ9o6lcHsG8PZnB6xNS4ZJHBtN1baHkrCHOfqaepMVyRCF2kPNhr9SgujjTTbiKGMUO3UVamOQQ5/EckTgFMr0PIda7PPw7op8qFEhxZmkoo9KgERcYLGHxzGePjfo0IiNbf7k50lgDipwk5ag3CI0tw3CtDicQn6isHwKOmlfSctrEGv/Fjlmcgjhl1sTAL/rTWxDCABKN7/OhdysBAOq0j6viFgzjM8WI0ZuYPIVIm19CQ+YGcOx77oiyxev+3sAj7uSJoYFslmgiZV4jrF5P+b+U/5fknRf2Ho8plAUh4AHweXMeaPFYZAYooe6jC79EzgizqXvx1H/HrKKQcaXdDZ1ivoOM/7DtzJbawzO7ALUnHkqR1ZYmw3+3E/pmsDXedYgzERWYWvJltS+P46iWYOS43SUVw+whDWZnjJOwVOFFLDWcg4ykfzNmbq4B/vUibrV1dCiRpTIXSP92xk1I8MCfQGiptqo5MiKttqJ9Orj7nrGXEDz5pJBTTem919nz5rNIjI/sus3GZ+G4rBE+9i1sJN0jxszvpRD2AKsl1KSOrPCuOBhpNbD2HnFgQd+EUw8CpH2MLZlrZ8l3cqzDVc5aeCQ1eiUKlONlZpIxZi5wE5HyKZRxC8ljtX5xe+Fpg8R8/yDarvAkjeb0yKzN/e893nEVz3CmF68pphNp71kjJtvwBS2JtSWhFc81Ys51GEw\u003d\u003d"}}},"3":""}","xsrf":"ABOvogI3FCm29t4pdIded8L-Q98R0Voy-Q:1535121289188"} 

我正在翻译params变量的第2节:
Google, , :
("1":0),
24 ("2":24),
("3":0),
: AClZvX....


可以省略许多参数,它们采用默认值:

  • 广告类型:全部;
  • 期限:全部可用;
  • 预计的锁定:否;
  • 只显示未经验证的:否。

根据请求的广告数量,数十或数百千字节会作为响应。 最困难的是文本中“伸出”的图形(数据:image / gif; base64 ....)。 如果没有未验证的答案,那么答案很简单:

 {"result":{"4":1,"5":"","8":"0","9":0},"xsrf":"ABOvogLWqmyC7KH1zfvmPxk-Y69-Jzj5XQ:1535115074392"} 

如果有广告,它们将包含在此处:结果-> {5}。

对于新的CPO:

 { "1":"ca-pub-8958890276790964", "2":{ "1":10, //  ,          "2":7, // -   "3":11, //  - 10;  - 1;  - 11; "5":{ "6":3 //      "7":3534 //    "14":"en" //  "16":[0] // 0 - ; 1 - ; 2 - . "18":"dfd.com" //   "24":"video" //   }, "7":""}, //          "3":"-2876348936240321457", //          "5":true //    . . } 

无需完成初步请求,您可以立即请求广告。
SearchApprovals(这是一种方法)

 {"1":"ca-pub-8958890276790964","2":{"2":100,"3":11,"5":{"16":[0]},"7":""},"5":true} 

Google, , :
100 ("2":100),
("3":11),
("5":{"16":[0]},
("7":"")


可选参数和默认值:

  • 第一个请求的公告的序列号:0;
  • 期限:全部可用;

作为响应,我们得到的结果与旧CPO几乎相同。 它只有一个词不同-数据容器的名称。 旧的是“结果”,新的是“默认”。


制作特定的广告很简单,只需获取上一个答案的链接并下载广告即可。 这里没有保护,每个人都可以免费使用。

详细资料
链接到广告。 我们将在上一个答案中进行查找,在该答案中,我们收到了许多千字节的文本以响应广告请求。

为了避免出现太多难以理解的代码,我回答了一个广告的请求(即使这样,它也被无情地裁剪了,是原来的十倍,现在只剩下最重要的东西了):

 {"result":{"1":[{"1":0,"3":0,"4":{"1":"AClZvXJ2t4wiEZ/VZ0i54m0Qtqpi2DTqkI1kaPMTRi4LnsQn0iR5K1xBlFpS1xmJV7ko4a6qx5RcTkp7CzVjwoy5UDSWZ5jOCPLGRcoQdDt+wOk46bdr0yA\u003d"},"5":{"1":82,"2":0,"3":0,"4":"\u00GQ","13":"https://adwords-displayads.googleusercontent.com/da/b/preview.js?client\u003dasfe-arc-external-preview\u0026obfuscatedCustomerId\u003d5240877441\u0026creativeId\u003d288930210411\u0026htmlParentId\u003dad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60\u0026showVariations\u003dtrue\u0026sig\u003dACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ","14":"https://www.dns-shop.ru/actions/c09a061b-a048-11e8-9547-00155d03330d/","15":"","17":"","18":"","20":"adv-5594449542310820","21":["domain1.com","domain2.com"]},"6":{"5":"-6668648012302470727","9":0},"7":1,"9":{"3":[{"1":{"1":"AClZvXLE9HJbFYq9TrAsXFgV4YkXsQt9lXp1xWjSB5aT5bFBpe4VNgo\u003d"},"2":"\u041/YHgdH4P"}}],"2":0.0,"3":"59917","4":1,"5":"","6":"ClD3Z2nP2P/////1/ff9oPjm7gU\u003d","7":"5751","9":0},"xsrf":"ABOvogJJJuNM1d0i22yN48ibBAY8vpvC_A:1535125743731"} 

您可以从参数{13}获得指向广告的链接:

https://adwords-displayads.googleusercontent.com/da/b/preview.js?client=asfe-arc-external-preview&obfuscatedCustomerId=5240877441&creativeId=288930210411&htmlParentId=ad-parent-id-6A2DE3D206234468F53C743C0EEACD67A59E6C5B62C0371F770419826258CB1AD9591F60&showVariations=true&sig=ACiVB_yMUjLwDjRO2T-0VAaVuRPt8uLHGQ

链接将保留一段时间(几天,甚至几周),任何人都可以通过它获得公告。 大约有100-150 KB,在最底端(不仅是底部),您可以找到广告文字的摘录。

此外,这是一个重要参数-这是广告的内部标识符,我们将继续使用它进行管理(阻止/取消阻止广告,阻止/取消阻止拧开该广告的AdWords帐户,请求展示统计信息,将标记设置为“已选中”,发送有关违反规则的消息) 。 它存储在这里:
结果-> {1}-> {4}-> {1}。

看起来像这样:

AClZvXJ2t4wiEZ/VZ0i54m0Qtqpi2DTqkI1kaPMTRi4LnsQn0iR5K1xBlFpS1xmJV7ko4a6qx5RcTkp7CzVjwoy5UDSWZ5jOCPLGRcoQdDt+wOk46bdr0yA=

它的长度为120个字符(极少数例外)。

此数据流中有很多信息:

  • 广告类型。
  • 目标网址
  • 拧开它的域。
  • 关于广告商的信息(名称(如果有)和标识符)。
  • 印象数的定性特征,例如“高”。
  • 数据形式的三个着陆页缩略图:图像。
  • 广告所属的类别,例如,电话。

获得了结果-它有助于自动化。 接下来,功能的顺序就位了,因为工作原型很糟糕,我只想快速了解过程是否可以自动化。 第一个版本提供给人们,错误的完成和纠正开始了。 第一个问题是“两阶段”无法登录。

两步授权


如果要检查关闭JS时的外观,可以看到许多授权选项:SMS密码,一张纸上的一次性密码,通过应用程序...
自动化每个选项,使每个人都感到舒适-您会发疯。

开发人员救援


当在Chrome中没有JS时,我查看了两阶段授权机制,我看到了对另一种方法的选择的参考,我对此深深着迷。 默认情况下,无论选择哪种方法,总会有一个选项转到该选择并选择SMS。 这是真正的救赎。 当然,我必须检查默认选择的方法,如果使用的是“错误”方法,请“按”更改按钮,然后选择“通过短信发送一次密码”。

对于授权本身,我只是将表单中的中间数据保存到了文件(所有隐藏字段都属于同一堆)和一次性密码输入表单中。 就是说,“两阶段”也可以进入。

完成创建过程


主要任务已完成-任何人都可以安装并使用自动化解决方案来定期过滤其网站上的广告。

接下来是改进,改进,缺陷纠正...
...由用户和独立确定,对外部设计进行了完善(对于作者而言,直觉几乎是其他所有人都无法理解的)。
还完成了各种功能和过滤器,并将其添加到搜索不良广告中。 例如,自动检测西里尔字母和拉丁字母的哈希。 普通的广告商不会制作这样的广告,但是有时会出现混合使用一个拉丁字符的俄语单词的错误(还会考虑过滤器中的常见错误)。

为方便而添加的附件:

  • 阻止的广告商列表。
  • 阻止域列表。
  • 收入标签。
  • AdSense连结。

被阻止的广告客户列表提供了观看和修改的机会,并且比常规界面更方便(但外观并不漂亮)! 此外,还可以“批量”解锁,这是常规AdSense所没有的。

被阻止域的列表与先前的列表相似。

能够与AdX一起使用(通过AdX最近移动到的AdManager)。

有很多改进,我认为最有趣的是上面列出的。


发送请求和接收结果的功能


以前,我以json字符串的形式写过有关请求的信息,但答应以后再详细介绍。

当所有这些工作都由新的CPO完成时,还没有,因此所有工作都是在旧的CPO上完成的,我们将从它开始。

与旧CPO的沟通


借助观察,可以发现请求的主要交换到达一个地址:

  https://www.google.com/adsense/gp/creativeReview?ov=3&pid=pub-8958890276790964&authuser=0&tpid=pub-8958890276790964(&hl=zh-CN) 


括号中并不总是一个参数,它指示答案的语言;它几乎可以应用于所有Google产品。 这很重要,因为我到处都使用英语,并且该软件可以识别一些参数,等待英语回答。

除了地址外,还有一种传输后数据的标准格式(在开发人员的工具中,它们可以在“请求有效载荷”部分中看到)-这是一个带有方法,params和xsrf变量的json字符串:

 {"method":"getArcSettings","params":"{\"1\":[\"ca-pub-8958890276790964\"]}","xsrf":"ABOvogJlvXKkBQUbPYEsM04recgCsukFMg:1535467881599"} 

方法-这里的一切似乎都很清楚。
params-取决于方法,它自己的标准格式用于传输json字符串。
xsrf-上面描述了我们用于请求的数字令牌的初始接收,并且在响应中,我们收到了下一个请求的新XSRF令牌。

答案也来自结果(请求的信息)和xsrf部分的json字符串形式:

 {"result":{"1":[{"1":"ca-pub-8958890276790964","2":{"1":"ca-pub-8958890276790964","2":0},"3":{"1":"ca-pub-8958890276790964","2":0}}]},"xsrf":"ABOvogIH7wJjD8t1xmuu8WbGplQowqjjJA:1535467883406"} 

php功能代码
 function creative_review($method, $params) { $xsrftoken = file_get_contents($GLOBALS['xsrftoken_file']); $creativeReview = new stdClass(); //to make json request string $creativeReview->method = $method; $creativeReview->params = $params; $creativeReview->xsrf = $xsrftoken; $creativeReview_post_request = json_encode($creativeReview); unset($creativeReview); $result = curl_post($GLOBALS['creative_review_req_string'], $creativeReview_post_request, $GLOBALS['arc_tab_req_string'], $GLOBALS['myheaders']); $result = json_decode($result); // decode result string if ($result->xsrf) file_put_contents($GLOBALS['xsrftoken_file'], $result->xsrf); // Renew standard XSRF token return $result; } 

它自己的帖子请求功能是curl_post($ url,$ postfields,$ referer,$ myheaders)。

命名变量是为了清楚什么是什么。
几乎所有请求中的$ myheaders都包含以下两个标头:

 accept-language:en-US; q = 1,en; q = 0.4
内容类型:应用程序/ javascript;字符集= utf-8


$ GLOBALS ['creative_review_req_string']:

 https://www.google.com/adsense/gp/creativeReview?ov=3&pid=pub-8958890276790964&authuser=0&tpid=pub-8958890276790964&hl=en 


, .

$GLOBALS['arc_tab_req_string']:

 https://www.google.com/adsense/new/u/0/pub-8958890276790964/main/allowAndBlockAds?webPropertyCode=ca-pub-8958890276790964&tab=arcTab 

referer , .

与新的CPO沟通


这里的请求地址更为复杂-它会更改。只有最初的共同部分。方案如下:

通用部分+方法+'?' + GET参数+ rpcTrackingId = <URL编码中以前的GET参数的重复> +':'+ <在...内使用相同方法的请求的序列号,通常,直到用户刷新页面>。

https://www.google.com/ads-publisher-controls/acx/5/proto/creativereview/GetArcSettings?hl=ru&pc=ca-pub-8958890276790964&onearcClient=adsense&rpcTrackingId=%2Fads-publisher-controls%2Facx%2F5%2Fproto%2Fcreativereview%2FGetArcSettings%3Fhl%3Dru%26pc%3Dca-pub-8958890276790964%26onearcClient%3Dadsense%3A1

此处的XSRF令牌在标头'x-framework-xsrf-token'中传递,并且可重用,因此,它不会出现在答案中,您不需要不断更新。

php功能代码
 function creative_review_new($method, $params) { if (!isset($GLOBALS['xsrftoken_new'])) $GLOBALS['xsrftoken_new'] = file_get_contents($GLOBALS['temp_folder'] . 'xsrftoken_new.txt'); $myheaders = $GLOBALS['myheaders_new']; $myheaders[] = 'x-framework-xsrf-token:' . $GLOBALS['xsrftoken_new']; $query['pc'] = 'ca-' . $GLOBALS['pub_id']; $query['onearcClient'] = 'adsense'; $query['hl'] = 'en_US'; foreach ($query as $index => $value) $rpc[] = $index . '=' . $value; if(!isset($GLOBALS[$method_count])) { $GLOBALS[$method_count]=1; } else { $GLOBALS[$method_count]++; } $append = ':'.$GLOBALS[$method_count]; $query['rpcTrackingId'] = $GLOBALS['creative_review_new_string'] . $method . '?' . implode('&', $rpc) . $append; $query = http_build_query($query); $url = 'https://www.google.com' . $GLOBALS['creative_review_new_string'] . $method . '?' . $query; $result = curl_post($url, $params, $GLOBALS['new_arc_tab_req_string'], $myheaders); if (mb_strpos($result, 'Error 400 (Not Found)', 0, 'UTF-8') !== false) { return '-32000 XSRF token validation'; } $list = explode("\n", $result, 2); $result = $list[1]; $result = json_decode($result); // decode result string if (@$result->default->{5}) file_put_contents($GLOBALS['temp_folder'] . 'some_digi_token.txt', $result->default->{5}); // Renew token if (@$result->default->{6}) file_put_contents($GLOBALS['temp_folder'] . 'some_long_token.txt', $result->default->{6}); // Renew token 

post- — curl_post($url, $postfields, $referer, $myheaders).

$myheaders (javascript → json):

 accept-language:en-US;q=1,en;q=0.4
content-type:application/json; charset=UTF-8 


$GLOBALS['creative_review_new_string']:

 /ads-publisher-controls/acx/5/proto/creativereview/ 
.

$GLOBALS['new_arc_tab_req_string']:

 https://www.google.com/adsense/new/u/0/pub-8958890276790964/arc/ca-pub-8958890276790964 
referer , .

. «» . (« 10 , 30-»). , .


域列表查询和管理功能


它与旧CPO的沟通功能几乎相同,仅在上诉地址上有所不同。

php功能代码
 function blocking_controls($method, $params) { $xsrftoken = file_get_contents($GLOBALS['xsrftoken_file']); $creativeReview = new stdClass(); //to make json request string $creativeReview->method = $method; $creativeReview->params = $params; $creativeReview->xsrf = $xsrftoken; $creativeReview_post_request = json_encode($creativeReview); unset($creativeReview); $result = curl_post($GLOBALS['blocking_controls_req_string'], $creativeReview_post_request, $GLOBALS['arc_tab_req_string'], $GLOBALS['myheaders']); $result = json_decode($result); // decode result string if ($result->xsrf) file_put_contents($GLOBALS['xsrftoken_file'], $result->xsrf); // Renew standard XSRF token return $result; } 

$GLOBALS['blocking_controls_req_string']:
 https://www.google.com/adsense/gp/blockingControls?ov=3&pid=pub-8958890276790964&authuser=0&tpid=pub-8958890276790964 
.

XSRF令牌以文件形式保存到磁盘中,要求阻止/取消阻止广告,AdWords帐户和其他操作的请求必须直接通过控制面板进行,而无需请求新的令牌。

处理收到的回复


数据以json字符串的形式(上述三个函数接收的答案)和JS代码(请求的声明)的形式出现,其中以十六进制编码(\ x <两个字符字符的字符代码>)对一系列字符进行“加密”

摘录自上述广告:
目标\ x3d_blank标题\ x3d \ x22 \ x22 \ x3e \ x3cspan \ x3e购买小米Redmi S2并获得Redmi 5 \ x3cbr \ x3e作为礼物。从8月24日到8月26日。\ x3cbr \ x3e了解更多信息。

对于json,php中有一个函数可以产生至少一个对象,至少一个数组。
对于网络中某处的“ Kosoiks”,我发现了一个小功能,可以将数据转换为人类形式。

php功能代码
 function hex_repl($html) { $i = 256; while ($i >= 0) { $hex = dechex($i); $html = str_ireplace("\x$hex", chr($i), $html); $i--; } return $html; } 

解密结果:
target = _blank title =“”> <span>购买小米Redmi S2并获得Redmi 5 <br>作为礼物。从8月24日到8月26日。<br>有关该网站的更多信息。

广告识别


文字我从他们开始。它们更为重要,事实证明,它们使一切变得容易得多。只有两种类型:旧的有一个标题(几乎消失了)和新的有两个标题。

公告已经以HTML代码的形式出现,但是除了公告之外,我们收到的响应还包含许多我们不需要的数据-Javascript代码(甚至还没有纳入该代码的本质)。

识别最终归结为以下步骤:

  • 修剪“重大开始”,仅保留包含公告文本的“尾巴”;
  • 使用DOMDocument类创建对象
  • 在循环中搜索所需的值:标题,广告文字,链接文字。

标题,文本和链接包含某些类,识别器“紧紧抓住”它们。

文字广告的处理位置和功能是什么
rhtitleline1 — 1;
rhtitleline2 — 2;
rhtitle — ( );
rhbody — ;
rhurl — URL.

 function text_ad($html) { $list = explode('</head>', $html); $ad_html = array_pop($list); unset($list, $html); $dom = new DOMDocument('1.0', 'UTF-8'); @$dom->loadHTML($ad_html); unset($ad_html); foreach ($dom->getElementsByTagName('a') as $a_node) { if (stripos($a_node->getAttribute('class'), 'rhtitleline1') !== false) { $ad['header1'] = $a_node->textContent; continue; } if (stripos($a_node->getAttribute('class'), 'rhtitleline2') !== false) { $ad['header2'] = $a_node->textContent; continue; } if (stripos($a_node->getAttribute('class'), 'rhbody') !== false) { $ad['body'] = $a_node->textContent; continue; } //Old ads (with just 1 header) support if (stripos($a_node->getAttribute('class'), 'rhtitle ') !== false || stripos($a_node->getAttribute('class'), 'rhtitle"') !== false) { $ad['header1'] = $a_node->textContent; continue; } if (stripos($a_node->getAttribute('class'), 'rhurl ') !== false || stripos($a_node->getAttribute('class'), 'rhurl"') !== false) { $ad['displayUrl'] = $a_node->textContent; continue; } } $fulltext = implode(' ', $ad); $ad['fulltext'] = $fulltext; if (!isset($GLOBALS['set_gl']['utf8_off'])) foreach ($ad as $index => $value) $ad[$index] = utf8_decode($value); return $ad; } 

— . .

$fulltext — .

utf8_decode . DOMDocument . .


图形他们仅检查目标URL。无法识别图片,也无法保存图片以供检查(因为如果需要,也可以在CPO中查看图片)。我认为这里没有理由重新发明轮子(很可能是曲线,没人需要它)。

多媒体用这个通用名称隐藏了许多不同的广告:

  • 多格式。
  • 媒体(Rich Media)。
  • 自定义模板(HTML5)。

对于多格式3,根据公告类型创建了识别功能。
对于媒体,已创建2个功能。

对于HTML5,已创建3个功能。

筛选


识别出广告后,便开始按照不同标准确定是否令人反感的过程(包括所有过滤器,有些可自定义):

  • 在域“ blogspot.com”中的存在。
  • 西里尔字母和拉丁字母混合出现的单词。
  • “不良”字词的存在(“不良”字词列表可由用户自定义)。
  • 将用户重定向到原始域以外的其他域。

工作报告


根据过滤结果,编制进度报告。
它以其列中每个过滤器的广告列表以及“好”广告的图表的形式构建,报告中包含以下信息:

  • 广告商的标识符和文本名称(如果有)。
  • 阻止的原因(仅用于阻止)。
  • 标题和广告文字。
  • 目标网址和显示网址。
  • 验证日期和时间。
  • 成功获得广告的观看总数(仅针对已屏蔽)。
  • 链接到阻止/取消阻止广告和广告客户帐户。
  • 链接以阻止目标URL或域。
  • 链接以对该公告提出投诉(在新的CPO中可用)。
  • 用于将广告的不同部分添加到白名单的链接。
  • 链接以从报告中删除广告。

外观基于旧的CPO(并且是设计时唯一的CPO)。


可单击


当从移动设备上查看时,每一列都占据屏幕的整个宽度,并且出现按钮以选择要查看的列。

关于安全的一点


您可以有限地访问控制面板(从一个地方进行控制)或“全球”访问,以便可以在任何地方进行控制。

第一种情况很安全-如果没有坐在工作中的PC上,没人适合。在第二种情况下,必须将软件所在的地址保密,并提供用于进入控制面板的密码。为防止您的秘密地址在跟踪到第三方网站(从广告)的链接时“泄露”,请执行以下操作:

  • 每个外部链接都有这样的属性
     rel =“ noreferrer” 
  • 要仅在头部的同一域内传递的引荐来源是一个标记:
     <meta name =“ referrer” content =“ same-origin”> 
  • 所有外部链接都通过引荐来源网址清洁器:
     http://nullrefer.com/?http://free.da ... 

自动化结果


每周7天,每天24小时,每隔几分钟就检查一次新出现在CPO公告中的内容。结果,令人反感的(根据用户指定的标准)被发送到“阻止”部分。我从不曾数过它,但是在大约100个被阻止的棋子中,有90-95个是有充分理由被锁定的。平均而言,在一百种“干净”的软件中,少于一个“坏”的软件。

我怎么称呼“不良广告”?导致移动订阅的所有内容,提供“下载”的所有内容,仅下载或“下载文件”而没有任何细节,提供“观看视频”的所有内容,又没有任何详细信息,所有导致错误位置的内容如公告标题和文字所示,在法律禁止的国家/地区提及赌场的任何内容。

结果,我几乎没有花时间搜索和屏蔽广告,并且通过我的网站分发的赌场广告和各种杂货店的数量已经减少了十倍(不幸的是,问题尚未得到完全解决-我不会停止考虑这一点)。如果没有MegaFon卡

,以潜意识订阅的形式进行的盗窃更少了!

MegaFon卡从哪里来?
« » « » « »:
«» , . , .

但是,并非我们网站的所有用户都具有MegaFoncard和其他PPSOS的类似物。
因此,先生们,请您自己保护访客免受不必要的费用!

开源项目在GitHub上

Source: https://habr.com/ru/post/zh-CN422379/


All Articles