爱奇艺视频wasm转js分析,cmd5x算法脱离环境限制

  • 1.js代码扣取
  • 2.ast反混淆,平坦流
  • 3.脱离环境与调用

1.js代码扣取

文献1:XX视频H5解析分析过程
文献2:爱奇艺视频cmd5x解析算法的移植分析和实现(2019-08)

本篇文章建立在上面两篇文章的前提下,所以部分已经提到过的内容,就不再重复叙述

首先直接过滤视频信息接口

可以看到来自于pcweb.wonder.js,打开这个js


搜索【vf=】,只有一个结果,在生成之前下一个断点,重新加载网页。断点断下后可以看到,【r】参数是由【cmd5x】方法的得到,参数就是视频url的一部分。

进入cmd5x方法后,可以看到这个是webpack打包的js,使用了里面的第295个方法。那先把这个js下载,然后扣出来本地先测试一下。

在一般的webpack前面还有一段其他的函数,先手动删除,然后用之前的一键扣webpack来测试一下


非常漂亮,没有报错,跑一下导出函数是否正常

可惜报错了,这里出现了document,那么直接上jsdom。

可以出结果了,难道就这么简单?经过测试发现,生成的值和浏览器的不一样,这就是被检测node环境了

2.ast反混淆,平坦流

不着急,接下来单独把295的整个函数体拿出来调试

可以看到一开始有一个大数组,明显的ob混淆特征,用ast先去掉这个混淆看看

这时字符串都被还原回去了,但是还有很多了类似【“jxnRC” !== “fsFmd”】这样恒真或者恒假的代码,把这也处理一下


这时逻辑就更加清晰了,但是还有一些代码是在break或者return后面,是一定不会执行的废代码,也一起去掉吧


这时分析就更加方便了

通过上图可以确定,这个其实就是调用的wasm,但是网页并没有加载wasm文件,也没有把文件在写js中,哪里来的wasm呢?

实际上这个js是把wasm转换成了js,所有的逻辑都用js来完成


通过fd替换js文件后可以发现,js调用【cmd5x】方法实际就是调用的是【g】方法,这里的【g】方法应该理解成一个js层的方法

下面就可以分析出这个方法内部的逻辑,这里需要一个wasm调用的基本知识


1.首先是计算参数url的长度
2.然后申请申请长度+1的内存空间(因为字符串是以字节0结尾的,需要把这个算上)
3.然后把参数url复制到内存,然后调用【f】方法计算,这里的【f】应该理解为wasm层的方法
4.计算完成后释放之前申请的参数url的内存
5.然后把cmd5x计算的结果从内存中读出来,最后把这个计算结果的内存也释放掉

这里的重点明显就是这个【f】的函数了


wasm层的cmd5x函数绑定的是【ca】这个函数


但是【ca】函数这个控制流太恐怖了,有170+个case,直接分析明显是不明智的

3.脱离环境与调用

这里有一个点是,实际我们可以不分析这个【ca】函数,因为我们之前试过计算vf,是因为被检测了node的环境。但是wasm又无法直接操作BOM和DOM,如果wasm中要检测环境,这是一定要通过导入函数,才能进行检测的。所以,可以先分析一下调用到的所有导入函数。


这里的【bL】就是导入函数,就是参数的【b7】,也就是上面的【aI、L、M、aU、aV、aY、aX、aQ】

查看各个函数后发现,除了【aU】这个函数,其他都是非常短的,没有出现检测点

【aU】这个函数非常长,还有控制流,并且存在明显的检测点,所以这时应该分析的是这个函数。首先还是尝试使用ast去除控制流。过程稍微有点长,就不详细叙述


去除了控制流后,分析就简单很多,可以很明显的看出检测的地方。在我调试的时候,就发现了其中的秘密。我替换网页的js后发现,当环境检测正确时,这个函数的返回值必定是6,否则就会得出和浏览器不一致的结果。所以可以直接进行以下的修改

  function aU() {return 6;}

此时再运行js可以发现,结果就和网页的一模一样了

js调用方法


const t = require('./295_decrypt');
const vf = t.cmd5x('/dash?tvid=114869400&bid=300&vid=eac5b7e5c7d6c471a6635725f0173fdc&src=01010031010000000000&vt=0&rs=1&uid=1626142844&ori=pcw&ps=0&k_uid=49c360579e9a7cf874d599de913c6bff&pt=0&d=0&s=&lid=&cf=&ct=&authKey=b66ff0001e1568368db1f0827830ffeb&k_tag=1&ost=0&ppt=0&dfp=a11d64e2e196534268a0b9ab3908bffd86cec25e335c3269344667023b08b60afe&locale=zh_cn&prio=%7B%22ff%22%3A%22f4v%22%2C%22code%22%3A2%7D&pck=4aT95ShhWNgoEXxVzhFwU28qb6fXgiMIWS7d3DjB1t2KBKGj8m1Npt3LUz3KQauw35i99&k_err_retries=0&up=&qd_v=2&tm=1637337797663&qdy=a&qds=0&k_ft1=706436220846084&k_ft4=1162183859249156&k_ft5=262145&bop=%7B%22version%22%3A%2210.0%22%2C%22dfp%22%3A%22a11d64e2e196534268a0b9ab3908bffd86cec25e335c3269344667023b08b60afe%22%7D&ut=1');console.log(vf);

python调用方法

首先安装依赖库 pip install node_vm2

def get_vf(url):from node_vm2 import NodeVMwith open('295_decrypt.js', 'r', encoding='utf-8') as f:js = f.read()module = NodeVM.code(js)vf = module.call_member('cmd5x', url)print(vf)if __name__ == '__main__':main()

移植并优化后的文件

https://yuge592767809.lanzoui.com/i0DEiwstteh


更多内容欢迎加入我的星球

爱奇艺视频wasm转js分析,cmd5x算法脱离环境限制相关推荐

  1. 爱奇艺视频cmd5x解析算法的移植分析和实现Nodejs(2019-08)

    目录 爱奇艺视频cmd5x解析算法的移植分析和实现(2019-08). 什么是cmd5x算法 说明 大概 分析过程 首先 方案 关于调试 如何使用chromium的开发者工具对本地导入的代码进行断点调 ...

  2. 爱奇艺视频与腾讯视频竞品分析

    随着视频直播业的火爆,市场上视频直播的APP也层出不穷,这些APP主拼的内容和资源,更需进一步推动用户付费习惯的养成.从用户关注因素出发,以用户体验的多方面的校对市场上热门视频直播类APP进行对比分析 ...

  3. 【机器学习】机器学习在爱奇艺视频分析理解中的实践

    原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...

  4. 大规模机器学习在爱奇艺视频分析理解中的实践

    视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着AI时代的带来,互联网视频应用高速发展,视频更成为一种人人可生成的内容,数据量暴涨.如何利用机器学习将海量的视频内容充分利用起来,成 ...

  5. 【视频分析】大规模机器学习在爱奇艺视频分析理解中的实践

    原标题:大规模机器学习在爱奇艺视频分析理解中的实践 AI 前线导读:视频包含了图像.声音.文字等多种信息,可以表达生动.丰富的内容.随着 AI 时代的带来,互联网视频应用高速发展,视频更成为一种人人可 ...

  6. 仿爱奇艺视频,腾讯视频,搜狐视频首页推荐位轮播图(二)之SuperIndicator源码分析

    转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼:http://blog.csdn.net/hejjunlin/article/details/52510431 背景:仿爱奇艺视频,腾讯视频 ...

  7. 多模态人物识别技术及其在爱奇艺视频场景中的应用 | 公开课笔记

    [12月公开课预告],入群直接获取报名地址 12月11日晚8点直播主题:人工智能消化道病理辅助诊断平台--从方法到落地 12月12日晚8点直播:利用容器技术打造AI公司技术中台 12月17日晚8点直播 ...

  8. 爱奇艺视频千万级生产 Kubernetes 集群优化实践!

    本文介绍爱奇艺针对视频生产场景.在 Kubernetes(以下简称 K8s) 集群优化方面的实践:如何使高优先级任务获得更多的 CPU 资源,更快完成任务. 01    背景 视频生产集群所面临的一个 ...

  9. android银行卡匹配、详情展开动画、仿爱奇艺视频拖拽、扫码识别手机号等源码...

    Android精选源码 android实现银行卡匹配信息源码 android实现可以展开查看详情的卡片 下拉刷新,上拉加载,侧滑显示菜单等效果RefreshSwipeRecyclerview andr ...

最新文章

  1. 网络编程(原始套接字)
  2. 前端工程师需要掌握的技能
  3. 以太坊服务器是什么_搭建以太坊节点服务器https API
  4. 项目前端页面框架介绍
  5. 30 个提高Web 程序执行效率的好经验[转]
  6. 赛门铁克备份软件服务起不来_软件安全开发服务资质和信息系统灾难备份与恢复服务资质...
  7. Shiro系列-Shiro中Realm如何使用
  8. 瑞信中国前CEO唐臻怡加盟商汤科技出任副总裁
  9. Spring : ConcurrentMapCacheManager
  10. 微课系列(5):Python程序中__name__变量的用法
  11. 06Matplotlib数据可视化--6.1绘图基础
  12. 又一所小而精研究型大学!中科院与深圳共建,设AI等专业
  13. 恭喜51CTO视频课程认证讲师、博主李海园喜得姐妹花
  14. freeSWITCH 视频通话
  15. [转载] Python的变量与常量与基本命名规则
  16. mysql关联查询去重_mysql | 去重查询
  17. hbase权威指南学习笔记
  18. 【STM32】标准库 菜鸟入门教程(1)初识最小系统
  19. 为什么要使用ABP框架?
  20. ubuntu中使用ab压测

热门文章

  1. 微服务架构下得分布式事务解决方案
  2. 【蓝桥杯省赛真题33】Scratch奥特曼大战怪兽 少儿编程scratch蓝桥杯省赛真题讲解
  3. starnet php,C#.NET/PHP连接Access版的金碟财务软件数据库
  4. 如何让计算机断开网络连接网络设置,拨号网络怎么设置连接和断开
  5. Unicode汉字编号范围
  6. mysql字符为utf8_设置mysql字符编码为utf8
  7. 第五讲---树状数组与线段树(上课)
  8. Missing separate debuginfos, use: debuginfo-install 解决方法如下----笛风读书笔记系列
  9. Kolla ansible 部署 OpenStack Zed
  10. 如何使用Windows命令行diskpart 命令清理磁盘分区信息