这个项目,适合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逆向相关推荐

  1. js逆向破解 —— 懂车帝视频链接

    背景 话说下午有一朋友发我一链接懂车帝某视频,让我帮忙看一下这个网页中视频链接是怎么获取的.我断断续续地花了两三个小时,最后终于把它给拿下了.在整个分析的过程中,我觉得还算是有点意思,所以写下这便博客 ...

  2. 用 Python 轻松将懂车帝视频转换为文本

    文 | 派森酱 来源:Python 技术「ID: pythonall」 最近在懂车帝收藏了一些感兴趣的视频,希望能整理出文字稿 观看视频,做笔记时遇到一个问题,需要反复一段一段的去看视频,再手敲整理笔 ...

  3. 汽车营销如何破局?看懂车帝全域营销助品牌“破浪”

    消费者在变!当下消费者喜欢什么呢?据媒体调查显示:娱乐.旅游成为了首选.娱乐中,各种<破浪>类娱乐节目热播可见一斑,而在旅游中,走进大自然的自驾游"破浪"也成为了新趋势 ...

  4. python后端工程师简历_【社招】字节跳动 - 后端开发工程师( Python Golang)-懂车帝...

    [字节跳动-懂车帝-后端开发工程师] 想加入最有梦想最年轻有活力的团队么,懂车帝研发团队呼唤你!懂车帝今年 3 岁,已经成为发展最快的汽车类资讯平台. 如果你热爱编程,热爱汽车,那么动动手指投出简历吧 ...

  5. 懂车帝与蛋蛋订车两大平台对比

    懂车帝是一款汽车资讯类手机软件,支持无线网络WIFI(WLAN)及3G网络在线使用.懂车帝是一个专业.有趣的汽车内容平台,拥有专业的汽车资讯,精彩的短视频社区,丰富的车型信息供你看车选车. [积分系统 ...

  6. 每日新闻:抖音杀入小程序战场;懂车帝发布SaaS系统 ; 汉得开源其企业级PaaS平台;甲骨文推出“第二代云” 向AWS发起挑战...

    关注中国软件网 最新鲜的企业级干货聚集地 今日热点 工业和信息化部:前三季度软件业务收入同比增长15% 2018年前三季度,我国软件和信息技术服务业保持稳中向好发展态势,软件产品收入稳定,信息技术服务 ...

  7. 【纯新手】小白的第一次面试经过(字节跳动-懂车帝)

    计算机大三学生,正处于等待升到大四的暑假,感觉自己学校学到的跟招聘需要的条件差距很大,希望能利用这个比较长的时间提高一下自己的专业能力,也为自己毕业后找工作积累一点点经验. 根据我从网上得到的信息,说 ...

  8. 头条系 懂车帝 6.5.1 【之抹去儿时的恐惧】

    这个故事要从儿时开始讲起,记得我还是个小孩的时候,有一天接到了一个任务,就是搞懂车帝.我心想:我之前搞过汽车之家.易车之类的,既然他们都是车相关的app,四舍五入就等于一样呗.我摆出了个OK的姿势,对 ...

  9. 汽车APP迎变局,懂车帝跻身综合黑马应用TOP50

    QuestMobile于近期公布中国移动互联网APP黑马榜.其中,懂车帝APP入选综合黑马榜TOP50,成为榜单中唯一的汽车内容平台.尽管懂车帝的上线时间最晚,但却显示出了领跑行业的强用户粘性和活跃度 ...

最新文章

  1. 安装完之后设置动态ip地址
  2. 傲游浏览器记事本怎么打开
  3. 蔚来回应庄莉离职:不会因少数人员的正常流动受到影响
  4. python找色_[REST API] 用Python实现颜色识别功能----Total Control区域找色
  5. linux系统修改只读文件权限如(etc/hosts)文件
  6. (转)Managed DirectX +C# 开发(入门篇)(七)
  7. 非常强的用户体验的网站功能
  8. 模拟集成电路设计基础知识(二):MOS管二级效应及其小信号等效
  9. javaweb单点登录的三种实现方式
  10. 免驱 usb有线网卡_2020年末台式机amp;笔记本无线网卡最全选购指南amp;攻略,打造极致WIFI体验!...
  11. 一位资深程序员大牛给予Java初学者的学习建议
  12. 送你一份perl书单
  13. 刘易远:你自己,才是自己的救世主
  14. 安卓手机端一键抠图,这款软件适合你
  15. VUE2安装初始化步骤(2022)
  16. 免费好用的软件资源网站合集
  17. 计算机安全中心无法启动,windows安全中心,教您无法启动windows安全中心的解决方法...
  18. pixel 1手机如何刷到安卓7.1
  19. My New Mouse
  20. 百度地图交硬核成绩单,用AI推动的百度生态跃进时

热门文章

  1. iPhone支持杜比的机型
  2. 替换读到的文件中的某一元素 pd 格式
  3. 微信小程序解密出来是乱码的问题
  4. 微信开发获取昵称乱码 emoji表情
  5. 网站会员登录,注册设计
  6. [转载]人人旗下风车网产品经理的创业失败教训总结
  7. 深度理解PHP执行流程
  8. 通过PC控制、操作andriod 手机-androidscreencast
  9. 华为鸿蒙系统手机上市,6月2日华为要有大动作,不仅有鸿蒙系统,P50发布时间也将公布...
  10. Discarding record on action DISCARD on error 1403