一般流程
- 第一步:先要明确需要获取哪些数据,是哪些列表页或内容页。
- 第二步:大致看下每个数据包(DOC,XHR等)请求参数和返回数据,明确数据返回接口。
- 第三步:通过请求重放,查看哪些参数是非必要的,剔除掉非必要参数。
- 第四步:最后就是靠经验来解密数据或加密参数了,(以后我每篇逆向文章都尽量详细的讲出自己的思路和想法,如果有说的不对的地方,还清大家指正一下,谢谢。)
过程
- 目标:aHR0cHM6Ly93d3cuc2ltdXdhbmcuY29tL3NtenE=
- 目的:获取每页的数据。
明确数据接口
- 在谷歌浏览器打开调试工具,点开XHR,通过往下滑动页面查看发送的请求数据包,发现是瀑布流。
- 看到一部分很规律的请求参数,猜测condition参数为瀑布流的“块号”?那page又是啥,还有另外请求的fundNavTrend是啥?(这两种请求都返回了加密数据)
- 百思不得其姐的我(doge)又重新尝试刷新网页,发现是他给我重定向到了展示全部板块,而不是我要的期货板块。所以我又重新滚动并记录几次完整请求,直到请求“样子”基本都一致在去看。发现page参数变正常了,但fundNavTrend也莫名消失了,先大胆猜测他是其他的板块数据,因为太少出现了。正常的样子,如下图:
- 正常了之后再去点击其他板块,以确定动态参数。点击其他板块后发现condition条件变化了,然后在多点几个得到规律。结果code是网站的在售基金某个功能模块的id,size按正常来说就是一次返回的数据条数(猜测),page是块数,condition是每个板块的标识,请求返回的data应该就是加密后的,需要浏览器解密再插入回页面上。
用Python进行请求
- 对着请求右键直接复制该请求的cURL(bash),找个网站转python请求代码即可,如下图:
解密返回数据
脚本注入
-
第一步全局搜索data参数,发现不好找。然后直接去Hook浏览器中的JSON的parse方法,因为返回的就是json格式,浏览器需要解析成字符串才能解密,hook函数如下:
-
(function() { alert("hook begin"); var _parse = JSON.parse JSON.parse = function(arg){ console.log(arg); debugger; return _parse(arg); } })();
-
随便找个油猴脚本设置在页面渲染前执行就ok,或者打个Script断点手动注入,然后通过滑动页面来debugger。
找解密函数入口
- 把整个decrypt函数扣下来,然后补本地node运行所需的环境,难度不大。(环境部分截图)
总结
- 这个网站补环境难度不高,耗时的是一开始在看请求包的时候姿势不对,滚动页面以触发请求的时候,鼠标最好不要放在页面内,因为刚刚鼠标不小心放到了一个图表缩略图,然后异步请求了fundNavTrend,在数据解密后发现是某个基金的详情图表数据。
- 本文主要是写个人经验总结,为避免其他问题,相关代码只放部分截图,如果有什么不错的想法和建议也可以留言,谢谢。
免责声明:本文仅供学习和研究目的,禁止用于任何商业用途。读者在使用爬虫技术时需遵守相关法律法规,本文作者不对读者在使用爬虫技术时可能产生的任何法律风险负责。如有任何侵权或违法行为,请及时联系作者删除相关内容。