事发的由来,是我的打字错别字太多,导致部门考试分数极低。对于这个问题,我的考虑是,在计算机的当下,如何解决我老错别字问题,手输肯定是不行的。由此在需要微信验认证下的问卷星,能否突破认证封锁,直接用爬虫帮我作答的可能性呢?稍微花了点功夫尝试后,确信这个可能是存在。果然天下没有爬不了的网页,只要功夫深,再爬牢里蹲!接下来看下后面的具体尝试历程。
抄近路,图方便
虽然抄近路尝试失败了,毕竟程序是人家写的,认证逻辑规则我事先并不清楚,要是没失败没总结原因,也不会有后面的突破!
利用浏览器调试器
在PC端爬虫是最简单的,因为浏览器自带调试器。说干就干,我们把链接直接在网页中打开试试。
<img src="https://storage.bbcking5.com/文章内部图/自动/image-20240629185526958.png" style="zoom:50%;" />
这是什么情况,问卷星必须使用微信客户端打开。微信打开的话是还怎么调试,那怎么使用浏览器呢?我想到了伪造Agent,就算我们用浏览器,也让问卷星服务端觉得我们用的是微信客户端,这样不就可以浏览器打开了么?这里我推荐一款名叫《User-Agent Switcher and Manager》的浏览器插件。当然如果直接在调试器中Network conditions -> User agent 修改我们的Agent信息也是可以的,只是用这个插件会更加方便。设置完成后,刷新页面,就会看到提示登录了。
<img src="https://storage.bbcking5.com/文章内部图/自动/image-20240629190628072.png" alt="image-20240629190628072" style="zoom:50%;" />
<img src="https://storage.bbcking5.com/文章内部图/自动/image-20240629190753711.png" alt="image-20240629190753711" style="zoom: 25%;" />
到这里暗自开心了一会,不过当我点击一键登录时候,一片白,打开调试,查看请求Request Url: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8fe84c5d52db247a&redirect_uri=https%3a%2f%2fwww.wjx.cn%2fhtml%2fgetwxcode.html%3fredirect_uri%3dhttps%253a%252f%252fkaoshi.wjx.top%252fvm%252fw3sq1Ge.aspx&response_type=code&scope=snsapi_userinfo&state=sojump&connect_redirect=1
瞬间感觉不对劲了,怕不是一定要微信打开链接吧,再到响应中查看下,果不其然。把链接复制到微信中打开就进入考试页面了,但是和我初衷不一致啊,我要浏览器打开啊。到此我从微信中复制出考试的链接,再从浏览器打开,发现直接跳回到了浏览器首页。
修改JS
艾玛,这还怎么玩,我后来又想到了另一个办法,通过修改JS直接让浏览器页面跳过微信认证登录行不行?
<img src="https://storage.bbcking5.com/文章内部图/自动/image-20240629193526981.png" style="zoom:50%;" />
, case3 = '<div class="popup"><div class="pop-content"><div class="pop-title">请先登录再填写问卷</div>' + loginHref + '<a href="javascript:show_zhezhao_utils();" class="jump">跳过登录</a></div></div>'
通过调试页面搜索关键字,找到了对应JS代码文件,往下找了找,当我看到上面这串代码时候,感觉看到了希望,好嘛在明显不过了,这跳过登录的函数都给我们准备好了呀。果断试一下。在Console中输入 show_zhezhao_utils(0, 0)
运行后发现果然跳过了认证页面。但当我们提交心中满意的答案后发现 理想很美满,现实很骨感 。果然微信认证这一步是绕不过去的坎。
<img src="https://storage.bbcking5.com/文章内部图/自动/image-20240629194652543.png" alt="image-20240629194652543" style="zoom:50%;" />
抛去骚套路,规规矩矩抓包吧
环境准备
- 下载安装Charles
- 证书重置、下载
<img src="https://storage.bbcking5.com/文章内部图/自动/image-20240629203341382.png" alt="image-20240629203341382" style="zoom:50%;" />
- 在Charles中查看服务端代理配置Settings -> proxy settings,默认http代理是8888端口。
- 在有微信的终端安装好CA证书(注意有效期,如果有效期已过,需要重置CA证书)。
- 安装好证书后,设置客户端代理。每种终端配置地方不一样,自行百度一下。
[!NOTE]
默认系统上的代理配置为全局性的,抓到的包会非常多,对分析很不利。推荐做法是。1、在手机端安装HttpCanary,通过该软件针对单个应用抓包,找到相关域名。 2、在电脑端通过三方代理软件针对特定域名走Charles的代理。
另外推荐用pc端的微信来抓包调试,应为安卓端在7.0以后是不允许客户自己安装系统CA证书的,除非手机做了Root。没有安装CA证书的话,就算走代理,抓到的也是https加密过的,无法用于分析。而且手机太小了,操作起来比较麻烦。
抓包分析
上图就是抓包结果,我就不重复贴图了,我这里就简单分析一下,首先vm中第一个是最初访问的请求接口,第二个则是通过 open.weixin.qq.com中完成认证获取到相应code值后的请求。其次就是在joinnew中则是提交答卷的请求。
- 点击该请求右键选择
Copy cURL Request
- 网上找一个在线转换工具,将复制出来的Curl 命令转换成熟悉的Python代码。
<img src="https://storage.bbcking5.com/文章内部图/自动/image-20240629211719805.png" alt="image-20240629211719805" style="zoom:50%;" />
- 运行代码查看问卷星后台,已有我们刚提交过的答案啦。后面想实现的逻辑就可自己发挥了。同时该请求参数很多,但是data数据很明显。其他数据在正常可以跑通的情况下,看的懂的(比如时间,时间戳)可以调整一下,看不懂的就不用改动了。如果要分析出来是什么参数,需要通过不同账号,答卷,环境等等因素来调试出大量不同的值来分析。又消耗时间又没啥用。
<img src="https://storage.bbcking5.com/文章内部图/自动/image-20240629212330042.png" alt="image-20240629212330042" style="zoom:50%;" />
最后感想
其实上面成功实现简单爬虫,只是可以实现最简单的需求。当面对自动微信认证,可以针对不同的答卷,则需要搞明白其中的认证逻辑,参数含义等等,甚至高难度js逆向推理加密逻辑。方法有很多,得看不同的情况,灵活运用不同的工具来实现。
补充: 这个问卷星只是用到了微信认证,很多前端文件可以在浏览器中可以拿到。而微信小程序不同,默认前端文件是存储在 电脑\文档\WeChat Files\Applet 目录中。而且是加密和编译过的,相对难度更大一些。先通过UnpackMiniApp对文件解密,然后使用CrackMinAPP来反编译。最后直接使用新开发者工具将其打开来调试。
很多人对爬虫有些误解,总觉得爬虫是不好的。怎么说呢,看做啥用途吧,爬虫本身和网站访问类似,并不是入侵性的。只是比普通人更快而已。比如有个网站是买票的,有些黄牛就是通过爬虫软件,实现抢票再高价卖给别人。所以爬虫本身无害,关键要看实际用途。
:::: column
::: column-left
:::
::: column-right
:::
::::
客官,欢迎光临本站!路途遥远,常进来看看!
本文由mdnice多平台发布
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。