wy168 发表于 2022-8-28 05:48:50

某站视频真实地址解析过程,都被这些技术宅破解了,解析教程

<div id="1f0ffbf2-3708-4662-b509-8b9ad6152a51" style="font-size:18px;margin:20px 0px;text-align:left;"><p id="53b5a663-affc-4a6c-a795-52347b836aff" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">前不久看到一篇关于BibiBili视频地址解析的源码,正好有兴趣,就自己也研究了研究,记录一下。</p><p id="b62ef8cb-7641-4a07-95d5-a86a659b32bf" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="dd7d2806-e965-47b0-a63e-c1c3b8877029" style="font-size:18px;margin:20px 0px;text-align:left;">1.以http://www.bilibili.com/video/av12535537/ 此视频为例用HttpWatch抓包,很容易就能看出视频的地址是从https://interface.bilibili.com/playurl?quality=4&amp;player=1&amp;cid=20627240&amp;ts=1504780011&amp;sign=f37df88434579a4b009a2bee708a2a71&amp;qn=112里获取的</span></p><p id="0c22be47-9608-4e57-af08-e4748f72e4e1" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">按照常例分析下参数:</p><p id="ceb8d3d7-862d-4e6a-b800-618864ba4a75" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">cid很容易猜测出是视频的ID号,在网页源码里面也能找到</p><p id="440ae1ec-c80e-4cc5-bbaa-16a3e5533ec0" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c340004e9ec45bb4d2f~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=gRcoVO7FBtd%2Btk7h2neSTiko8bU%3D" style="width:100%;"></p><p id="39faa09a-6d8c-4bfb-b9ff-a6ac627069e3" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="a503c7dc-0140-4a4d-803a-b4c7d8ad2a47" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">Quality和qn是视频的清晰度</p><p id="3e2e61e3-4bb9-4981-b2c4-ad78ffe4e0c0" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ts则是时间戳,这个也不用多说</p><p id="2d983458-6052-49a6-9dce-99417baa027d" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="93500bfb-59da-4104-95df-fc9e7e26ae20" style="font-size:18px;margin:20px 0px;text-align:left;">关键就是这个sign,在HttpWatch中是完全搜不到任何相关的信息的,但网页访问了http://static.hdslb.com/play.swf这个文件,那么sign算法很可能就在这个播放器里。</span></p><p id="bdd797a2-72f8-437c-bfb6-705557e7b76d" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">2.下载这个SWF文件后,载入AS3 Sorcerer,代码一大片不是很好找</p><p id="50ce3694-1160-4dcb-806a-8a0ab9690f92" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="2afab5a9-ddf8-4500-b479-9cb59e866859" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c35000401d0b693aa3a~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=wFxuiK%2BX55qXrxxTbq5rzVZLYPU%3D" style="width:100%;"></p><p id="ec8c969b-a0c7-4b79-a4a8-a6aa4ecbe8c9" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">那就保存到文本里,在文本中查找视频地址这个关键字。</p><p id="d609ef9b-f630-49ec-ab0a-af1da0f25b37" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="2a328772-3430-44a8-90eb-a187981e5a5a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c3700039545a33226eb~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=kbMOzjlQRQuFNjDmDnw7N4McmsQ%3D" style="width:100%;"></p><p id="b531063c-3439-47a9-909f-0bc7c11a3686" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">很快就能定位到关键的函数LoadPreview和LoadCidVideo那么接着搜索LoadPreview和LoadCidVideo定位到函数部分,可以看到代码如下</p><p id="b09ebcea-44b0-4bea-a9e3-4b4e7e52843a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="77955a16-4f92-47db-a6bb-784544083935" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c340004eafa7b38a067~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=8EXCAIJxJdmYfuwvNBlF1%2FzMdKE%3D" style="width:100%;"></p><p id="03e5b8f6-c415-4809-84a4-fafc0b7262ee" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c380002a7d34f8aa0b2~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=vgC1D%2BmMsIjeTYqFNjwdY%2Bcj1oU%3D" style="width:100%;"></p><p id="d3d6fb90-4114-450f-9fcc-534858b56a6c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">那么关键算法就是在getSign和getSign_v2里面了</p><p id="88bf16c6-9fb2-4fdc-ae6e-f78f673a6479" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">public function getSign(_arg_1:String):String</p><p id="14e44378-d27a-4a2f-abe4-f7c5e6875a59" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="4a906b08-589d-435f-8c49-71e122d0dc57" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_2:int;</p><p id="18292587-23de-45ac-99d7-c1cd35b2ac01" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_4 = null;</p><p id="8f65ea5a-9970-4502-b718-7c5477e6bae6" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_7:int;</p><p id="c667bff5-515f-4b21-9335-c4d87fc4e5ad" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_8:int;</p><p id="92dcb729-9fee-45a1-bc9c-b54caa236ee4" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_6:int;</p><p id="730907d3-1ee0-44b2-8373-f441bd899785" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_5:int;</p><p id="143786c4-c6bf-49f7-ab04-1211dcf0fddb" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_3:int = ESP;</p><p id="b3348cc5-fcbe-4c40-9dac-31134b9041fc" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_2 = _local_3;</p><p id="637f533b-bccb-4827-948f-1230670ec210" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = (_local_3 - 48);</p><p id="2752b6eb-ffe8-4731-81da-eebe8df575d0" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_5 = 16;</p><p id="dafa65f7-393c-4a8f-9009-c3e49632bae7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_6 = (_local_2 - 37);</p><p id="218fc096-74fc-4443-a99c-b3ab7effd76b" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = (_local_3 &amp; -16);</p><p id="79aa10b5-3fe7-4d67-947f-479f2775ad85" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_7 = CModule.mallocString(_arg_1);</p><p id="7d3da9fc-fb3d-41c5-8068-18d04d0c87ec" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_8 = _arg_1.length;</p><p id="74028a96-163a-46c0-88a0-9d30e6dc3400" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">do</p><p id="8cb7df6c-eb56-4266-976f-3b3335322b75" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="0dfb4100-3e3a-4a60-a6a3-6af9b1f56153" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_9:int = (L__2E_str2 - _local_5);</p><p id="18e707c2-eaf5-411c-9714-450d08ab964b" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_9 = li8((_local_9 + 16)) /*FlasCC (Alchemy)*/ ;</p><p id="0ce2c7e9-63ff-48fa-991d-1a7fdcc61079" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = (_local_3 - 16);</p><p id="c4f5cdb5-db77-4045-b13e-82daffe3d072" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_9, (_local_3 + 4)); //FlasCC (Alchemy)</p><p id="3be64e0f-c5c8-4cbf-9527-e75a2748e6d0" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_6, _local_3); //FlasCC (Alchemy)</p><p id="056ac4d7-89e9-47ff-903c-64048a89a8fe" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_3;</p><p id="bcec2c80-6e86-44f6-b0af-ef8a292416ef" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">F_sprintf();</p><p id="a759ddee-eee5-43fb-b2de-6b061ac76e15" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = (_local_3 + 16);</p><p id="653c1f1f-cf08-41cd-b57a-c11c6e95a85c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_5 = (_local_5 + -1);</p><p id="a35218cb-1516-4a27-806c-a4412559c4a4" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_6 = (_local_6 + 2);</p><p id="8a8c9fb2-6348-471f-a7f7-323b6de13da4" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">} while (_local_5 != 0);</p><p id="75499b87-3077-4c2e-a553-453fd532a56f" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = (_local_3 - 16);</p><p id="d93144e5-5d63-467a-86ae-028d69bab25f" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_9 = (_local_2 - 4);</p><p id="8e2b120a-e32d-4c23-8710-3761545bb6d7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_9, (_local_3 + 12)); //FlasCC (Alchemy)</p><p id="fa6b6a80-e552-4b12-bef0-369c80bc9bc6" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_9 = (_local_2 - 37);</p><p id="a4e08741-e128-49a7-af21-1d506c926196" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_9, (_local_3 + 8)); //FlasCC (Alchemy)</p><p id="3ce8842e-d263-4042-92c5-2a58b828a8a7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_8, (_local_3 + 4)); //FlasCC (Alchemy)</p><p id="0efb5f2d-3c09-4dc3-9059-11c3e7c62a22" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_7, _local_3); //FlasCC (Alchemy)</p><p id="8c145610-cf32-40dc-89f5-c37f84c47442" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_3;</p><p id="a84a362b-732d-4142-9000-92a414497b9f" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">F_get_sign();</p><p id="b1eab0d9-5529-4b74-8210-430743663bb8" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = (_local_3 + 16);</p><p id="1e3bc741-eea8-4d97-9295-3a61d1585991" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_5 = eax;</p><p id="e8421704-22d7-437c-8681-30ef4793b5e3" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_9 = li32((_local_2 - 4)) /*FlasCC (Alchemy)*/ ;</p><p id="9ab7d727-537b-4838-8df0-d847128850f9" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = CModule.readString(_local_5, _local_9);</p><p id="8a7de927-fcd3-4ab8-b9f5-c612943bf1d9" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">if (_local_7 != 0)</p><p id="0b7ccc56-c3ec-4d5a-bd35-607704064f5a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="fcd7c1e5-f250-484e-9524-a91aa86ac5d4" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = (_local_3 - 16);</p><p id="5efa1dbc-b340-4d5a-ba84-23e97af35a23" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_7, _local_3); //FlasCC (Alchemy)</p><p id="c1c022a2-ceff-4f19-be29-7991f7b749de" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_3;</p><p id="3a30740a-f1f5-4cd4-b601-0dbde78dd54b" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">F_IDAlloc();</p><p id="4d46714d-d508-46a1-80e9-9375eaf1489d" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = (_local_3 + 16);</p><p id="7e770697-5eca-4a6e-b39b-8c2021874c1a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">};</p><p id="5a6f6676-1db6-439e-a208-2d1728befbe5" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">if (_local_5 != 0)</p><p id="a2347240-d5fa-4187-9852-a2f51f5337dc" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="0e6a9f28-a512-4c79-874f-fb67e3626591" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = (_local_3 - 16);</p><p id="1ea66350-686f-4321-9e84-f322531e6eeb" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_5, _local_3); //FlasCC (Alchemy)</p><p id="07b748ed-e69d-48e8-8e55-9ef16237d5b9" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_3;</p><p id="ac7072e9-9d9d-466a-a63f-f13bc715bee2" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">F_idalloc();</p><p id="e794b66f-4b28-424d-af0e-9656e2c9c7ca" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = (_local_3 + 16);</p><p id="6145274c-961a-461d-a238-d213c40d20b6" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">};</p><p id="69393ff0-8728-4768-a5e9-bac3fee1f787" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_10 = _local_4;</p><p id="9fb7a78c-022a-4961-9b01-0280d4286204" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = _local_2;</p><p id="b4d3ab5d-88e2-4876-93f3-9e56712d8521" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_3;</p><p id="92ceacc8-8307-4a01-8fc6-25f05415738f" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">return (_local_10);</p><p id="ec08398c-510c-4b44-9e37-216e69d8c7e7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">}</p><p id="42a9ad30-3102-4642-8eb6-e9e4a7b1678a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">}//package com.bilibili.interfaces</p><p id="c57cc8d5-756a-4e6b-8d72-91dd78b2cc9c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">public function getSign_v2(_arg_1:String, _arg_2:int):String</p><p id="a5161788-4957-4cb4-a6fb-dde30303bba9" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="44c63a3c-7902-4b99-99db-c04998176354" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_12:*;</p><p id="27b52295-7c98-4331-9b8f-c772207d4226" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_3:int;</p><p id="f2b72506-6409-439a-8fee-9de066ec1b22" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_5 = null;</p><p id="059e867b-3ca6-439d-8a54-e3883ee6d0fe" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_6:int;</p><p id="55ab1ee5-8468-4f9f-ae4e-828454470781" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_11:int;</p><p id="801e365f-2b11-4dca-853d-39d6ce44daed" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_8:int;</p><p id="d8e096d2-f903-4aa8-a278-b35259e23ed9" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_10:int;</p><p id="43a1cb22-df62-426c-9c29-e7ff07400d1c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_9:int;</p><p id="18b8ce80-1e69-40d8-aa51-37148c43c1ea" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_4:int = ESP;</p><p id="b8377f1b-91e0-4533-ba74-9bb4380056a9" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_3 = _local_4;</p><p id="eb64f416-c718-411b-8dbb-c72df7aa8a9c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = (_local_4 - 48);</p><p id="6e9feb4e-66c5-4def-acc5-dd476b2e79fe" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_6 = _arg_2;</p><p id="4ab83067-9f0e-4d6a-9ffc-f6cbf1c63951" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">if (_local_6 &gt;= 5)</p><p id="1e582656-cf83-4e4f-820f-80f8384fc538" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="b23f9ccf-21fb-4e62-800e-ee7d158b2c23" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_12 = _arg_1;</p><p id="0622a7e9-ffae-4777-8d1b-5f2be81eb4df" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">}</p><p id="011e3795-b9b5-4f3d-a585-3a37c2115447" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">else</p><p id="ba66b144-c5ce-4337-98c9-c8c63b98f672" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="608e9f83-99a1-40dd-a1a3-b2e215196cc9" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_8 = (L__2E_str2 + (_local_6 &lt;&lt; 4));</p><p id="e7caf882-5624-45d0-ac4f-9d93add48032" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_9 = 16;</p><p id="7d893032-291a-4bb9-bd2e-b8acda1f3bed" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_10 = (_local_3 - 37);</p><p id="fc3f375d-49fc-44f7-9d5a-a67f31004da3" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = (_local_4 &amp; -16);</p><p id="657853cf-d247-409e-b049-ae86ed14cd38" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_6 = CModule.mallocString(_arg_1);</p><p id="bf1747dc-a849-4731-a4ed-ac6124093128" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_11 = _arg_1.length;</p><p id="42fc4524-bef0-4221-8f2b-4415e8efd278" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">do</p><p id="677024f2-1fe7-4ef0-9b65-29d08986ab04" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="133733ff-833f-48ac-b48a-70af3ca26d92" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">var _local_7:int = (_local_8 - _local_9);</p><p id="8b7465fc-0ea1-4ff0-a64c-f071e944cef1" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_7 = li8((_local_7 + 16)) /*FlasCC (Alchemy)*/ ;</p><p id="dc5717e7-4245-4d97-86c4-bf28f4f89c35" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = (_local_4 - 16);</p><p id="ea9042bb-732f-4cdd-b41f-1307287ef2aa" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_7, (_local_4 + 4)); //FlasCC (Alchemy)</p><p id="1d297a13-6467-4292-bd83-7ce68fe205c4" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_10, _local_4); //FlasCC (Alchemy)</p><p id="ba33faae-06f8-4dd2-89c7-a35d92b70a05" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_4;</p><p id="b7110281-a8eb-429a-a640-3ff2e34943bf" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">F_sprintf();</p><p id="038d744a-2647-4229-9c8f-ffaa2a28b06c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = (_local_4 + 16);</p><p id="d6d4d5ca-96d2-4299-9fad-433f52e60a42" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_9 = (_local_9 + -1);</p><p id="818d66b4-83ab-445a-b5d4-bb8ef6603e3e" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_10 = (_local_10 + 2);</p><p id="82776ab0-bbd5-4bd5-a70e-2fadaa39a3b8" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">} while (_local_9 != 0);</p><p id="7d440f8f-f390-4231-9473-26857a35c1b0" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = (_local_4 - 16);</p><p id="c39f43e0-4e38-48d2-a67e-2137d1734361" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_7 = (_local_3 - 4);</p><p id="0a1c3c00-ead0-443e-bcc4-d66e67e33ac2" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_7, (_local_4 + 12)); //FlasCC (Alchemy)</p><p id="17c2967a-f948-4422-b91a-58cd4bfa0ee7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_7 = (_local_3 - 37);</p><p id="ced6b42f-31f0-49ce-a571-b658979958ad" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_7, (_local_4 + 8)); //FlasCC (Alchemy)</p><p id="5c8fd231-f6b3-4376-8edd-522f2b33952c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_11, (_local_4 + 4)); //FlasCC (Alchemy)</p><p id="e5cb1e7d-284f-4567-ac33-7b2dee524849" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_6, _local_4); //FlasCC (Alchemy)</p><p id="366ee5ca-84ed-42b4-8889-5dfb32997175" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_4;</p><p id="ab36786d-7bf8-4b84-b71a-b451a2b8f0af" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">F_get_sign();</p><p id="4375701e-98e0-47be-83db-e4082b70df0d" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = (_local_4 + 16);</p><p id="17fea6e4-95c5-476b-a418-566f3f53fe76" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_10 = eax;</p><p id="eb8f7029-df83-4208-b868-82d1b17c2acd" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_7 = li32((_local_3 - 4)) /*FlasCC (Alchemy)*/ ;</p><p id="20b4e907-d17c-4407-adaf-4765f11adf61" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_5 = CModule.readString(_local_10, _local_7);</p><p id="f3a91762-3e00-40c4-a4a7-9968dbbcc8fe" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">if (_local_6 != 0)</p><p id="322e1d21-7338-40e6-ab05-d9e8a7c2ded5" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="2140805f-e405-46a1-b7e7-5511b6bcbd30" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = (_local_4 - 16);</p><p id="219998b0-6059-42da-aa58-f70fd6ee5392" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_6, _local_4); //FlasCC (Alchemy)</p><p id="e433947c-d10b-4c0c-aea2-60562127e87d" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_4;</p><p id="cb35e9a2-7877-437a-abfd-b9360fb3ff98" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">F_idalloc();</p><p id="9903aaaf-5ddf-44a8-87ae-6d0047d510f3" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = (_local_4 + 16);</p><p id="2789a75c-ed6f-4ec8-9e62-99528ab860fd" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">};</p><p id="09d7b244-7beb-4cb2-b80a-c0326d9874c1" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">if (_local_10 != 0)</p><p id="d0c6d371-f12d-4925-bc19-ebf120dba0f7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">{</p><p id="96e6faf9-9f03-4f2a-a021-895cc8935cd3" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = (_local_4 - 16);</p><p id="4bab27f2-fee0-4072-88b5-ba2c328d209a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">si32(_local_10, _local_4); //FlasCC (Alchemy)</p><p id="c2da87b6-c420-4f20-bbe1-7eeaf6ca9fbc" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_4;</p><p id="579c7deb-c250-44bc-93e1-23fd7c22ab50" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">F_idalloc();</p><p id="6ca52bf8-f7cb-44cf-b099-6ee67fd13f1a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = (_local_4 + 16);</p><p id="a9fb4c8a-ed25-4272-b83e-7271c263bf8c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">};</p><p id="58f3bfdf-86b1-4970-95aa-c30bdcdd2d31" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_12 = _local_5;</p><p id="794dd536-649d-44fa-9392-c49cd5fe6547" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">};</p><p id="6dc71bac-beb8-40b2-af33-9cedcb4e4d56" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_local_4 = _local_3;</p><p id="0fffb6b8-43fd-46f0-b80b-734ecb991966" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">ESP = _local_4;</p><p id="84d6950e-c447-46a8-bb76-4671d1c30643" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">return (_local_12);</p><p id="8631f70b-31ba-4276-9d55-b2dd06d779fd" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">}</p><p id="5f0dd9b1-0408-44ef-9185-101a6e8ffe27" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">}//package com.bilibili.interfaces</p><p id="0e547799-0d06-49c3-afd9-3ae1b792db1e" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">可以看到,二者代码非常相似,而且光看代码无法找到有用的信息,那么就得想办法去调试了</p><p id="a5a99d8e-4141-469a-aedf-8de3db4893e4" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">3.目前我只知道的办法是:使用JPEXS反编译软件来修改SWF代码(插Log),然后通过Fiddler劫持替换SWF,通过显示Log信息来进行调试</p><p id="18a30930-c502-41d7-9345-ebe96c556582" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">要显示log信息就得安装debug版本的flash</p><p id="5ac1396d-ec79-420a-b166-453afbf3bb8a" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">http://www.adobe.com/support/flashplayer/debug_downloads.html</p><p id="5cb93cc6-acb4-43d7-a28a-21e18f952b11" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="bc39f3eb-7e6d-404a-be25-26da9c9c06c6" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c380002a97e645b299b~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=GVwOHwG3Rd98h%2BhOG4xl1BXsQvE%3D" style="width:100%;"></p><p id="9ad02d45-c6bc-405f-91b9-2640f40cae62" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">为方便阅读日志信息可以安装Cygwin</p><p id="4f512f37-15c1-425a-853c-9845269dddda" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="cfb46847-f711-4bec-b3a2-a5fe2aa3fbca" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c350004040d618dff39~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=w7pDZPn%2BYpKOdSiiOarZgla%2BpBI%3D" style="width:100%;"></p><p id="1ae370fe-49f2-4935-9ca8-4b80e823966c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="cc11955f-1d2a-406c-8b15-82cd8e85e228" style="font-size:18px;margin:20px 0px;text-align:left;">具体步骤我也是参考了http://blog.csdn.net/hot_vc/article/details/50600717这篇文章</span></p><p id="979175aa-2d23-4365-b3b0-3b3b734e99da" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">————————————————————————————————————————————————————————————————————————————</p><p id="081af68e-d811-4eb7-91ee-55ab74bec6a6" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">将SWF载入JPEXS</p><p id="96fef60d-9e7b-4130-b1ed-3e9e63ff0ca4" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="67836df8-654a-4868-998f-5440a7030a4c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c37000397556629982d~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=m%2F4ASm8BXhnG13vrcghCrs%2BYUfg%3D" style="width:100%;"></p><p id="166fe566-e0d5-45d5-8440-50874473d07f" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">要想修改SWF的源码就得去修改PCODE,第一次接触这种也不是很懂,觉得有点类似于C的IL代码</p><p id="5742bb5c-ff5b-4701-99e6-59a660e3b7de" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">通过AS3代码和PCODE代码的一一进行对比,还是能找到一些规律的</p><p id="66a3ae0a-8cdb-43c9-ab63-ee7860f0aeec" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">为了查看代码中变量值,用到以下代码</p><p id="af78a471-c5f7-4397-94de-05d6d5cb0ecb" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">findpropstrict Qname(PackageNamespace(""),"trace")</p><p id="8ca791d7-0fa4-439b-82b3-06dea09fa153" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">getlocal 5</p><p id="6113e01e-f0d8-4206-b0c9-e0561e325880" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">callpropvoid Qname(PackageNamespace(""),"trace") 1</p><p id="48dc8345-e050-4400-b3b0-aa4ca5742951" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">这个代码就相当于trace(_loc5_);</p><p id="6af437d9-9bfd-4619-801f-e49502bc3767" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">修改保存后利用Fiddler来劫持替换我们的SWF</p><p id="ccb5a4ad-d9ef-4136-b674-492ad1b07fe2" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="9dc316ca-86ba-43f3-a06c-1149441d9db5" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c370003979cd5fe1591~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=%2Fc0uA4GXX44x%2F0y4GZcnFJzCiY8%3D" style="width:100%;"></p><p id="442c50f8-3ba0-4ff8-8e9d-c82579a389b9" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">这样Cygwin就能输出我们想要看到的结果了。</p><p id="98608a8c-f096-4f2e-b1c0-7ac012424eba" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">其中有些变量的值是地址,而不是数据,为了读取地址中的数据,利用到了这句代码CModule.readString(地址,读取长度);</p><p id="b48ee3af-9fdb-4f9d-9adc-ade04970ea46" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">按照原PCODE的格式,写出插LOG时的PCODE</p><p id="790607ee-a4ad-4f9c-b26b-895ba9196a29" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">pushint 60</p><p id="664b81b5-8048-4f19-9972-582e77000c99" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">setlocal 8</p><p id="88fd0a78-ef64-4490-b359-d3bdcadf9681" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">getlex Qname(PackageNamespace("com.bilibili.interfaces"),"CModule")</p><p id="f4f5a7c3-bcc3-48eb-bc34-5136cab9d96c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">getlocal 7</p><p id="cf63e9a7-2db5-4581-8dc7-4702bb79efa1" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">getlocal 8</p><p id="325e6de2-a1c9-4988-8d4f-8618a027e80b" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">callproperty Qname(PackageNamespace(""),"readString") 2</p><p id="8c0d8af4-7e5f-4f57-9653-3f6b22fc68d8" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">coerce_s</p><p id="c825f337-2fbf-414a-9cf3-d34c41b1eadd" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">setlocal 5</p><p id="e43b57fe-85bc-4393-9276-4b5e81600f3c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">findpropstrict Qname(PackageNamespace(""),"trace")</p><p id="dc6a3870-9de5-4d3e-938a-a751c031060c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">getlocal 5</p><p id="91d570fe-9937-4022-998e-f71b79de2239" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">callpropvoid Qname(PackageNamespace(""),"trace") 1</p><p id="d840ce1d-f8ea-427b-81a7-cb6bc7e15851" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">此代码相当于</p><p id="38734a57-8015-441b-813c-1d95a1c1165d" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_loc8_:int = 60;</p><p id="c01d6af0-1ee0-42d5-8050-8d5beaa53a9d" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">_loc5_:* = CModule.readString(_loc7_,_loc8_);</p><p id="8417a315-b499-4cdb-b2f9-8366488d19b5" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">trace(_loc5_);</p><p id="1837bc9a-926d-416a-a747-507ccd386031" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="7b30288e-8e68-4a5a-b03a-c54e94b4c540" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c35000404ab87845388~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=gnTfFVszQ0nb7RCnvKTGu2utUoQ%3D" style="width:100%;"></p><p id="5442f028-aeeb-4dc1-8acc-d1f292843583" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">4.其实关键算法在F_get_sign()中,因为从F_get_sign()函数中出来后,eax中就已经存放带着sign的视频URL的地址了。</p><p id="07278a30-dddb-4fe7-b648-4a74ba8e33ce" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">F_get_sign()函数过于复杂,总之通过不断地插这两种Log查看变量信息,最终找到了算法</p><p id="27e91f33-a2e9-475c-9ac1-2831cbc32d6c" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"></p><p id="eca54106-e648-4f9b-aa31-d1b56c120eeb" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><img src="https://p3-sign.toutiaoimg.com/6c370003980029399fdb~noop.image?_iz=58558&amp;from=article.pc_detail&amp;x-expires=1660564053&amp;x-signature=X%2FMuVq6g1A9zdT7U%2F5%2B6Uo45g2M%3D" style="width:100%;"></p><p id="c2b7cdad-7bbc-46d3-84c2-6c8132e3a0ee" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">由这个地方可以看出是MD5,还有一个位置能够准确地查看到进行MD5处理的数据(已经忘了.....)</p><p id="7c943f24-719c-4129-afec-8b18246284b7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">算法如下:</p><p id="48888755-b766-46a0-84f0-5214ec863521" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">五种清晰度</p><p id="2cce6d29-0185-402e-b8d5-103452f3ef3d" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">qn=16,quality=1</p><p id="d07db778-dcbd-40cd-81f7-88ff3eb34f8d" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">qn=32,quality=5</p><p id="6fcac6c8-d647-4feb-b1ba-c55c4b1e6375" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">qn=48,quality=2</p><p id="34040d39-b7bc-4790-8a25-57d2a6f83478" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">qn=64,quality=2</p><p id="d1ab90e9-646f-44a5-83b5-2e85b13479cf" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">qn=80,quality=3</p><p id="48383c03-cd9d-468b-8a35-279f73a16ba0" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">qn=112,quality=4</p><p id="9ddc2fb7-f0ad-4dd5-be9f-50108d2e4d4f" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">三种类型的视频bili2,bangumi,movie</p><p id="54c1dd77-aad7-4efd-9c47-163c21b7d8ca" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">bili2:</p><p id="277ce949-052a-4748-81f7-f78c4158dbef" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">time = F_clock_gettime();//相当于取一个时间随机数</p><p id="cc77945b-58ac-4087-bab7-f9a64e0fd0e1" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">sign = MD5(cid= + cid + &amp;player=1&amp;qn=112&amp;quality=4&amp;ts= + time + 1c15888dc316e05a15fdd0a02ed6584f)</p><p id="0b0d4d92-dc19-4f58-aa8c-b0046f8578f7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">url = https://interface.bilibili.com/playurl?player=1&amp;qn=112&amp;cid= + cid + &amp;quality=4&amp;ts= + time + &amp;sign= + sign</p><p id="42acfb1d-6d5f-4b84-b9f3-003e68a11e5b" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">bangumi:</p><p id="3dc64392-8eaf-4b64-b729-a4a1b04c4ba3" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">time = F_clock_gettime();//相当于取一个时间随机数</p><p id="0f7f0e94-9df2-4aab-b8c1-2881daee3cab" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">sign = MD5(cid= + cid + &amp;module=bangumi + &amp;player=1 + &amp;qn=112 + &amp;quality=4 + &amp;ts= + time + 9b288147e5474dd2aa67085f716c560d)</p><p id="cd7e6f4d-9ac6-470e-bdaf-fcefe44453f1" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">url = https://bangumi.bilibili.com/player/web_api/playurl?cid= + cid + &amp;player=1 + &amp;module=bangumi + &amp;qn=112 + &amp;quality=4&amp;ts= + time + &amp;sign= + sign</p><p id="d6bb7432-a211-4faf-a336-0667f05251d5" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">movie:</p><p id="1d6d66d8-969e-4db5-b9bf-40f5ff0709a7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">time = F_clock_gettime();//相当于取一个时间随机数</p><p id="4027344b-11bb-4f8b-8cda-671bd4674e95" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">sign = MD5(cid= + cid + &amp;module=movie + &amp;player=1 + &amp;qn=112 + &amp;quality=4 + &amp;ts= + time + 9b288147e5474dd2aa67085f716c560d)</p><p id="e00ed5f6-fec5-4f2f-b7a5-b5f8361f6717" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">url = https://bangumi.bilibili.com/player/web_api/playurl?cid= + cid + &amp;player=1 + &amp;module=movie + &amp;qn=112 + &amp;quality=4&amp;ts= + time + &amp;sign= + sign</p><p id="3bb4316a-d302-4ab4-97d5-84371c7cdcd2" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">也就只分析到了这里</p><p id="1afda052-8ef8-4b47-805f-b5e7768b7051" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;"><span id="a20de068-fdca-4f73-8ec4-1ce9ee081a7d" style="font-size:18px;margin:20px 0px;text-align:left;">顺便说下,有些tx.acgvideo.com开头的视频无法下载是因为服务器检查了Refer,只要在协议头里面加入Refer:https://static.hdslb.com/play.swf,就能下载了</span></p><p id="689fcd22-c855-4962-aaa7-2d625f68762f" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">水平有限,分析若有什么错误,大家看着办吧</p><p id="0feb8a5f-4149-4dbe-9e60-d8a998c457c7" style="font-weight:400;text-align:left;line-height:1.667;margin:20px 0px;font-size:18px;">欢迎大家在评论区留下你的意见。谢谢 诸葛商学院</p></div>
页: [1]
查看完整版本: 某站视频真实地址解析过程,都被这些技术宅破解了,解析教程