【网络爬虫教学】JS的本地调试技巧

概述

在这个爬虫盛行的时代中为了有足够的能力可与之抗衡,网站方不得不采取任何可行的手段用以防止一切非人为操作篼集数据行为的工作,而在此时,加密、混淆便顺势成了一时之间热门的话题,而对于长期工作于前端的朋友,如何调试JS应该再熟悉不过了吧?今天小弟给大家分享一个基于本地的调试技巧,让JS调试起来更轻松!大家在学习过程中遇到任何问题,欢迎加入我们的QQ技术交流群探讨: 544185435

什么是本地调试?

见名思意,指的是原本需要在目标站上调试的工作将其部署到本地,即在本地部署一个类似的web服务,以达到便于调试的目的,我们知道许多较为简单的加密,我们完全可以通过在线debugger的方式取得加密的函数片段,但对于每次刷新页面都会动态改变的网站而言,虽说也依然可以直接debugger,但是一旦我们不小心刷新了页面便会导致所有字段都发生改变,从而增加分析的难度,此时,部署本地调试环境将会对debugger有很大的帮助。

使用Wget工具下载指定链接的所有数据

为了取得网页的所有数据,我们需借助linux下的一款下载神器wget,详情可以参考:维基自由百科全书 ,通过它我们可以很方便的取得页面所需的所有数据,这里我们还是以某数加密作为演示。

通过刷新后,我们不难发现页面上的JS、meta content里的内容完全发生了变化,对于这类加密,最好的解决方式就是部署本地JS调试,一方面不受Cookie限制,另一方面更不会因为页面刷新了从而导致所有数据都发生变化。

通过抓包分析,我们找到页面的请求为:http://xxxxx匿名<不提供>/personlogin/;我们要做的就是通过wget工具将这个页面下载下来。

使用命令:wget -l 1 -p -np -k 域名,进行整个页面下载。

我们启动命令行窗口,然后进入到刚下载完成的目录中,然后输入:python -m SilpleHTTPServer 8081, 启动简易式的HTTP服务,(注意:8081为端口,可以自行指定)。

我们打开浏览器并通过localhost:8081/path 打开服务页面,如果我们有看到如图的错误,表示当前没有找到那个文件,而事实上目录中是有这个文件的, 所以我们需要去找出原因。

我们定位到错误文件所在的目录,我们发现这个JS文件有点问题,后面莫名其妙多了一些东西,那么知道问题所在了,我们就直接改掉不就好啦,直接将.js后面的所有东西全删了,再刷新一下HTTP服务。

修改完后我们再次刷新服务器,然后访问,现在它并没有报错了,但是新的问题来了,它在不停的刷新??无限的死循环了?啥原因呢?在经过分析后,发现只要返回上级目录然后再执行HTTP服务,在url后面加个#号即可。

我们可以看到,这一次刷新它不再无限跳转了,而是重定向到了别的页面,这说明了什么?说明了我们已经成功的还原了网页的过程,成功将网页调试所需的一切部署到了本地。

为了更好的给大家演示,这里我将4QbVtADbnLVIc目录也剪切到了html目录中来,那么就让我们一起来开启Debugger之旅吧!

如何触发加密事件?

部署好了就完了吗?答案是否定的,虽然部署了本地调试环境,但我们该怎么去触发这个加密过程??对于这个问题,其实也是有很多种方法能实现的,办法都是人想出来的,我们只要好好的想一想,为什么网页的可以触发?在什么情况下会被触发加密?而对于某数的这个加密,它是通过设定请求方法里的钩子来监听,一旦发起了请求,它便马上拦截下来,然后进行一系列篡改后加上密文然后放行的过程,那么我们只要还原一下这个过程就可以了。

巧用input标签

既然我们前面说到了这个加密是通过发送请求来触发的,我们何不尝试一波?

从上图中,我们看到了什么?我在控制台模拟发送了一次xhr请求,我们可以清晰的看到下面返回了一串携带“MmEwMD”关键字的url,这不就是我们想要的东西麽?

虽然我们现在已经证实了这个方法是可行的,但还有个问题,我们需要需要断点啊,要不然怎么调试呢?对于这个问题,有两个解决方案,第一种,如上图我们可以将上述的请求方法封装到html文件中,使其加载时直接触发,这是最简单暴力的方式,但这种也有弊端,你需要刷新页面才能再次触发。

第二种呢,相对来说呢既方便来又不失简单,这种方法目前看来没有弊端,谁用谁爽,都说办法是人想出来的,既然它是依赖发送请求才触发的,那么为什么我们不自己直接做个按钮出来呢?它的特点想必不用我说明了吧,首先我们的请求是通过xhr发送,不需要通过刷新页面即可实现,也就是说只要绑定了按钮事件,我们就可以无限的调试了,So,我们要做的就是在open方法中断点就够了,因为这个加密Hook的就是open方法!

在open函数旁断点后,直接点击我们制作的调试按钮,它便在open函数这断了下来。

我们只需按一下F11在跳转的页面中,输出:_$f6(arguments[1])便能看到加密的结果,我们可以看到每调用一次都会返回不一样的结果,而重点是,我们页面上的字段全都不会改变了,且其它后续操作都与之前的一致,只要还原了内部的加密函数即可。

总结

本篇文章是:【网络爬虫教学】一招快速定位-MmEwMD加密入口 的另一种解决思路,值得一说的是,这种本地部署的模式相比直接在线debugger来说方便许多,特别是针对那些全动态混淆每次刷新页面都会改变字段的站点特别有效,另外,本文仅分享如何部署本地环境以及如何更优雅的找到入口,不涉及任何解码操作,而某数的加密强度也是行内高度认可的,如果真要研究,我奉劝你三思,同时希望大家不要再找我要源码了,如果真有这种啥都不用干就能白嫖的好事请务必要告诉我,因为我也想白嫖!


原文转至IT猫之家,转载请注明出处!

你可能感兴趣的:(【网络爬虫教学】JS的本地调试技巧)