[vlc-commits] [Git][videolan/vlc][3.0.x] youtube.lua: update "n" descrambling function name parsing

Hugo Beauzée-Luyssen (@chouquette) gitlab at videolan.org
Tue Mar 8 10:17:54 UTC 2022



Hugo Beauzée-Luyssen pushed to branch 3.0.x at VideoLAN / VLC


Commits:
2c31361c by Pierre Ynard at 2022-03-08T10:03:32+00:00
youtube.lua: update "n" descrambling function name parsing

The descrambling function is now called through an intermediate array
variable. This change has also added two extra ways to recover the
function name. Add support to parse and resolve any of them.

Fixes #26574

(cherry picked from commit 3df28fc51ef2ea46084aef1785ded18afa31ef9e)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

- - - - -


1 changed file:

- share/lua/playlist/youtube.lua


Changes:

=====================================
share/lua/playlist/youtube.lua
=====================================
@@ -1,7 +1,7 @@
 --[[
  $Id$
 
- Copyright © 2007-2021 the VideoLAN team
+ Copyright © 2007-2022 the VideoLAN team
 
  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
@@ -119,8 +119,37 @@ function n_descramble( nparam, js )
     end
 
     -- Look for the descrambler function's name
-    -- a.D&&(b=a.get("n"))&&(b=lha(b),a.set("n",b))}};
-    local descrambler = js_extract( js, '[=%(,&|](...?)%(.%),.%.set%("n",' )
+    -- a.C&&(b=a.get("n"))&&(b=Bpa[0](b),a.set("n",b),Bpa.length||iha(""))}};
+    -- var Bpa=[iha];
+    local callsite = js_extract( js, '[^;]*%.set%("n",[^};]*' )
+    if not callsite then
+        vlc.msg.dbg( "Couldn't extract YouTube video throttling parameter descrambling function name" )
+        return nil
+    end
+
+    -- Try direct function name from following clause
+    local descrambler = string.match( callsite, '%.set%("n",.%),...?%.length||(...?)%(' )
+    local itm = nil
+    if not descrambler then
+        -- Try from main call site
+        descrambler = string.match( callsite, '[=%(,&|]([a-zA-Z0-9_$%[%]]+)%(.%),.%.set%("n",' )
+        if descrambler then
+            -- Check if this is only an intermediate variable
+            itm = string.match( descrambler, '^([^%[%]]+)%[' )
+            if itm then
+                descrambler = nil
+            end
+        else
+            -- Last chance: intermediate variable in following clause
+            itm = string.match( callsite, '%.set%("n",.%),(...?)%.length' )
+        end
+    end
+
+    if not descrambler and itm then
+        -- Resolve intermediate variable
+        descrambler = js_extract( js, 'var '..itm..'=%[(...?)[%],]' )
+    end
+
     if not descrambler then
         vlc.msg.dbg( "Couldn't extract YouTube video throttling parameter descrambling function name" )
         return nil



View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/2c31361c347b0f31b6818a28d4fe94f9543aad56

-- 
View it on GitLab: https://code.videolan.org/videolan/vlc/-/commit/2c31361c347b0f31b6818a28d4fe94f9543aad56
You're receiving this email because of your account on code.videolan.org.


VideoLAN code repository instance


More information about the vlc-commits mailing list