【结束大吉】onlyfans的OB解密及DRM过校验思路(八)
所以我们接下来只需要给cdmServer拓展一下设置证书,在node部分拿到证书就可以了剩下的不算很难了,我就只罗列一些关键的代码
获取pssh,这里我偷懒排序取了个最小pssh
```js
function getPSSH(url, Cookie) {
return new Promise(async (resolve, reject) => {
try {
const { data } = await axios.request({
method: 'get',
url: url,
headers: {
'Cookie': Cookie
},
})
const reg = /<cenc\:pssh>(.*)<\/cenc\:pssh>/g
const psshArray = sortArray([...data.matchAll(reg)].map(item => item))
resolve(psshArray)
} catch (error) {
console.log(error)
reject()
}
})
}
```
然后获取证书
```js
const certificate = await new Promise((resolve) => {
axios.post(domain + cdmServer, buf, {
headers: cdmHeader,
responseType: "arraybuffer"
}).then((response) => {
resolve(response.data.toString('hex'))
}).catch((err) => {
console.log('err', err)
})
})
```
在服务器端判断是否有证书,有的话就设置
```python
certificate= form.get("certificate")
if not certificate is None:
certificate=bytes.fromhex(certificate)
cdmInstance.set_service_certificate(cdm_session_id,certificate)
```
那么我们就可以拿到密钥了,先在js创建一个密钥数组
```js
const keyList = data.data.map((item) => item.key).map((key) => {
return '-decryption_key ' + key
})
```
分别解密mp4和m4a
```js
const fileList = await downloadDRMViedeo(mpd, baseDir, mediaItem.id, Cookie)
const mergeFile = []
for (let index = 0; index < fileList.length; index++) {
const filePath = fileList
await new Promise((resolve) => {
ffmpeg().input(baseDir + '/' + filePath).inputOptions([
...keyList,
]).audioCodec('copy').videoCodec('copy').output(baseDir + '/drm_' + filePath).on("end", () => {
mergeFile.push(baseDir + '/drm_' + filePath)
resolve();
}).run()
})
}
```
然后将两个视频合并到一起就可以了
```js
await new Promise((resolve) => {
ffmpeg().input(mergeFile).input(mergeFile).audioCodec('copy').videoCodec('copy').output(baseDir + '/decrypt_drm_' + mediaItem.id + '.mp4')
.on('error', function (err) {
console.log('An error occurred: ' + err.message);
})
.on('end', function () {
resolve();
})
.run();
})
```
最后调用deleteVideoFiles分别删除残余文件
```js
await deleteVideoFiles(baseDir, mediaItem.id + '')
await deleteVideoFiles(baseDir, 'drm_' + mediaItem.id)
```
这里的删除是我组合的功能函数,也抄了网上的
传入路径和文件前缀就可以自动删除
```js
function deleteFiles(files, callback) {
if (files.length == 0) {
callback()
}
var i = files.length;
files.forEach(function (filepath) {
fs.unlink(filepath, function (err) {
i--;
if (err) {
callback(err);
return;
} else if (i <= 0) {
callback(null);
}
});
});
}
async function deleteVideoFiles(path, id) {
return new Promise(async (resolve) => {
const files = await getVideoFiles(path, id)
deleteFiles(files, resolve)
})
}
```
那么就实现了onlyfans的drm解密啦!
因为没法贴图,所以这里贴个玩偶姐姐代替图吧

完结撒花~ ggnbbbbbbbbbbbbbbbbbb 这个是注入浏览器的js代码来用的么
没接触过js看的一脸懵 pein 发表于 2025-3-28 16:32
这个是注入浏览器的js代码来用的么
没接触过js看的一脸懵
不是的,这个是drm视频下载的处理分析
方便爬虫用的 李恒道 发表于 2025-3-28 18:24
不是的,这个是drm视频下载的处理分析
方便爬虫用的
{:4_88:}最近在做下载器项目,遇到了这些drm视频加密,完全没头脑,这个帖子看完,发现基础差太多了...好多地方不太懂
我再多看几遍{:4_88:} pein 发表于 2025-3-31 17:09
最近在做下载器项目,遇到了这些drm视频加密,完全没头脑,这个帖子看完,发现基础差太多了...好多地方不太懂 ...
慢慢来
我当时写这个陆陆续续其实折腾了快一个月QAQ 李恒道 发表于 2025-3-31 20:51
慢慢来
我当时写这个陆陆续续其实折腾了快一个月QAQ
膜拜大佬~
我是搞了好三周了hhhhh
在做网飞和of还有一些音乐网站的下载器
一开始信心满满,以为就是个请求逆向,算法逆向,后来发现什么drm pssh license 乱七八糟一堆东西,网上资料又少之又少
好在有游猴看到大佬的帖子,学习了解了不少,照着三个月做去了{:4_88:} pein 发表于 2025-4-1 16:46
膜拜大佬~
我是搞了好三周了hhhhh
在做网飞和of还有一些音乐网站的下载器
国内资料是比较少
也可以去看看videohepler论坛
我很多资料都是根据那里大佬得来的
页:
[1]