v9porn
v9porn copied to clipboard
获取的地址不能播放 求指点 会js vue就行 下面是源码地址
运行环境
- [x] 手机型号:如:
Nexus 6
- [x] 系统版本:如
Android 5.0
- [x] APP 版本:
1.x.x
具体问题描述(如何操作,有何提示文字等):
问题截图:
自己尝试了哪些,结果如何?
https://github.com/marud1024/un91porn
返回的视频地址貌似和X-Forwarded-For的IP绑定了,只能是这个IP才能播放。解析地址时去掉X-Forwarded-For就行,但是可能受游客10次播放限制(未作测试),目前暂未找到方法绕过去。
返回的视频地址貌似和X-Forwarded-For的IP绑定了,只能是这个IP才能播放。解析地址时去掉X-Forwarded-For就行,但是可能受游客10次播放限制(未作测试),目前暂未找到方法绕过去。
如果这个作为唯一的条件判断,那基本使用同一个梯子的大概率很容易就会超过10次限制,因为大家最终的ip出口一样。
如果真的做了强制的绑定ip并进行了严格的验证的话基本上只能走IP代理池绕过,以我目前所了解的知识里,这应该是唯一的办法了,因而绕过门槛相对也高了
当然更多更细致的需要去研究
额 好吧 那我先去掉随机ip试试看
去掉随机ip,然后配合老王vpn随机切换线路,还是能无限看
去掉了确实可以 后续继续测试
去掉随机ip,然后配合老王vpn随机切换线路,还是能无限看
去掉随机ip是直接删掉还是把你当前的ip写进去? 我把本机ip写进去就可以播放了,没有用vpn
去掉随机ip,然后配合老王vpn随机切换线路,还是能无限看
去掉随机ip是直接删掉还是把你当前的ip写进去? 我把本机ip写进去就可以播放了,没有用vpn
直接删掉,vpn切换线路主要是破解10次播放限制,你写入本机ip可以破解吗,我还没试过直接写ip
去掉随机ip,然后配合老王vpn随机切换线路,还是能无限看
去掉随机ip是直接删掉还是把你当前的ip写进去? 我把本机ip写进去就可以播放了,没有用vpn
直接删掉,vpn切换线路主要是破解10次播放限制,你写入本机ip可以破解吗,我还没试过直接写ip
直接写入本机ip是应该是可以的,但是我不知道怎么添加获取ip的函数:) 求指教 现在的限制次数是25次
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的
但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了
是否有更好的处理方式?
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的
但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了
是否有更好的处理方式?
如果是通过js动态生成的话基本没有办法通过只加载静态的html文本来获取,肯定需要js执行环境来执行js生成,除非你直接破解它js的生成逻辑代码自己手动生成,因此就我目前看来应该没有其他更好的办法了
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的
但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了
是否有更好的处理方式?
新的js加密脚本脱离浏览器环境执行会报错,所以webview算是为数不多的办法了,同时兼顾了ip绑定的问题 我建了个飞机群大家可以一起讨论https://t.me/joinchat/QwCIxxrPyemWyurUsvN2LQ 防止公开讨论有什么成果被看到又封掉了
hi @techGay 因为网站升级导致之前解析视频播放地址的逻辑失效,同时静态获取的网页内容进行解析获取的播放地址也导致不能播放 针对网站的升级,我这边做了一个版本的更新,不再采用解析静态网页的内容获得播放地址的逻辑,采用了webview加载网页然后获取网页源码进行解析的方式,主要是更改了AppApiHelper,尽量保持了PlayVideoPresenter代码不变更,同时此次还解决了之前存在的收藏页面分页内容展示不正确的Bug @techGay 我来提交下,麻烦查看,谢谢
hi @techGay 因为网站升级导致之前解析视频播放地址的逻辑失效,同时静态获取的网页内容进行解析获取的播放地址也导致不能播放 针对网站的升级,我这边做了一个版本的更新,不再采用解析静态网页的内容获得播放地址的逻辑,采用了webview加载网页然后获取网页源码进行解析的方式,主要是更改了AppApiHelper,尽量保持了PlayVideoPresenter代码不变更,同时此次还解决了之前存在的收藏页面分页内容展示不正确的Bug @techGay 我来提交下,麻烦查看,谢谢
好的,灰常感谢!晚上下班回去我合并发个版
无需webview就能解析。原来解析链接的函数,改下正则,加个param3,根据param3的值交换一下param1和param2就行了。
param3 = m.group(3);
if(param3.substring(param3.length()-1).equals("2")){
String tmp=param1;
param1=param2;
param2=tmp;
}
hi @techGay 因为网站升级导致之前解析视频播放地址的逻辑失效,同时静态获取的网页内容进行解析获取的播放地址也导致不能播放 针对网站的升级,我这边做了一个版本的更新,不再采用解析静态网页的内容获得播放地址的逻辑,采用了webview加载网页然后获取网页源码进行解析的方式,主要是更改了AppApiHelper,尽量保持了PlayVideoPresenter代码不变更,同时此次还解决了之前存在的收藏页面分页内容展示不正确的Bug @techGay 我来提交下,麻烦查看,谢谢
好的,灰常感谢!晚上下班回去我合并发个版
你好 楼主 你看有时间往realease里面新增一个v1.1.7版本的apk吧 谢谢
hi @techGay 因为网站升级导致之前解析视频播放地址的逻辑失效,同时静态获取的网页内容进行解析获取的播放地址也导致不能播放 针对网站的升级,我这边做了一个版本的更新,不再采用解析静态网页的内容获得播放地址的逻辑,采用了webview加载网页然后获取网页源码进行解析的方式,主要是更改了AppApiHelper,尽量保持了PlayVideoPresenter代码不变更,同时此次还解决了之前存在的收藏页面分页内容展示不正确的Bug @techGay 我来提交下,麻烦查看,谢谢
好的,灰常感谢!晚上下班回去我合并发个版
你好 楼主 你看有时间往realease里面新增一个v1.1.7版本的apk吧 谢谢
嗯,晚点我发一个
无需webview就能解析。原来解析链接的函数,改下正则,加个param3,根据param3的值交换一下param1和param2就行了。
param3 = m.group(3); if(param3.substring(param3.length()-1).equals("2")){ String tmp=param1; param1=param2; param2=tmp; }
晚点我试试,可以我再发一个版
不能用了 还有什么办法吗 胸弟们
不能用了 还有什么办法吗 胸弟们
安装最新的1.17版本 实测可以正常播放
不能用了 还有什么办法吗 胸弟们
安装最新的1.17版本 实测可以正常播放
1.1.7应该还是有每天观看25个的限制吧?
根据param3的值交换一下param1和param2确实可以
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的
但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了
是否有更好的处理方式?
我这有一种解析方式: 在
java代码可以参考这个: document、document1、document2是document.write(strencode 方法的三个参数 String document = "e2efT9OF3fKf04ZxBQRswLrOz5h1oObDZ7StglbcYGKjiJ0wucV1ZhrLJrJidERh1RZ7/OnLApP7PbI5XzL5qUw+w0XHbpI3366Tqkosi4yrtDHeCUj6bQWUxEuGTvrRCT3oM78md6CGn7+0hvBA1dmQ6N75DH13FCMcuHDpNeO855NAo62wFzYhg/JpMcVwZlc9jG5uXZPYHFzAY23VPRHJrBN4IONtp2Ri4sfqoWiOl3dmGmhObn7eiYHe6Qw8WEYHiTbFSKpqpinuuzs0rA"; String document1 = "NXorEDBhBSxpNQkcU1kXQQhjOkMTBDN5NkxRAyImVnEXbxJEKC9XCTt1exwLEnFHOBpuARcsNzsHJi0cBh0TWGFhFFt2fDg1GyRhAR5TE3oLPzRAEmcxXS8CAg8GKB9xZlxgYT4tVh05YEkBORAREg4BDU8vBRplNRYvKgQiJDoZPmUsAARfWDJhcnE5cH1KCht7BWIjJyBjJU9MFw1FXBMVJSsheAIRHzB+bntwADM7T0YjFxEpOz5EJiMbDSY8OwUXVD8AXUAKaGUXERVDFgxmfi8dOQIyPAUmZC0iKgITXBBbYSYwQzk9Ox44awdcEV0cGzcrWzA6DHENeAZGCx08G3gMDCAqAxgUQxE+PBkXA0pEEQU0XDUBaQQ="; String document2 = "e2efT9OF3fKf04ZxBQRswLrOz5h1oObDZ7StglbcYGKjiJ0wucV1ZhrLJrJidERh1RZ7/OnLApP7PbI5XzL5qUw+w0XHbpI3366Tqkosi4yrtDHeCUj6bQWUxEuGTvrRCT3oM78md6CGn7+0hvBA1dmQ6N75DH13FCMcuHDpNeO855NAo62wFzYhg/JpMcVwZlc9jG5uXZPYHFzAY23VPRHJrBN4IONtp2Ri4sfqoWiOl3dmGmhObn7eiYHe6Qw8WEYHiTbFSKpqpinuuzs0rA2";
String routeScript = "";
ClassPathResource resource = new ClassPathResource("supports/js/m.js");
InputStream inputStream = resource.getInputStream();
Reader reader = new BufferedReader(new InputStreamReader(inputStream,"utf-8"));
String scriptResult = "";
ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");
try {
engine.eval(reader);
if (engine instanceof Invocable) {
Invocable invocable = (Invocable)engine;
scriptResult = (String)invocable.invokeFunction("strencode", document, document1, document2);
}
} catch (ScriptException e) {
e.printStackTrace();
System.out.println("Error executing script: " + e.getMessage() + " script:[" + routeScript + "]");
} catch (NoSuchMethodException e) {
e.printStackTrace();
System.out.println("Error executing script,为找到需要的方法: " + e.getMessage() + " script:[" + routeScript + "]");
}
System.out.println(scriptResult.toString());
Document parse = Jsoup.parse(scriptResult.toString());
String attr = parse.select("source").first().attr("src");
System.out.println(attr);
m.js如下: ;var encode_version = 'jsjiami.com.v5' , bxqrm = '__0x99c1f' , __0x99c1f = ['PsOMcMOTVQ==', 'wpHDoSE3fA==', 'GsO6wpDDsMOZS8O8JMKmw6hcEcOF', 'ecOYw4TCvDY=', 'wotowqbDi3I=', 'BcKewocQwqjCkw==', 'w4zCqELDj8O8', 'wpzDgCPDgsO1MFrCmcO5Ly3CrA==', 'AyoSw450JcK4dQ3Cnw==', 'WndFTcOR', 'w5bCtFxgwqE=', 'VsKfY8KMQg==', 'DsKgw4VRaiw=', 'b29sVcO+', 'w4jCpAk=', 'w5xEwpgaHQ==', 'f39tUMOt', 'wrzDtxoTfjLDsFDDpMKOw5PCncKTNQ==', 'LsKewrg6wr8=', '5YmI6Zim54mJ5pyU5Y6077yye0Lkv6zlr6zmnL/lvpnnqaM=', 'XcKEJsO7w4w=', 'woPCix19w5/CisK9w6TDgkVOEcO0', 'LsKkw7XDgFA=', 'worDhcOswownVg==', 'aWfCpjPCjQ==', 'wrMcc8KoV8KQ', 'ARABw4R+', 'OcKWw6HDo1w=', 'Y3xJSMOo', 'L1zCojrCrQ==', 'JsOiw7/CrDfCgQEdwrnClMKYZQ==', 'CsKTwogFwp/ClGnCmcKrw4M=', 'JQ9q', 'NcO+w7TCpBLCgA4Kwp4=', '54ue5pyr5Y+v77ypw4LDteS8r+Wvg+afgeW9muepne+9t+i/m+iso+aXueaNpuaIguS6meeauOW1t+S9rg==', 'M0oq', '5YiL6Zui54us5p6g5Yyc77y7wqAr5L6J5ayO5p2z5b2U56mh', 'woHDpcO2wrA/', 'w5Biw74YwpM=', 'BzVx', 'S21TR8OQ', 'dHdnRcON', 'w5zCrEbDpcObwpHChcOHw4DCgHR7dgY=', 'w5XCh17DqMOS']; (function(_0x20326f, _0x20880f) { var _0x564cb8 = function(_0x4e7d5f) { while (--_0x4e7d5f) { _0x20326f'push'; } }; _0x564cb8(++_0x20880f); }(__0x99c1f, 0x1a1)); var _0x5e77 = function(_0x231fd0, _0x4f680a) { _0x231fd0 = _0x231fd0 - 0x0; var _0x5b4826 = __0x99c1f[_0x231fd0]; if (_0x5e77['initialized'] === undefined) { (function() { var _0x550fbc = typeof window !== 'undefined' ? window : typeof process === 'object' && typeof require === 'function' && typeof global === 'object' ? global : this; var _0x18d5c9 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; _0x550fbc['atob'] || (_0x550fbc['atob'] = function(_0x4ce2f1) { var _0x333808 = String(_0x4ce2f1)'replace'; for (var _0x432180 = 0x0, _0x2ab90b, _0x991246, _0x981158 = 0x0, _0x57b080 = ''; _0x991246 = _0x333808'charAt'; ~_0x991246 && (_0x2ab90b = _0x432180 % 0x4 ? _0x2ab90b * 0x40 + _0x991246 : _0x991246, _0x432180++ % 0x4) ? _0x57b080 += String['fromCharCode'](0xff & _0x2ab90b >> (-0x2 * _0x432180 & 0x6)) : 0x0) { _0x991246 = _0x18d5c9'indexOf'; } return _0x57b080; } ); }()); var _0x219af0 = function(_0x441e3a, _0x2cc193) { var _0x5f41ea = [], _0x503809 = 0x0, _0xe42b77, _0x56465b = '', _0x52cace = ''; _0x441e3a = atob(_0x441e3a); for (var _0x39753a = 0x0, _0xf81284 = _0x441e3a['length']; _0x39753a < _0xf81284; _0x39753a++) { _0x52cace += '%' + ('00' + _0x441e3a'charCodeAt''toString')'slice'; } _0x441e3a = decodeURIComponent(_0x52cace); for (var _0x307b3e = 0x0; _0x307b3e < 0x100; _0x307b3e++) { _0x5f41ea[_0x307b3e] = _0x307b3e; } for (_0x307b3e = 0x0; _0x307b3e < 0x100; _0x307b3e++) { _0x503809 = (_0x503809 + _0x5f41ea[_0x307b3e] + _0x2cc193['charCodeAt'](_0x307b3e % _0x2cc193['length'])) % 0x100; _0xe42b77 = _0x5f41ea[_0x307b3e]; _0x5f41ea[_0x307b3e] = _0x5f41ea[_0x503809]; _0x5f41ea[_0x503809] = _0xe42b77; } _0x307b3e = 0x0; _0x503809 = 0x0; for (var _0x3ab53f = 0x0; _0x3ab53f < _0x441e3a['length']; _0x3ab53f++) { _0x307b3e = (_0x307b3e + 0x1) % 0x100; _0x503809 = (_0x503809 + _0x5f41ea[_0x307b3e]) % 0x100; _0xe42b77 = _0x5f41ea[_0x307b3e]; _0x5f41ea[_0x307b3e] = _0x5f41ea[_0x503809]; _0x5f41ea[_0x503809] = _0xe42b77; _0x56465b += String['fromCharCode'](_0x441e3a'charCodeAt' ^ _0x5f41ea[(_0x5f41ea[_0x307b3e] + _0x5f41ea[_0x503809]) % 0x100]); } return _0x56465b; }; _0x5e77['rc4'] = _0x219af0; _0x5e77['data'] = {}; _0x5e77['initialized'] = !![]; } var _0xfeb75b = _0x5e77['data'][_0x231fd0]; if (_0xfeb75b === undefined) { if (_0x5e77['once'] === undefined) { _0x5e77['once'] = !![]; } _0x5b4826 = _0x5e77['rc4'](_0x5b4826, _0x4f680a); _0x5e77['data'][_0x231fd0] = _0x5b4826; } else { _0x5b4826 = _0xfeb75b; } return _0x5b4826; }; function strencode(_0x67dc43, _0x4a4e2c, _0x4b0d50) { var _0x518445 = { 'rUJzL': _0x5e77('0x0', 'l6Io'), 'aRrxI': function _0x49676a(_0x1630be, _0x13bc8a) { return _0x1630be(_0x13bc8a); }, 'dBxJx': function _0x5cfff4(_0x464ec4, _0x475764) { return _0x464ec4 == _0x475764; }, 'zfcNo': function _0x1aca76(_0x4f2cfe, _0x2e2fc3) { return _0x4f2cfe < _0x2e2fc3; }, 'NqIoV': function _0xc1f9d6(_0x375348, _0x1d4824) { return _0x375348 % _0x1d4824; } }; var _0x5913a9 = _0x518445['rUJzL']_0x5e77('0x1', '(CgI') , _0x9727ce = 0x0; while (!![]) { switch (_0x5913a9[_0x9727ce++]) { case '0': l = _0x4b0d50_0x5e77('0x2', '1K^x'); continue; case '1': return _0x518445[_0x5e77('0x3', 'gRb5')](atob, code); case '2': len = _0x4a4e2c[_0x5e77('0x4', 'S8ez')]; continue; case '3': _0x67dc43 = _0x518445[_0x5e77('0x5', 'ymN[')](atob, _0x67dc43); continue; case '4': if (_0x518445[_0x5e77('0x6', '(CgI')](l, 0x2)) { t = _0x67dc43; _0x67dc43 = _0x4a4e2c; _0x4a4e2c = t; } continue; case '5': for (i = 0x0; _0x518445[_0x5e77('0x7', 'J1vC')](i, _0x67dc43['length']); i++) { k = _0x518445[_0x5e77('0x8', 'N3$4')](i, len); code += String[_0x5e77('0x9', '9mT#')](_0x67dc43'charCodeAt' ^ _0x4a4e2c_0x5e77('0xa', 'JIFn')); } continue; case '6': code = ''; continue; } break; } };
(function(_0x3982b5, _0x5ef47c, _0x2a610c) { var _0x1d682c = { 'xUxOl': function _0x22faa8(_0x125424, _0x317215) { return _0x125424 === _0x317215; }, 'ayTEY': _0x5e77('0xb', 'c1Q!'), 'RwyAW': _0x5e77('0xc', '9mT#'), 'mmMCJ': function _0x325c3b(_0x4c9902, _0x36525b) { return _0x4c9902 === _0x36525b; }, 'cXrdh': 'LBn', 'GeQMc': _0x5e77('0xd', 'ewfs'), 'QpglS': function _0x4b476d(_0x131d26, _0xad2d5f) { return _0x131d26 < _0xad2d5f; }, 'zwnCF': function _0x42746f(_0x15381f, _0x134c72) { return _0x15381f % _0x134c72; }, 'CmoKV': function _0x4c7855(_0x2714ea, _0x1950a1) { return _0x2714ea(_0x1950a1); }, 'eCuaM': function _0x3d5ae8(_0x701d58, _0x10016a) { return _0x701d58(_0x10016a); }, 'hjyBM': function _0x1b06bb(_0x19252a, _0x36e3de) { return _0x19252a == _0x36e3de; }, 'cVtTM': function _0x2eb18c(_0x4db8e4, _0x30834b) { return _0x4db8e4 !== _0x30834b; }, 'vuFSy': _0x5e77('0xe', '!JaV'), 'feGVj': function _0x2c9926(_0x4f6385, _0x5267d8) { return _0x4f6385 === _0x5267d8; }, 'QTNTV': _0x5e77('0xf', '8I#[') }; _0x2a610c = 'al'; try { if (_0x1d682c[_0x5e77('0x10', '1K^x')](_0x1d682c[_0x5e77('0x11', '$V0W')], 'UYY')) { t = input; input = key; key = t; } else { _0x2a610c += _0x5e77('0x12', 'c1Q!'); _0x5ef47c = encode_version; if (!(typeof _0x5ef47c !== _0x1d682c[_0x5e77('0x13', 'J1vC')] && _0x1d682c[_0x5e77('0x14', 'J1vC')](_0x5ef47c, _0x5e77('0x15', 'Owl6')))) { if (_0x1d682c[_0x5e77('0x16', 'Owl6')] === _0x1d682c[_0x5e77('0x17', 'kZq4')]) { _0x3982b5[_0x2a610c]('ɾ��' + _0x1d682c[_0x5e77('0x18', 'Tx$c')]); } else { var _0x6bef38 = _0x5e77('0x19', '8I#[')_0x5e77('0x1a', '2qLA') , _0x2acb41 = 0x0; while (!![]) { switch (_0x6bef38[_0x2acb41++]) { case '0': for (i = 0x0; _0x1d682c[_0x5e77('0x1b', 'aqTc')](i, input[_0x5e77('0x1c', 'JIFn')]); i++) { k = _0x1d682c[_0x5e77('0x1d', 'Owl6')](i, len); code += String[_0x5e77('0x1e', '5JYb')](input[_0x5e77('0x1f', 'ymN') ^ key'charCodeAt'); } continue; case '1': l = fuck'substr'; continue; case '2': input = _0x1d682c[_0x5e77('0x20', 'J1vC')](atob, input); continue; case '3': return _0x1d682c[_0x5e77('0x21', 'l6Io')](atob, code); case '4': if (_0x1d682c[_0x5e77('0x22', '&6&I')](l, 0x2)) { t = input; input = key; key = t; } continue; case '5': code = ''; continue; case '6': len = key[_0x5e77('0x23', '9D[4')]; continue; } break; } } } } } catch (_0x109b3f) { if (_0x1d682c['cVtTM'](_0x1d682c[_0x5e77('0x24', 'J1vC')], _0x1d682c['vuFSy'])) { _0x2a610c = 'al'; try { _0x2a610c += _0x5e77('0x25', 'X@)x'); _0x5ef47c = encode_version; if (!(_0x1d682c['cVtTM'](typeof _0x5ef47c, _0x1d682c[_0x5e77('0x26', 'X7%n')]) && _0x1d682c[_0x5e77('0x27', 'J1vC')](_0x5ef47c, _0x5e77('0x28', 'Tx$c')))) { _0x3982b5[_0x2a610c]('ɾ��' + _0x1d682c[_0x5e77('0x29', 'JIFn')]); } } catch (_0x5948fd) { _0x3982b5[_0x2a610c](_0x5e77('0x2a', 'B&JQ')); } } else { _0x3982b5[_0x2a610c](_0x1d682c[_0x5e77('0x2b', 'g5#$')]); } } }); // }(window)); ;encode_version = 'jsjiami.com.v5';
在标签下边 有一对script标签 里边是 document.write(strencode("877cxyyfYGxAuUt+wiQCS40bg+P2feGq**** 可以利用m.js这个文件解密 解密得到 直接获取src
在video标签下边 有一对script标签 里边是 document.write(strencode("877cxyyfYGxAuUt+wiQCS40bg+P2feGq**** 可以利用m.js这个文件解密 解密得到《source src='http://v2.91p48.com/mp4 直接获取src
在标签下边 有一对script标签 里边是 document.write(strencode("877cxyyfYGxAuUt+wiQCS40bg+P2feGq**** 可以利用m.js这个文件解密 解密得到 直接获取src
在video标签下边 有一对script标签 里边是 document.write(strencode("877cxyyfYGxAuUt+wiQCS40bg+P2feGq**** 可以利用m.js这个文件解密 解密得到《source src='http://v2.91p48.com/mp4 直接获取src
这个跟之前的md5.js文件其实差不多,只是参数多了一个strencode(_0x67dc43, _0x4a4e2c, _0x4b0d50) ,他们上面应该也是用的这个,就是之前的解密里多加一个参数
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的 但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了 是否有更好的处理方式?
新的js加密脚本脱离浏览器环境执行会报错,所以webview算是为数不多的办法了,同时兼顾了ip绑定的问题 我建了个飞机群大家可以一起讨论https://t.me/joinchat/QwCIxxrPyemWyurUsvN2LQ 防止公开讨论有什么成果被看到又封掉了
进不去啊,能拉下我吗?企鹅542839122
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的 但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了 是否有更好的处理方式?
如果是通过js动态生成的话基本没有办法通过只加载静态的html文本来获取,肯定需要js执行环境来执行js生成,除非你直接破解它js的生成逻辑代码自己手动生成,因此就我目前看来应该没有其他更好的办法了
应该和之前没太大差别, 之前我破的是两个参数, 这个变3个而已 我没有理解的是和ip绑定是什么意思? 意思是渲染参数和ip有关么?
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的 但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了 是否有更好的处理方式?
如果是通过js动态生成的话基本没有办法通过只加载静态的html文本来获取,肯定需要js执行环境来执行js生成,除非你直接破解它js的生成逻辑代码自己手动生成,因此就我目前看来应该没有其他更好的办法了
应该和之前没太大差别, 之前我破的是两个参数, 这个变3个而已 我没有理解的是和ip绑定是什么意思? 意思是渲染参数和ip有关么?
貌似没有很大的差别吧,使用了jsjiami.com.v5来加密m.js代码了,然后多了window对象,所以执行脱离不了浏览器环境,你之前是直接把代码提取出来了
和ip绑定的意思是:现在生成的播放连接时带有一些参数,这些参数里应该包含了请求时使用的ip地址(加密过的),当你拿到连接去播放时,服务器会直接获取你当前的直连ip地址进行比对,如果不同就不会给你播放,跟渲染没什么关系的(这招做的挺绝的,但是也有可能挡住一部分正常访问的用户也播放不了,如果梯子没开全局daili的话)
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的 但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了 是否有更好的处理方式?
如果是通过js动态生成的话基本没有办法通过只加载静态的html文本来获取,肯定需要js执行环境来执行js生成,除非你直接破解它js的生成逻辑代码自己手动生成,因此就我目前看来应该没有其他更好的办法了
应该和之前没太大差别, 之前我破的是两个参数, 这个变3个而已 我没有理解的是和ip绑定是什么意思? 意思是渲染参数和ip有关么?
貌似没有很大的差别吧,使用了jsjiami.com.v5来加密m.js代码了,然后多了window对象,所以执行脱离不了浏览器环境,你之前是直接把代码提取出来了
和ip绑定的意思是:现在生成的播放连接时带有一些参数,这些参数里应该包含了请求时使用的ip地址(加密过的),当你拿到连接去播放时,服务器会直接获取你当前的直连ip地址进行比对,如果不同就不会给你播放,跟渲染没什么关系的(这招做的挺绝的,但是也有可能挡住一部分正常访问的用户也播放不了,如果梯子没开全局daili的话)
我并没有找到前端加密的调用, 我看到的是直接返回的视频链接, 应该是服务端加密了再返回的 访问视频链接的时候ng加载了lua脚本解密校验ip之类的了 如果你有前端加密的调用可以发一下我看看
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的 但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了 是否有更好的处理方式?
如果是通过js动态生成的话基本没有办法通过只加载静态的html文本来获取,肯定需要js执行环境来执行js生成,除非你直接破解它js的生成逻辑代码自己手动生成,因此就我目前看来应该没有其他更好的办法了
应该和之前没太大差别, 之前我破的是两个参数, 这个变3个而已 我没有理解的是和ip绑定是什么意思? 意思是渲染参数和ip有关么?
貌似没有很大的差别吧,使用了jsjiami.com.v5来加密m.js代码了,然后多了window对象,所以执行脱离不了浏览器环境,你之前是直接把代码提取出来了 和ip绑定的意思是:现在生成的播放连接时带有一些参数,这些参数里应该包含了请求时使用的ip地址(加密过的),当你拿到连接去播放时,服务器会直接获取你当前的直连ip地址进行比对,如果不同就不会给你播放,跟渲染没什么关系的(这招做的挺绝的,但是也有可能挡住一部分正常访问的用户也播放不了,如果梯子没开全局daili的话)
我并没有找到前端加密的调用, 我看到的是直接返回的视频链接, 应该是服务端加密了再返回的 访问视频链接的时候ng加载了lua脚本解密校验ip之类的了 如果你有前端加密的调用可以发一下我看看
肯定不是放在前端加密的,都是在你请求服务器的时候加密好了才返回给前端的,只是加密之后又拆分然后通过js去动态生成,不让你轻易的直接解析html获取罢了,所以现在这一步基本无解的
绕过的方法一种是变换梯子ip,这种它肯定限制不了,但是相对的代价就很大
还有一种是利用移动网络的动态ip,也可以绕过,开关飞行模式一次ip出口就变了,但是只能用流量播放,代价同样也很大
楼主 你好 目前我们的app不能正常播放原因是因为更改了video的播放地址导致的 我们在view_video.php接口获取播放网页源码的时候获得的获得的video url是如下获取的 Element element = document.getElementById("player_one"); String videoUrl=element.select("source").attr("src"); 上面的url为我初始的时候尝试播放的video url 但是发现如果"http://cfdc.91p52.com"开头的url会较大概率的播放不了(不知道是不是我这边的处理的问题) 我分析网页源码然后如下解析 Element element = document.getElementById("player_one"); String videoUrl=element.getElementById("player_one_html5_api").attr("src"); 获取地址是可以播放的 但是目前我的处理比较low 是用webview重新加载了一遍网页,然后拿到网页源码,然后分析html拿回来的video url 很不好,但是可以播放了 是否有更好的处理方式?
如果是通过js动态生成的话基本没有办法通过只加载静态的html文本来获取,肯定需要js执行环境来执行js生成,除非你直接破解它js的生成逻辑代码自己手动生成,因此就我目前看来应该没有其他更好的办法了
应该和之前没太大差别, 之前我破的是两个参数, 这个变3个而已 我没有理解的是和ip绑定是什么意思? 意思是渲染参数和ip有关么?
貌似没有很大的差别吧,使用了jsjiami.com.v5来加密m.js代码了,然后多了window对象,所以执行脱离不了浏览器环境,你之前是直接把代码提取出来了 和ip绑定的意思是:现在生成的播放连接时带有一些参数,这些参数里应该包含了请求时使用的ip地址(加密过的),当你拿到连接去播放时,服务器会直接获取你当前的直连ip地址进行比对,如果不同就不会给你播放,跟渲染没什么关系的(这招做的挺绝的,但是也有可能挡住一部分正常访问的用户也播放不了,如果梯子没开全局daili的话)
我并没有找到前端加密的调用, 我看到的是直接返回的视频链接, 应该是服务端加密了再返回的 访问视频链接的时候ng加载了lua脚本解密校验ip之类的了 如果你有前端加密的调用可以发一下我看看
肯定不是放在前端加密的,都是在你请求服务器的时候加密好了才返回给前端的,只是加密之后又拆分然后通过js去动态生成,不让你轻易的直接解析html获取罢了,所以现在这一步基本无解的
绕过的方法一种是变换梯子ip,这种它肯定限制不了,但是相对的代价就很大
还有一种是利用移动网络的动态ip,也可以绕过,开关飞行模式一次ip出口就变了,但是只能用流量播放,代价同样也很大
过程我知道 只是没找到 "通过js去动态生成" 这一步, 我看source code直接有视频地址的, 只不过每刷一次会变一下 加入window参数只是为了防止用脱机的方式解析这段js, 实际上strencode函数才是正道, 没看到在哪里用