美拍爬虫逆向js解析实战
爬虫肆无忌惮的好日子一去不复返了,各个公司如今都有了防范意识。采用cookie池,更换user-agent,更换代理,采用打码平台破解验证码,自动化采集等爬取,已经是比较low的方式了,高级一点的有逆向解析js和反编译app破解加密sign等。
逆向解析以网页版美拍无水印视频爬取为例子:
爬取美拍热门视频:https://www.meipai.com/medias/hot
1.找到接口:https://www.meipai.com/home/hot_timeline?page=1&count=12
发现是get请求,直接在浏览器访问就获取到标题,视频播放地址,点赞,转发,作者,发布时间等信息。
问题
在获取视频下载地址的时候,发现video是一串字符串,尝试后发现,各种办法都无法解析,而且也无法获取到视频下载地址。
思路
在element页面发现了data-video与视频的直接播放地址,但是element页面数据无法直接获取到。
videos:f7b0aHpgn0opgVUR0cDovL212dmlkZW8xMS5tZWl0dWRhdGEuY29tLzVjMGY4Zjg4YzMyYmUybWc5b29nZ3A5MDg1X0gyNjRfMV81ODZjMWNlNWY2YmE3MS5tcDQ/az1hYjg2MWQ4NDJhYjM2OTRkN2JhYmE4NzczODYxMzA5YSZ0PTVjMTYzq4CM2I3
真实视频地址:http://mvvideo11.meitudata.com/5c0f8f88c32be2mg9ooggp9085_H264_1_586c1ce5f6ba71.mp4?k=ab861d842ab3694d7baba8773861309a&t=5c1633b7
通过search全局搜索data-video与src当中的部分字符串,搜索.mp4,也发现都没有任何结果,一时间束手无策。
尝试全局搜索mp4,细心找到了某个js当中有src:k.decodeMp4.decode(a.vcastr_file),敏感到它就是要找的。
破解
k.decodeMp4.decode(a.vcastr_file),找到对应的js实现,搜索decodeMp4,在6090行发现了这个方法,耐心对这一段js代码进行解析,将js语法转为熟悉的python。
转完之后的代码为:
def getHex(a):hex = a[:4][::-1]str1= a[4:]return str1, hexdef getDec(a):b = str(int(a, 16))c = list(b[:2])d = list(b[2:])return c, ddef substr(a,b):k = int(b[0])c = a[:k]d = a[k:k+int(b[1])]temp = a[int(b[0]):].replace(d, "")res = c+ tempreturn resdef getPos(a,b):b[0] = len(a) -int(b[0]) - int(b[1])return b#这里的a字符串就是前面的videos
a = "f7b0aHpgn0opgVUR0cDovL212dmlkZW8xMS5tZWl0dWRhdGEuY29tLzVjMGY4Zjg4YzMyYmUybWc5b29nZ3A5MDg1X0gyNjRfMV81ODZjMWNlNWY2YmE3MS5tcDQ/az1hYjg2MWQ4NDJhYjM2OTRkN2JhYmE4NzczODYxMzA5YSZ0PTVjMTYzq4CM2I3"
str1, hex= getHex(a)
pre,tail = getDec(hex)
d = substr(str1, pre)
zz = substr(d, getPos(d, tail))
zz就是return g.atob(this[k](d, this.getPos(d, c.tail)))当中的this[k](d, this.getPos(d, c.tail)),将它传给了g.atob()当作参数,因此继续进行断点调试。会进入下面的方法,最后return h,这一段也是重要的参数生成部分,嫌弃麻烦,直接用exexjs调用js(用js2py等工具也都是可以的)
python中执行js代码,print(jsContent1.call(“s”,kk))这个打印的结果就是我们需要的src:http://mvvideo11.meitudata.com/5c0f8f88c32be2mg9ooggp9085_H264_1_586c1ce5f6ba71.mp4?k=ab861d842ab3694d7baba8773861309a&t=5c1633b7 ,无水印的视频地址
import execjs
js = """
var e = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
function s(a) {if (a = a.replace(/=+$/, ""),a.length % 4 == 1)throw f;for (var b, c, d = 0, g = 0, h = ""; c = a.charAt(g++); ~c && (b = d % 4 ? 64 * b + c : c,d++ % 4) ? h += String.fromCharCode(255 & b >> (-2 * d & 6)) : 0)c = e.indexOf(c);return h}"""
jsContent1 = execjs.compile(js)
print(jsContent1.call("s",zz))
后来同事发现,对zz进行base64解码就是我们需要的url了。
import base64
print(base64.b64decode(zz).decode())
最终的代码与结果就不展示了,感兴趣的自己研究一下。
总结
1.对url当中的关键字符串,包括mp3,mp4,进行全局搜索定位,经常是我们的突破口;
2.对浏览器进行断点调试,这个可以到网上找找代码,熟悉一下过程;
3.对js不熟悉,依然要硬着头皮上,耐心解析(使用浏览器的console熟悉js方法),简化js或转化为python代码,边调试边验证;
逆向解析是爬虫的难点,破解需要靠积累,熟悉常见的加密后的样式,如果你有类似的破解心得,欢迎留言交流。
美拍爬虫逆向js解析实战相关推荐
- 爬虫之JS解析,Python模拟JS代码运行。(附带模拟人人网登录案例)
六.JS解析 1.定位js文件 1.通过initiator定位到js文件 2.通过search搜索关键字定位到js文件 3.通过元素绑定的事件监听函数找到js文件,Event Listeners 注: ...
- 爬虫逆向 js逆向常用工具简单介绍
古语有云:工欲善其事,必先利其器. 作为逆向的开始,这个自然是无法避免的,毕竟js逆向的环境是浏览器,而浏览器自然为开发做了很多工具,方便再开发的时候检测开发过程中是否有问题,就像开发过程中debug ...
- Python 爬虫逆向破解案例实战 (三):凡科网逆向之闭包技巧
目录 1. 凡科网逆向分析 2. 代码实现 3. 总结 1. 凡科网逆向分析 点击 此处 进入到 凡科网 的主页面,在键盘中按下 <Fl2> 快捷键或者是鼠标右键单击选择 检查(inspe ...
- Python爬虫之bs4解析实战篇_爬取星巴克菜单【Python爬虫】
完整源码: import urllib.request from bs4 import BeautifulSoupdef get_content():url = 'https://www.starbu ...
- 逆向js实例---美拍
做爬虫,一般分两个大方向,一个是抓网页,一个是抓app.比如同一个数据,你去分别抓两者(假设都存在的话)他们两者有相似相同的部分,也有区别,比如同样能拿到数据,难易程度却不同,或者是在app抓包中发现 ...
- Python爬虫之Js逆向案例(2)-某乎搜索
Python爬虫之Js逆向案例(2)-知乎搜索 声明:某乎加密逆向分析仅用于研究和学习 大家好,今天继续分享关于某乎关键词搜索接口为案例的Js逆向实战.如果你是一名新手,而且还没有来得及看上一篇< ...
- 做爬虫,JS 逆向了解一下
爬虫是大数据时代不可或缺的数据获取手段,它是综合技术的应用体现. 有取就有失,有攻就有防. 开发者为了保护数据,不得已想出了很多办法来限制爬虫对数据的获取. WEB 网站的构成使得 JavaScrip ...
- 《爬虫逆向进阶实战》书籍介绍
<爬虫逆向进阶实战>书籍介绍 内容简介 <爬虫逆向进阶实战>以爬虫逆向方向的相关技术和岗位要求进行撰写,结合作者多年工作经验,总结了爬虫的架构体系.主流框架.技术体系和未来发展 ...
- 【爬虫逆向案例】某道翻译js逆向—— sign解密
声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! [爬虫逆向案例]某道翻译js逆向-- sign解密 1.前言 2.步骤 3.源码 4.号外 1.前言 相信各位小伙 ...
最新文章
- YOLO窥见黑夜|YOLO in the Dark让黑夜里的目标检测成为可能
- #20145238荆玉茗《网络对抗》-逆向及Bof进阶实践
- 被远程机器长时间无响应 (错误码:[308])_自动折叠式“Rollbot”为完全不受束缚的软机器人铺平了道路...
- 推荐一个国外SaaS产品-Olark
- [html] 你知道短链接的生成原理吗?
- [html] 写H5和小程序有什么相同及不同的地方吗?
- Bjarne Stroustrup语录[C++经验]
- 计算机内存断点,计算机 | 码农们都需要知道的「中断」相关知识
- android-ndk-aide,NDK安装教程20180605
- linux(ubuntu)下C++访问mysql数据库
- 汽车软件开发流程及代码提交
- 微信小程序图片上传以及剪切(image-cropper的简单使用)
- 微信小程序父子组件之间传值
- 运动目标检测 光流法
- 上海市政府颁布智能汽车牌照,蔚来汽车成首批获此资格企业
- 留个底 人人乐旁靓房房东出租,我是房东
- 【excel】如何绘制斜线表头
- Task运行过程分析2
- d2i_X509 载入der文件返回为空
- 笔记本无线连接打印机