[utils] Move codes for handling eval() from iqiyi.py

This commit is contained in:
Yen Chi Hsuan 2016-02-26 14:58:29 +08:00
parent 59f898b7a7
commit f52354a889
2 changed files with 22 additions and 22 deletions

View file

@ -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)

View file

@ -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)