300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 爬虫技术之食物链顶端——逆向

爬虫技术之食物链顶端——逆向

时间:2019-10-05 20:04:47

相关推荐

爬虫技术之食物链顶端——逆向

原文地址

一、爬虫引言

距离最近一次博客的更新,已经快半年了。这么久一直没写博客,是因为最近半年在跟几个小伙伴打造一个tiktok的数据平台,乐不思蜀。今天抽空特意记录分享一下我认为的爬虫技术的顶端——逆向。这里的逆向主要是指app逆向,这里的app逆向又主要是指安卓的。至于原因,咱们待会聊。

再次回归到爬虫技术,一方面是因为,在这信息爆炸的时代,信息的抽取、分析和总结是一项非常重要的技能。另一方面,虽然之前一直热衷于dnn和算法领域的探索,后来才意识到,神经网络和算法的落地,一定得基于(大)数据,同时。。。现在算法(尤其是dnn领域)的落地面还是非常有限的(不知道大家认同不认同)。所以,回归到爬虫技术、大数据分析技术,才是当下的大势所趋。

Long long years ago,当时的爬虫几乎没有封禁措施,基本就是随意抓;接着开始出现服务端验证(开销大,极少数采用)、客户端验证(js加密)、客服端双向验证,这些呢,基本就是伪造参数,最主要的技术就是js逆向;接着又出现了诸如滑块验证、点击验证、加减乘除验证,甚至12306和谷歌这些变态级的验证,都随着dnn技术的普及而变得脆弱;再到后来因为智能机的普及,出现了app端的数据采集,app数据采集的话,不加密还好,加密的话基本上就只能做逆向了。是吧。

二、反爬技术攻坚

Part1

对于js逆向破解,我接触过有腾讯新闻(当时最简单的)、淘宝(当时算一般的)、拼夕夕(当时最难的)的。腾讯新闻的js简单到什么程度,直接断点就能找到,而且是固定加密字符无expire失效。怎么说,就是你甚至可以自己伪造加密参数都能通过;淘宝的js加密经过几道工序的断点调试,也能找到方法,无非就是对加密参数的处理需要注意转义字符;

淘宝sign加密

而拼多多的js加密算是比较难的,(当时)它本身是调用了一个网上的包,然后自己加工了一大段加密流程,并且分布在几个js文件里面,还做了混淆(虽然这是常规操作,但是非常影响调试),整个破解花了一周多才over,结果不到3个月,拼多多的js加密再次update(内心极度复杂中。。。)

拼多多anti加密

​​​​​

PS:现在的拼多多加密都这么长了???一般这么长的加密,要么会有请求次数限制,要么就有时效限制。。。

js的难点就在于你的耐心。

Part2

接着聊聊滑块和点击系列。

这种是滑块中最简单的了吧,这个一般就三步:1、获取原图(如果没有,则直接第二步,但是会需要一些图像处理的能力);2、缺位计算。说白了就是像素比对(没原图的需要做简单图像处理,这里就不细聊了)。3、距离计算。

Part3

素材来自:验证码反爬那些事_zacharyzlj的博客-CSDN博客

这种是逻辑验证码中最简单的,先撇开js可破解的情况不说,这部分验证码都可以通过dnn技术解决。比如以上两个,第一个可以做字符切割+cnn分类,直接带走;第二个可以字符切割+rnn直接带走。有人说,这太简单了,我字符比对都能做出来,有没有难的!来,看下以下的:

怎么搞,切都不一定切得出来是吧。那咱们也升级一下,opencv+crnn直接带走。

在看些更难的:

第二个是企查查的验证码。第一个还好是吧,做个边缘检测,再加个cnn分类,很简单。第二个,难点其实很多,比如边缘检测在这个图是比较难的,因为背景也是黑白的,字体也存在不同颜色的深浅交替。检测出来是肯定不准的(当然你可以自定义阈值做限制);再比如字体倾斜,放到cnn模型里识别准确率非常低,基本是错的;在加上还有点击顺序,难上加难。怎么搞?一个物体检测模型tiny_yolo(yolo太大,没必要)+一个字体角度计算模型+一个分类模型(也可以直接放在yolo进行,但是单独拎出来是为了减小yolo的模型大小,极大极大极大减少yolo训练时间)。

看到这,观众盆友可能会说:你说的都是思路,你倒是给个源码我去试试。

行,我放一个项目地址吧!

哈哈哈,你想太多

Part4

app逆向。为啥说app逆向是食物链顶端:首先,app的封禁要弱得多得多,这个是毋庸置疑的;其次,智能机的普及使得大多数api转向m端,web端基本没有(比如抖音、拼多多);最后,js你可以用你的耐心磨出来破解(别说什么vm加密。。。),验证码基本都可以用dnn大法解决,而app的逆向要解决的问题太多太多了,比如混淆、去壳、调用追踪、java层hook、native层hook、so层hook、反反hook技术,用xp你至少要懂java和android,还搞不定so和native,用hook你至少需要会python、java、js,如果是搞ios的。。。你还得会汇编、c和oc,这也是为什么我们先不讨论ios逆向,因为容易掉发(哈哈哈,一个砸壳砸出来个几百个h文件。。。)。

这部分,主要以海外版抖音(tiktok)来做交流内容,因为抖音象征着当前世界最强实力,海外版抖音还夹杂着出海的难题,比国内的抖音更有挑战(后面你会慢慢觉得为啥这么说的,hook工具是frida)!

1、设备注册

你可知道抖音的设备号,市场上是多少钱(一个)?安卓的设备,简单的涉及到**id,复杂的带有谷歌服务的设计**id,谷歌唯一id(光是谷歌这个id一般人就搞不定,因为它不止要解决抖音的问题还需要解决google service的问题)。因为某些原因,关键代码就不放了,在这里提一下思路。

Hook——JS

Hook——python

众所周知,抖音的的个性化推荐是十分强大的,因为它强大的数据收集能力和分析能力,你拆过抖音的你就会发现,每一个视频、每一个点赞、每一个评论。。。whatever,抖音都会给你记下来(什么log、xlog、monitor是吧[手动滑鸡]),然后这些数据就是在这个函数收集起来的。所以,这部分将是分析抖音数据的关键。JS部分代码就是做了一个数据的劫持回发,python部分就是对数据做一个修改再发回的过程。所以Frida的工作流程就是两步:js劫持,python修改。这里的设备注册,主要是修改了一些影响设备注册的参数,然后继续请求抖音的api,以注册新的设备号(新的设备号就是new_user=1是吧,玩过的都应该知道)。

2、行为培养。

试想,你为什么能大量的刷到你喜欢的视频,就是因为你在看这些视频的时候日志数据发回到抖音的数据中台,计算出你的潜在爱好,后台就一直给你推送相关视频。所以,本质上我们只要伪造(修改)这些数据就ok是吧。行为培养有什么用,可以获取特定领域的视频或文章(今日头条),可以获取针对性的广告,可以给做号的人快速打上标签。这部分就是python部分对数据的修改,没有需要特别说明的地方。

3、参数伪造

抖音体系里面最出名的莫过于X-Gorgon(xg)和X-Khronos(xk)参数了吧,这个算法是真的厉害。一方面他适用于各大字节跳动的产品体系,调用的动态so,另一方面这一套验证机制是惰性验证,随着不同的接口有着不同的验证严格性,换句话说,很多时候即使你的参数不完全对,也可以让你请求,这是非常厉害的地方。如今的加密已经到42了,但是36的加密依旧可以用在很多地方。很多时候,我们没有能力也没有精力去破解so文件,就需要调用native函数来驱动so函数执行,得到执行后的结果进行二次使用。主要使用到frida的rpc服务,详情请移步:JavaScript API | Frida • A world-class dynamic instrumentation framework

这是基于flask+rpc做的native函数调用局部代码,可以基于flask做一个调用so层函数的服务,从而服务爬虫。

三、Summary

玩爬虫,轻则入门,重则入狱,哈哈哈,请大家节制使用爬虫技术。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。