网页抓取解密(网页版AES:1.的函数())
优采云 发布时间: 2022-02-19 22:24网页抓取解密(网页版AES:1.的函数())
一、网络 AES:
1.首先,我们在浏览器中打开“西丽西丽”的网页。
2.F12 打开“开发者模式”-“网络”。(众所周知,一般这种视频是m3u8.)
3.点击视频进去4.搜索“m3u8”,真的是m3u8流
5. 然后直接搜索这个m3u8的文件名,结果没有找到,那么应该是加密了
6.然后我们尝试搜索这个视频的ID,可以发现有3个相关请求:“视频推荐”、“演员信息”、“当前视频信息”(PS:这个ID是稍后添加,在屏幕截图之前是另一个)
7.上图中的/video/info是哪里来的?别着急,ctrl+f搜索,果然找到了一个js文件。
8.我们从sources打开这个文件,搜索/video/info,找到getVideoInfo的一个函数(注意a的值是从headers中获取的)
9. 然后低头看到一个decryptString,那我猜这应该是解密函数,然后搜索decryptString,找到函数
10.分析这个函数:
t = 得到加密字符串, o = 取 md5, e = 取 md5 然后取出从第 8 位开始的 16 位字符串
所以通过计算当前视频的iv和key
11.然后我们尝试用AES解密
12. 解密成功,获得m3u8地址。拼接好主机后直接打开,发现无法播放。
让我们回到网页捕获数据包。原来m3u8地址后面有一个token参数。添加令牌后,打开正常播放。
13.值得注意的是,在获取/video/info时,需要在headers中添加origin、platform等,否则返回的是视频介绍,不是完整的视频。
所以在使用我哥的M3U8下载器时,需要自定义协议头:Origin
二、在网页上获取用户的Token:
攀登时问题来了,每个用户只能免费观看30个视频。然后让我们获得更多用户:
感觉应该是因为token(一个token代表一个用户),那么我们需要了解一下token是怎么产生的:
1.F12打开“开发者模式”-“网络”,刷新页面,搜索token的值,其实这个pwatoken是一个参数,只会在第二次访问时可用,
我们新建一个隐身窗口或者小窗口,打开F12.找到一个新的界面mail_pwa_temp。建议全程使用抓包软件。
可以看出token是mail_pwa_temp返回的,看提交的参数,post提交的是pwa-ckv
那么这个 pwa-ckv 是从哪里来的呢?其实我们访问首页的时候会返回一个license,就是pwa-ckv
PS:但是,当我们设置帖子内容为pwa-ckv=1时,出现了一个有趣的现象(附:好像任何帖子都会返回会员的token,包括空格)
这在浏览器中体现如下:
没错,这是2级VIP(所谓的尊贵VIP账号),那么他的token就可以无限拍摄视频了。
看来爬行速度不能太快,会很频繁。
三、网页版实现无限制观看的两种方法【方法已过期,将强制退出,token已被封禁,无法再使用此token抓视频】:
第一种:FD的自动回复,这个我就不说了,直接把token换成前面得到的honor token
第二种:JS打印这个,步骤如下:
1.打开会员页面,点击账号后面的刷新,会提示刷新成功,我们搜索“刷新成功”,不难发现在文件中调用应用程序.XXXXXX.js
2.搜索“refresh_success”,可以找到getUserInfo的功能,
3. 给这个函数设置断点,刷新个人信息,然后我们打印出来这个
4.在控制台输入 temp1.$store.state.newToken = 'Honor token'
这里提到的honor token就是第二步抓到的token,字符串长度大约是145。
您可以在浏览器中将其更改为尊贵的VIP,并享受无限观看。(值得注意的是,网页一刷新就失效了……可以再次操作)
四、在APP端实现真正的无限制查看【方法已过期,将强制退出,token已被封禁】:
其实原因很简单,就是将APP中返回的Token固定为之前获得的尊贵VIP的Token。
1.首先我们抓包并下载APP。果然 Token 和网页版一样使用,只是调用接口不同。
2.然后我们打开MT管理器或者NP管理器,尝试搜索方法名中收录Token的内容。
3.找到了2个相关的getToken函数,让我们点进去修改一下,返回之前获取的Token
4.app编译完成后,打开查看效果。
5. 果然成了尊贵的贵宾。
虽然它显示的是每日观看限制,但实际上你会发现它是无限观看
五、真正实现APP端无限观看:
其实原因很简单,第一次打开APP需要注册。然后我们将注册的参数修改为随机,这样每次清除数据后打开APP都是一个新的体验用户。
因为在SMALI中重新添加函数有点复杂,所以我这里直接调用APP原来的随机函数(PS:这个随机是我用的函数的缩写,你可以试试其他随机函数)
下图是NP管理器修改为JAVA前后代码的区别:(思路是给this.d分配随机字符)
这种方法比第四步稍微困难一点,但也只是稍微困难一点。
我相信你们可以抓住数据包并获取一些信息并再次完成它。
我不会在这里详细解释。防止和谐,有能力的可以试试。这对我这个自学成才的半生不熟的人来说并不难,相信你也不会觉得难。
PS:抓包还可以找到/user/info接口返回的expiry、level、user_id等信息。通过MT管理器或者NP管理器搜索方法名,发现都在ResponseUserInfo类中:
例如getLevel(const v0, 0x2 1是正常/2是荣誉)、getExpiry(const v0, 0x746a6480)等。
修改后发现只在本地显示。