diff options
| author | Yen Chi Hsuan <yan12125@gmail.com> | 2016-02-26 14:58:29 +0800 | 
|---|---|---|
| committer | Yen Chi Hsuan <yan12125@gmail.com> | 2016-02-26 14:58:29 +0800 | 
| commit | f52354a88927eb66bcb1f603d2d91162b5bd2b5f (patch) | |
| tree | 82c74cfcd7f572e5d70547035fbf62960b8114a0 | |
| parent | 59f898b7a72284efb994a8c6baee7771046226dd (diff) | |
[utils] Move codes for handling eval() from iqiyi.py
| -rw-r--r-- | youtube_dl/extractor/iqiyi.py | 24 | ||||
| -rw-r--r-- | youtube_dl/utils.py | 20 | 
2 files changed, 22 insertions, 22 deletions
| diff --git a/youtube_dl/extractor/iqiyi.py b/youtube_dl/extractor/iqiyi.py index 76ecd55a4..2b3952210 100644 --- a/youtube_dl/extractor/iqiyi.py +++ b/youtube_dl/extractor/iqiyi.py @@ -18,7 +18,7 @@ from ..compat import (      compat_urllib_parse_urlparse,  )  from ..utils import ( -    base_n, +    decode_packed_codes,      ExtractorError,      ohdave_rsa_encrypt,      remove_start, @@ -130,28 +130,8 @@ class IqiyiSDKInterpreter(object):      def __init__(self, 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): -        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) diff --git a/youtube_dl/utils.py b/youtube_dl/utils.py index 900e07a8e..fc7e2fb7f 100644 --- a/youtube_dl/utils.py +++ b/youtube_dl/utils.py @@ -2635,3 +2635,23 @@ def base_n(num, n, table=None):          ret = table[num % n] + ret          num = num // n      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) | 
