懂车帝视频连接--JS逆向
这个项目,适合JS逆向学习初学者。
懂车帝:https://zjbyte.cn/i6615388842591518733/
把谷歌开发者工具调处来-network-手机模式,把加载的东西清空,刷新一下页面重新加载
审查一下这个视频的元素,有这么个视频连接
把连接复制出来,查看页面源码,查了一下,咦?不是静态的??那是动态AJAX加载出来的吗?查完加载的数据还是没有?没有就对了,JS逆向才是我们的主菜。
分析一下视频这一块的代码,webkit-playinline跟playinline比较特别,那就shit+ctrl+f全局查找一下其中一个看看,有两个脚本用到,点第一个进去看看
美化一下代码
ctrl+f在当前文档中查找playinline,定位到一处,简单分析一下可以找到一段比较可疑的代码块,英文基础还可以的话,我猜n应该就是我们要的连接了,打个断点9746,刷新一下页面。
自动进来断点,看一下是个连接,把连接复制出来看一下是不是视频
哎呀,这谁家小伙这么年轻这么有活力啊,可以的。
好,回归正传,视频连接就是这个。回去看一下videoList容器里面都有什么玩意,有src是我们要的,视频分极速跟超清,这一行代码显然是想要超清视频的src。
那videoList哪来的,查找一下当前文件,有5个匹配,简单分析中间内个赋值了是我们要的,赋值i,i里面的src值用到base64decode加密,用到参数t.main_url,这什么鬼不知道先放一边。
我们先找一下base64decode在哪,这个方法没有调用到别的特别的方法,很好。
回去分析一下t.main_url的由来。这里有个方法叫回溯,一层一层往下看call stack也就相当于我们代码参数的来源一层一层往上
在最后一层我们就很容易揪出了main_url
知道base64decode方法,知道main_url的值,我们来验证一下能否生成正确的视频连接url,把方法的原代码前头的t.换成var ,如下。
var base64decode = function(e) {var t, n, r, o, i, a, s, c = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1];for (a = e.length,i = 0,s = ""; i < a; ) {dot = c[255 & e.charCodeAt(i++)];while (i < a && t == -1);if (t == -1)break;don = c[255 & e.charCodeAt(i++)];while (i < a && n == -1);if (n == -1)break;s += String.fromCharCode(t << 2 | (48 & n) >> 4);do {if (r = 255 & e.charCodeAt(i++),61 == r)return s;r = c[r]} while (i < a && r == -1);if (r == -1)break;s += String.fromCharCode((15 & n) << 4 | (60 & r) >> 2);do {if (o = 255 & e.charCodeAt(i++),61 == o)return s;o = c[o]} while (i < a && o == -1);if (o == -1)break;s += String.fromCharCode((3 & r) << 6 | o)}return s}
aHR0cDovL3Y5LXR0Lml4aWd1YS5jb20vNTlkYzExZWJjNjI0MDVhODhkNThlMGU1YTk3MTQ5MDcvNWNmYmRlNjEvdmlkZW8vbS8yMjA3ODY1MDNmNDBkMDc0ZDAyYWJhZDY2NDNkODQ0ZDI3NTExNWUwOTk3MDAwMDAxNDBkYzkzMGZkYy8/cmM9YW5Kbk0zQjBOMngyYVRNek8yZ3pNMEFwUUhSMWQzQjFLVFUyT2pNMk16TTBPalEyT3prOE0wQXBkU2xBWnpOMUtVQm1NM1lwUUdaOGIySm9iREZtWkdoc01XUjNja0FwTkRWa2JWODFjVjl4Y2pZelh5MHRNQzR2YzNNdGJ5TnNiRHBwTlRZdk1DOHRMeTB0TUM0dkxTMHVMMms2WWk1d0l6cGhMWEVqT21BdGJ5TmViV3hoYzJWdmJHRnpiR1p5Y1dBdkxUbyUzRA==
选中console控制台,清空一下,把方法放到控制台里执行一下,生成我们要的连接。直接点一下内个连接,验证一下我们的连接看看对不对。
艾玛,不错嘛小伙子又见面了,但怎么感觉你内个变小了,咳咳,我说的是人物。仔细想想,嗯,是我之前拿错了,拿了极速视频的main_url,想看超清无码的自己去nong一下。
那么main_url那么长一串值怎么来的呢,ctrl+f搜一下这个值,可以看到这个值来源与一个请求的响应里面
分析一下这个get请求,有四个参数,r,s,单字母无规则,全局查找也是没什么头绪,先保留,callback回调函数,这个值很眼熟之前见过,应该是固定的,那就从logo_type入手,搜一下&logo_type
全局搜,文档搜,定位主要区域,这里的logo_type是一个固定值,打个断点,刷新页面,进来选中,查看数据,这里连接已经生成了r跟s
通过crc32方法传入r.config.remoteURL + r.config.videoID两个变量的合并然后就多出来了r和s。
r.config.remoteURL好说,是个常量
那么变量就是r.config.videoID了,我们那拿这个值出来全局搜一下
直接在首页index源码就有
剩下就看crc32方法干了啥,有三处特殊变量需要处理,第一处删掉,第二处的t.pathname值是/video/urls/v/1/toutiao/mp4/v0201e380000bf6s9iu4tqbmt08dbopg,这明显是传入连接的切片,我们可以把连接中的//i.snssdk.com替换成空,第三处 [t.protocol, t.hostname].join("//")替换成常量https://i.snssdk.com
知道orc32方法,知道r.config.remoteURL,r.config.videoID两个变量
var crc32 = function(e) {var n = function() {for (var e = 0, t = new Array(256), n = 0; 256 != n; ++n)e = n,e = 1 & e ? -306674912 ^ e >>> 1 : e >>> 1,e = 1 & e ? -306674912 ^ e >>> 1 : e >>> 1,e = 1 & e ? -306674912 ^ e >>> 1 : e >>> 1,e = 1 & e ? -306674912 ^ e >>> 1 : e >>> 1,e = 1 & e ? -306674912 ^ e >>> 1 : e >>> 1,e = 1 & e ? -306674912 ^ e >>> 1 : e >>> 1,e = 1 & e ? -306674912 ^ e >>> 1 : e >>> 1,e = 1 & e ? -306674912 ^ e >>> 1 : e >>> 1,t[n] = e;return "undefined" != typeof Int32Array ? new Int32Array(t) : t}(), r = function(e) {for (var t, r, o = -1, i = 0, a = e.length; i < a; )t = e.charCodeAt(i++),t < 128 ? o = o >>> 8 ^ n[255 & (o ^ t)] : t < 2048 ? (o = o >>> 8 ^ n[255 & (o ^ (192 | t >> 6 & 31))],o = o >>> 8 ^ n[255 & (o ^ (128 | 63 & t))]) : t >= 55296 && t < 57344 ? (t = (1023 & t) + 64,r = 1023 & e.charCodeAt(i++),o = o >>> 8 ^ n[255 & (o ^ (240 | t >> 8 & 7))],o = o >>> 8 ^ n[255 & (o ^ (128 | t >> 2 & 63))],o = o >>> 8 ^ n[255 & (o ^ (128 | r >> 6 & 15 | (3 & t) << 4))],o = o >>> 8 ^ n[255 & (o ^ (128 | 63 & r))]) : (o = o >>> 8 ^ n[255 & (o ^ (224 | t >> 12 & 15))],o = o >>> 8 ^ n[255 & (o ^ (128 | t >> 6 & 63))],o = o >>> 8 ^ n[255 & (o ^ (128 | 63 & t))]);return o ^ -1}, o = e.replace("//i.snssdk.com", "") + "?r=" + Math.random().toString(10).substring(2);"/" != o[0] && (o = "/" + o);var i = r(o) >>> 0;return "https://i.snssdk.com" + o + "&s=" + i}
//i.snssdk.com/video/urls/v/1/toutiao/mp4/
v0201e380000bf6s9iu4tqbmt08dbopg
我们来模拟执行一下这个方法。
连接后面生成了r跟s,直接点连接打开看看,有我们要的main_url
这把我们拿内个超清的main_url试一下之前的base64decode方法。
点开连接,嗯?又是这小伙在卖车。
项目到这就算结束了,欢迎评论探讨。薯片+快乐水,enjoying!
懂车帝视频连接--JS逆向相关推荐
- js逆向破解 —— 懂车帝视频链接
背景 话说下午有一朋友发我一链接懂车帝某视频,让我帮忙看一下这个网页中视频链接是怎么获取的.我断断续续地花了两三个小时,最后终于把它给拿下了.在整个分析的过程中,我觉得还算是有点意思,所以写下这便博客 ...
- 用 Python 轻松将懂车帝视频转换为文本
文 | 派森酱 来源:Python 技术「ID: pythonall」 最近在懂车帝收藏了一些感兴趣的视频,希望能整理出文字稿 观看视频,做笔记时遇到一个问题,需要反复一段一段的去看视频,再手敲整理笔 ...
- 汽车营销如何破局?看懂车帝全域营销助品牌“破浪”
消费者在变!当下消费者喜欢什么呢?据媒体调查显示:娱乐.旅游成为了首选.娱乐中,各种<破浪>类娱乐节目热播可见一斑,而在旅游中,走进大自然的自驾游"破浪"也成为了新趋势 ...
- python后端工程师简历_【社招】字节跳动 - 后端开发工程师( Python Golang)-懂车帝...
[字节跳动-懂车帝-后端开发工程师] 想加入最有梦想最年轻有活力的团队么,懂车帝研发团队呼唤你!懂车帝今年 3 岁,已经成为发展最快的汽车类资讯平台. 如果你热爱编程,热爱汽车,那么动动手指投出简历吧 ...
- 懂车帝与蛋蛋订车两大平台对比
懂车帝是一款汽车资讯类手机软件,支持无线网络WIFI(WLAN)及3G网络在线使用.懂车帝是一个专业.有趣的汽车内容平台,拥有专业的汽车资讯,精彩的短视频社区,丰富的车型信息供你看车选车. [积分系统 ...
- 每日新闻:抖音杀入小程序战场;懂车帝发布SaaS系统 ; 汉得开源其企业级PaaS平台;甲骨文推出“第二代云” 向AWS发起挑战...
关注中国软件网 最新鲜的企业级干货聚集地 今日热点 工业和信息化部:前三季度软件业务收入同比增长15% 2018年前三季度,我国软件和信息技术服务业保持稳中向好发展态势,软件产品收入稳定,信息技术服务 ...
- 【纯新手】小白的第一次面试经过(字节跳动-懂车帝)
计算机大三学生,正处于等待升到大四的暑假,感觉自己学校学到的跟招聘需要的条件差距很大,希望能利用这个比较长的时间提高一下自己的专业能力,也为自己毕业后找工作积累一点点经验. 根据我从网上得到的信息,说 ...
- 头条系 懂车帝 6.5.1 【之抹去儿时的恐惧】
这个故事要从儿时开始讲起,记得我还是个小孩的时候,有一天接到了一个任务,就是搞懂车帝.我心想:我之前搞过汽车之家.易车之类的,既然他们都是车相关的app,四舍五入就等于一样呗.我摆出了个OK的姿势,对 ...
- 汽车APP迎变局,懂车帝跻身综合黑马应用TOP50
QuestMobile于近期公布中国移动互联网APP黑马榜.其中,懂车帝APP入选综合黑马榜TOP50,成为榜单中唯一的汽车内容平台.尽管懂车帝的上线时间最晚,但却显示出了领跑行业的强用户粘性和活跃度 ...
最新文章
- 安装完之后设置动态ip地址
- 傲游浏览器记事本怎么打开
- 蔚来回应庄莉离职:不会因少数人员的正常流动受到影响
- python找色_[REST API] 用Python实现颜色识别功能----Total Control区域找色
- linux系统修改只读文件权限如(etc/hosts)文件
- (转)Managed DirectX +C# 开发(入门篇)(七)
- 非常强的用户体验的网站功能
- 模拟集成电路设计基础知识(二):MOS管二级效应及其小信号等效
- javaweb单点登录的三种实现方式
- 免驱 usb有线网卡_2020年末台式机amp;笔记本无线网卡最全选购指南amp;攻略,打造极致WIFI体验!...
- 一位资深程序员大牛给予Java初学者的学习建议
- 送你一份perl书单
- 刘易远:你自己,才是自己的救世主
- 安卓手机端一键抠图,这款软件适合你
- VUE2安装初始化步骤(2022)
- 免费好用的软件资源网站合集
- 计算机安全中心无法启动,windows安全中心,教您无法启动windows安全中心的解决方法...
- pixel 1手机如何刷到安卓7.1
- My New Mouse
- 百度地图交硬核成绩单,用AI推动的百度生态跃进时