吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2194|回复: 25
收起左侧

[Web逆向] WEB前端逆向定位ts后处理代码

  [复制链接]
scz 发表于 2024-6-30 19:32
创建: 2024-06-30 16:27
更新: 2024-06-30 19:16

WEB前端逆向初学者的若干备忘。

m3u8+ts是视频网站常见套路。大致是混淆js,隐藏m3u8的实际构造过程,下载加密过的m3u8,解密,下载异化过的ts,js还原ts,播放。中间可能动用wasm,也可能不动用,当它是个动态链接库好了,不影响整体流程。下载m3u8的URL可能并无m3u8字样,下载wasm的URL可能并无wasm字样,这些都是常见套路。但Network面板会暴露这些蝇营狗苟,不管下载ts的URL有无ts字样,你看它扑棱扑棱地下,这本身就是强特征,太扎眼,那前面大概率有m3u8下载。从Initiator的调用栈回溯看过去,若没有混淆就放过,谁有混淆谁就是嫌犯,甭管是不是下载m3u8,反混淆调一拨,必有所获。从逆向工程角度看,扎眼的保护措施是逆向目标强指示。

大部分时候对m3u8的保护最强,对ts和wasm的保护一般。若ts经私有异化处理,即便猜中反异化套路,好奇心强的也不大满意,总想看到实实在在的反异化处理代码,用人话说,想在下载ts后调试跟踪到ts后处理代码所在。

参看

《WEB前端逆向随笔》

https://scz.617.cn/web/202406251509.txt

常规套路是拦截XHR或Fetch,拦请求。若是Fetch,直接在代码下方找then之类的块。若是XHR,假设是h.send(),在h中找onreadystatechange之类的,设断,命中。这两种情形对于调试者无需区分什么,后面只说XHR的情形,就从onreadystatechange说起。从这儿开始单步,就比较扯淡了,有些复杂的,基本绕晕。但我们只关注ts后处理不是?而且你碰到的,是不是大概率用到HLS的某个js?假设叫hls.js吧。

在HLS (HTTP Live Streaming)中,demux是demultiplexing(解复用)的缩写。解复用是指将多路复用的媒体流(包含视频、音频、字幕等不同的媒体轨道)分离成独立的轨道,以便进行进一步处理或播放。这GPT忽悠我的,要点是,demux与ts后处理相关。

在hls.js中直接搜"demux",可能有多个命中,找一个形如这种的:

x.postMessage({
    cmd: "demux",
    /*
     * data是加密状态的ts
     */
    data: t,
    /*
     * decryptdata这种key名很扎眼
     */
    decryptdata: m,
    ...
})

形如这种的命中应该只有一个,这就是要开始处理ts了。在这儿设断,命中,调用栈回溯,有些复杂的,离onreadystatechange可远了,中间某些帧不是单步可以抓住要点的。在postMessage处F11 Step into,之后在Page中能看到一个新增的blob,在Network面板Name列会看到:

blob:https://...

blob的名字是个uuid,刷新后会变,其Type列是"text/javascript",这种是从内存动态加载的js,不走网络,ts后处理代码就在这种blob中。blob的源一般在hls.js中,但执行的是blob中的副本,而不是hls.js中的源。可在blob创建之前修改hls.js中的源,间接修改blob中的副本。拦截"URL.createObjectURL",查看调用栈回溯,定位blob创建代码。

Network面板看到blob,其前面那个请求一般是下载第0号ts。

可以调试blob中的代码。但没必要傻单步。在blob中继续搜"demux",会有个命中:

case "demux":

这个对应前面的

cmd: "demux"

在case处设断,执行,命中,从case处单步,这个时候就简单多了,不太可能绕晕。一般单步一会儿就能找到ts后处理代码,比如ts伪装成png时,去png头,比如ts经AES加密过,需要AES解密。找到ts后处理代码时,可以查看下载回来的原始ts数据,可以查看用于AES的key、iv等数据。它用的AES解密代码不一定是外部js库提供,可能就是blob中内置的完整的AES算法函数,可查看in/out,与"CyberChef/AES Decrypt"对一下。其他形式的ts后处理代码,理论上也能用这个办法快速定位,没碰上过,不好说。

我第一次碰上"demux",是ts伪装png头,虽然我找到了ts后处理代码,当时并不知道换一种ts异化处理该如何快速定位ts后处理代码,对HLS这些完全不了解。不过我有个记录调试过程的习惯,并不只记录调试结论,所以当时一些单步经过的点、一些调用栈回溯,我都记在TXT中。过了些日子,在另一个测试案例中碰上AES加密ts,我就合理推测,可能当时记录的内容中,有些关键点在新案例中同样存在。搜了搜postMessage,有好几个命中,当时没有意识到那只是不同cmd的postMessage,但在肉眼遍历时看到cmd为"demux"的postMessage,这就新旧对上了。接下来就好办了,设断,验证一下调用栈回溯,是不是大体类似。快速找到AES解密代码后,问GPT,demux有啥特殊,GPT给我一通忽悠,进一步对上。

逆向工程的许多东西,说穿了就两句话,说穿后一钱不值,没说穿前,难者不会。但有些东西,你说穿了千百遍,看客也未必明白真正的要点在哪里。上面这段,我说的不是ts后处理的事儿,我说的是方法论。

免费评分

参与人数 7威望 +1 吾爱币 +27 热心值 +7 收起 理由
xiaoshuaifeng + 1 + 1 谢谢@Thanks!
MFC + 1 + 1 谢谢@Thanks!
chly0828 + 1 + 1 谢谢@Thanks!
涛之雨 + 1 + 20 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
外酥内嫩 + 1 + 1 我很赞同!
刺心 + 2 + 1 谢谢@Thanks!
asking2023 + 1 + 1 谢谢@Thanks!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| scz 发表于 2024-7-2 13:50
kidll 发表于 2024-7-2 09:22
师傅,可以出一期有关F12后无限debug的处理方法吗?无限debug后,就无法看JS,很头疼

现在都是js混淆掩护无限debugger,这只是个表象,你得看debugger怎么得到执行的,所以,最根本的办法还是AST反混淆,这个你得自己学Babel,我自己是看两本书入门的:

《Python 3网络爬虫开发实战(第二版)_崔庆才》
《反爬虫AST原理与还原混淆实战_李岳阳》
xixicoco 发表于 2024-6-30 20:11
surepj 发表于 2024-7-1 07:45
asking2023 发表于 2024-7-1 09:28
感谢分享
mygrace 发表于 2024-7-1 09:37
牛,值得学习
刺心 发表于 2024-7-1 11:29
学习四哥
丨丨丨丨 发表于 2024-7-1 13:12
感谢分享
adjclubyb 发表于 2024-7-1 13:27
仰望大佬,多来52发文章
guiguiaa 发表于 2024-7-1 16:35
学习大佬!
朕来打江山 发表于 2024-7-1 17:06
学习 授之以渔~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-22 10:20

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表