mirror of
				https://github.com/yt-dlp/yt-dlp.git
				synced 2025-11-04 08:35:12 +00:00 
			
		
		
		
	[utils] Move codes for handling eval() from iqiyi.py
This commit is contained in:
		@@ -18,7 +18,7 @@ from ..compat import (
 | 
				
			|||||||
    compat_urllib_parse_urlparse,
 | 
					    compat_urllib_parse_urlparse,
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
from ..utils import (
 | 
					from ..utils import (
 | 
				
			||||||
    base_n,
 | 
					    decode_packed_codes,
 | 
				
			||||||
    ExtractorError,
 | 
					    ExtractorError,
 | 
				
			||||||
    ohdave_rsa_encrypt,
 | 
					    ohdave_rsa_encrypt,
 | 
				
			||||||
    remove_start,
 | 
					    remove_start,
 | 
				
			||||||
@@ -130,28 +130,8 @@ class IqiyiSDKInterpreter(object):
 | 
				
			|||||||
    def __init__(self, sdk_code):
 | 
					    def __init__(self, sdk_code):
 | 
				
			||||||
        self.sdk_code = sdk_code
 | 
					        self.sdk_code = sdk_code
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def decode_eval_codes(self):
 | 
					 | 
				
			||||||
        self.sdk_code = self.sdk_code[5:-3]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        mobj = re.search(
 | 
					 | 
				
			||||||
            r"'([^']+)',62,(\d+),'([^']+)'\.split\('\|'\),[^,]+,{}",
 | 
					 | 
				
			||||||
            self.sdk_code)
 | 
					 | 
				
			||||||
        obfucasted_code, count, symbols = mobj.groups()
 | 
					 | 
				
			||||||
        count = int(count)
 | 
					 | 
				
			||||||
        symbols = symbols.split('|')
 | 
					 | 
				
			||||||
        symbol_table = {}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        while count:
 | 
					 | 
				
			||||||
            count -= 1
 | 
					 | 
				
			||||||
            b62count = base_n(count, 62)
 | 
					 | 
				
			||||||
            symbol_table[b62count] = symbols[count] or b62count
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self.sdk_code = re.sub(
 | 
					 | 
				
			||||||
            r'\b(\w+)\b', lambda mobj: symbol_table[mobj.group(0)],
 | 
					 | 
				
			||||||
            obfucasted_code)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def run(self, target, ip, timestamp):
 | 
					    def run(self, target, ip, timestamp):
 | 
				
			||||||
        self.decode_eval_codes()
 | 
					        self.sdk_code = decode_packed_codes(self.sdk_code)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        functions = re.findall(r'input=([a-zA-Z0-9]+)\(input', self.sdk_code)
 | 
					        functions = re.findall(r'input=([a-zA-Z0-9]+)\(input', self.sdk_code)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2635,3 +2635,23 @@ def base_n(num, n, table=None):
 | 
				
			|||||||
        ret = table[num % n] + ret
 | 
					        ret = table[num % n] + ret
 | 
				
			||||||
        num = num // n
 | 
					        num = num // n
 | 
				
			||||||
    return ret
 | 
					    return ret
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def decode_packed_codes(code):
 | 
				
			||||||
 | 
					    mobj = re.search(
 | 
				
			||||||
 | 
					        r"'([^']+)',(\d+),(\d+),'([^']+)'\.split\('\|'\),[^,]+,{}",
 | 
				
			||||||
 | 
					        code)
 | 
				
			||||||
 | 
					    obfucasted_code, base, count, symbols = mobj.groups()
 | 
				
			||||||
 | 
					    base = int(base)
 | 
				
			||||||
 | 
					    count = int(count)
 | 
				
			||||||
 | 
					    symbols = symbols.split('|')
 | 
				
			||||||
 | 
					    symbol_table = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    while count:
 | 
				
			||||||
 | 
					        count -= 1
 | 
				
			||||||
 | 
					        base_n_count = base_n(count, base)
 | 
				
			||||||
 | 
					        symbol_table[base_n_count] = symbols[count] or base_n_count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return re.sub(
 | 
				
			||||||
 | 
					        r'\b(\w+)\b', lambda mobj: symbol_table[mobj.group(0)],
 | 
				
			||||||
 | 
					        obfucasted_code)
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user