一日一技:让人眼前一亮的爬虫调试习惯与技巧

语言: CN / TW / HK

在爬虫调试的时候一个良好的调试习惯,正确的调试技巧。绝对能让您在抓包,定位及JS解密与JS逆向等各种方面事半功倍。

优秀的调试习惯

无痕模式

无痕浏览(隐私浏览模式、隐身窗口、InPrevate),是指不留下上网浏览记录的互联网浏览方式。但是,用户下载的文件和建立的收藏夹或书签会保存下来。支持该模式的浏览器包括但不限于百度浏览器,Firefox火狐,搜狗浏览器,360安全浏览器,Avant browser ,世界之窗浏览器,Google Chrome,Internet Explorer 8及更新版本,Edge,Safari.

主要特性

不记录上网痕迹,保护您的个人隐私

不记录 Cookies

不记录 Internet 临时文件

不记录网页表单数据(用户名、密码、搜索关键词等)

不记录撤销页面列表,即历史记录

等等

特别提醒

通过无痕浏览不会影响其他用户、服务器或软件。但请谨防以下情况:

  • 进行无痕浏览时,您下载的文件、新收藏的网址、新修改的浏览器配置将仍然被保留。

  • 因特网服务提供商或雇主还是可以追溯用户访问过的页面。

  • 如果想要清除电脑中的网页浏览痕迹,可以使用安全软件(如360安全卫士)的清理痕迹按钮或手动删除历史记录和缓存文件。

  • 因为是无痕浏览,同样浏览器原先保存的密码和账号同样无法使用,这也会给网络浏览带来不便之处。

  • 网站收集或分享您的相关信息

  • 以提供免费表情图片为名跟踪按键记录的恶意软件

  • 在您浏览过程中的监视者

  • 浏览器插件信息的窃取

注意事项

  • IE 和 Chrome 都会在无痕浏览下默认关闭扩展功能,而 FireFox 不一样,在隐私模式下仍然可以使用插件,这无疑又给隐私泄露提供了另一个途径。

  • 所以在关闭Firefox的隐私浏览模式后,您需要检查浏览器插件是否记录了浏览信息,或在隐私模式前暂时禁用不需要开启的插件,否则您的信息可能会被公开

  • 部分插件(如Adobe Flash Player)拥有一套自己的Cookie系统,在隐私模式下 Cookies 仍然会正常工作,甚至在隐私模式下获取的 Cookies 一样是公开可读的。在退出无痕浏览后您需要手动清除Cookis才能做到完全无痕。

系统隔离技术

通过一些轻量级的虚拟系统实现,具体原理:轻量级的虚拟系统可以实现与主机系统相互隔离目标,隔离的实现是通过镜像主机系统环境生成独立的操作系统桌面环境,用户可以在虚拟环境下安装和使用Internet Explorer,遨游,QQ浏览器,Firefox等等第三方浏览器,轻量级虚拟系统具有启动资源占用率低,可移动便携方便。这类产品有:VMware Workstation ,Prayaya v3虚拟系统,Ceedo,Macpac等等。

沙盒技术

所谓沙盒技术,具体见百科(sandbox),沙盒技术可以重定向主机系统环境操作到其他的存储空间,以及重定向变量,同时沙盒退出后会自动消失原先的虚拟环境连接由此达到安装到沙盒中的应用程序不在主机系统中保留痕迹的目的。这类产品有:360安全浏览器,Google 浏览器,火狐浏览器,遨游浏览器等

为什么建议使用无痕模式进行调试

当我们使用浏览器访问的时候,难免会由于cookies未及时手动清理,JS缓存等各种情况存在造成调试误差。让人难以快速正确的调试出问题。

多浏览器

多浏览器在这里指使用多个不同的浏览器进行调试,而非仅仅使用Chrome。其中的益处不言而喻,多浏览器能够快速的找到不同。

优秀的调试方式与技巧

优秀的调试技巧,能够让你事半功倍,极大的降低调试难度。

巧用DevTools搜索工具快速定位数据接口

当我们确定了需要抓取数据的目标网站,往往是这种情况。里面参杂了不少不包含数据的包,例如这样。

那么如果需要过去该页面数据,就必须找到对应的数据包,一个一个去找明显不现实。有什么方法可以快的定位到该数据包呢?我们可以这样操作。

第一步:鼠标左键点击“放大镜”,呼出Search面板。

第二步:搜索对应的内容,支持大小写敏感,正则

第三步:根据结果,鼠标双击对应内容,即可直接跳至对应包位置

巧用重放攻击快速定位加密位置

当网站有相关的验证时,由于参数过多,无法快速的确定哪个参数才是真正决定是否为真实数据的时候,那么我们可以 采用 重放攻击的方式。 进行测试从而快速定位加密位置。

重放攻击

重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。重放攻击在任何网络通过程中都可能发生,是计算机世界黑客常用的攻击方式之一。

重放攻击的原理

重放攻击的基本原理就是把以前窃听到的数据原封不动地重新发送给接收方。很多时候,网络上传输的数据是加密过的,此时窃听者无法得到数据的准确意义。但如果他知道这些数据的作用,就可以在不知道数据内容的情况下通过再次发送这些数据达到愚弄接收端的目的。例如,有的系统会将鉴别信息进行简单加密后进行传输,这时攻击者虽然无法窃听密码,但他们却可以首先截取加密后的口令然后将其重放,从而利用这种方式进行有效的攻击。再比如,假设网上存款系统中,一条消息表示用户支取了一笔存款,攻击者完全可以多次发送这条消息而偷窃存款

重放攻击的类型

1.根据重放消息的接收方与消息的原定接收方的关系,重放攻击可分为3种:

第一种是直接重放,即重放给原来的验证端,直接重放的发送方和接收方均不变。

第二种是反向重放,将原本发给接收方的消息反向重放给发送方。

第三种是第三方重放,将消息重放给域内的其他验证端。

2.基于重放法发生在什么回合,可以将重放攻击分为两类:

(1)在当前回合外攻击中,重放的消息来自协议当前回合之外,因此至少涉及协议的两个回合运行,可以并发也可以顺序地实现。

①交错攻击需要两回合或多回合同时执行协议,著名的例子是Lowe对NSPK协议的攻击。[5]

②经典重放也涉及当前回合外执行协议,但不要求同时执行协议。攻击者存储在前面的回合中所传送的消息,并抓住机会重放它们,对协议的当前回合进行攻击。Denning和Sacco对NSSK协议的攻击,就是经典重放的一个著名例子。

(2)在当前回合内攻击中,重放的消息来自协议当前回合。

**3.考查攻击者对消息重定向,这种分类法称为目的地分类法。分类如下。**

(1)偏转重放攻击:重放消息重新定向,发送给不同于原接收者的第三方。这种情形可进一步分为如下子类:

①重放消息重定向,发送给原发送者,称为反射重放攻击。

②重放消息重定向,发送给第三方,即不同于原发送者和原接收方的第三方。

(2)攻击者通过延时的方法(可能涉及不同的协议回合),将消息传送给目的地,称为直接重放攻击。

以上信息来自百度百科

简单操作流程如下

首先先确定数据包,获取该数据包中的URL。使用代码或脚本间隔一定时间发送网络请求。若根据时间到推移,手动对于请求参数的修改。进行多次验证。基本结构图如下:

多次请求验证,确定加密处。

妙用中间人攻击进行抓包

在很多情况下一个DevTools解决所有,但也有很少部分针对此进行了限制。

中间人攻击

中间人攻击(Man-in-the-MiddleAttack,简称“MITM攻击”)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。

中间人原理图,如下所示

使用中间人进行”代理“拦截和转发。从而实现抓包的目的.

进阶

抓包抓不到?

多体现在Android抓包

强制代理

VPN转发

各种断点助力调试

程序断点的相关概念便不在此过多赘述,若想了解请自行搜搜

DOM断点

DOM断点一般有三种方式,subtree modification、attribute modification、node removal。如下图所示,

在这里使用下了一个node removal断点。那么当我们删除此节点的时候将出发断点。如下图所示

JS断点

Js断点有两种,一种是Js运行断点,一种是Js调试断点。

Js运行断点:当网页执行Js的时便会立即进入调试模式。操作方式如下

首先打开开发者工具,

然后进入source选项卡

然后进入右栏中 Event Listener Breakpoints中

最后勾选Script

即可开启,当网站运行时。便会进入debugger模式

Js调试断点: 此断点需要开发者的去下

首先打开开发者工具,

然后进入source选项卡

找到对应位置,鼠标左键点击。

即可完成

若网页运行到此处,便会 触发 断点。

XHR断点

XMLHttpRequest (XHR)是一种创建AJAX请求的JavaScript API。它的方法提供了在浏览器和服务器之间发送请求的能力。

当网站是Ajax请求当时候,XHR断点将是一个非常不错的调试技巧。

XHR断点也有两种,一种是发生任何XHR请求的时候都出发断点,另一种是特定条件的XHR断点。

操作如下

打开DevTools,进入source选项卡。点开XHR/fetch Breakpoints。

鼠标左键点击旁边的“+”号,直接Enter即可完成。如下图所示:

特定XHR断点:

鼠标左键点击旁边的“+”号,在输入栏中输入限定条件,如Id,输入完成后Enter

Hook

Hook 又叫作钩子技术,它就是在程序运行的过程中,对其中的某个方法进行重写,在原有的方法前后自定义的代码。相当于在系统没有调用该函数之前,钩子程序就先捕获该消息,可以先得到控制权,这时钩子函数便可以加工处理(改变)该函数的执行行为。执行函数后释放控制权限,继续运行原有逻辑。

示意图如下,

(func(args...){
// Hook 逻辑
})(args...)

常实现的有 Devtools Hook,本地文件映射Hook,插件Tempermonkey Hook

Devtools 直接注入:

Devtools 直接注入的优点:可以直接把Hook函数copy至console中,直接运行。简单便捷。

缺点:比较难修改已经注入的Hook。难以复用。

文件映射Hook

在本地书写Hook函数,后使用DevTools中source选项卡中的Overrides进行文件映射。当网页运行满足Hook条件时候,便会触发Hook函数。

Tempermonkey Hook

Tampermonkey 是第一个可以用来让 Chrome 支持更多 UserScript 的 Chrome 扩展,它可以加入更多的 Chrome 本身不支持的用户脚本功能。Tempermonkey下载与使用请自行搜索

优点:可定制化,通用化。有针对的进行开发。

缺点:需要下载,需要学习Tempermonkey 的使用

JS注入

当我们访问网站时候,一般情况下会将Js缓存到本地,进行相关运行。那么说如果我将本地的保存,修改其中逻辑,并覆盖其服务器下发的Js。这就是注入攻击

其原理是保存服务器下发的Js文件形成类似于“缓存”的功能,修改并覆盖下发Js文件即可完成。

常见的实现方法有三种

  1. DevTools中source选项卡中的Overrides进行文件映射

  2. Tempermonkey

以上操作,请参考上文

  1. Charles或其他第三方工具

点位插桩调试

其核心原理为:监听核心变量

首先在对应位置鼠标右键呼出,选择add conditional break…

输入监听值

放入 Logpoint中。完成后运行js即可在对应级别内看到日志输出

未闻 Code·知识星球开放啦!

一对一答疑爬虫相关问题

职业生涯咨询

面试经验分享

每周直播分享

......

未闻 Code·知识星球期待与你相见~

一二线大厂在职员工

十多年码龄的编程老鸟

国内外高校在读学生

中小学刚刚入门的新人

“未闻 Code技术交流群” 等你来!

入群方式:添加微信“mekingname”,备注“粉丝群”(谢绝广告党,非诚勿扰!)