Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save JohnLaTwC/3ee90ee838b94257dcf9df022700bcf4 to your computer and use it in GitHub Desktop.
Save JohnLaTwC/3ee90ee838b94257dcf9df022700bcf4 to your computer and use it in GitHub Desktop.
Python obfuscated sample
## Uploaded by @JohnLaTwC
## Sample Hash: f76319b5bbc1f97b09c05649cf4d6f16944d8e4c3902f46d941e5ae9d914126b
exec("import re;import base64");exec((lambda p,y:(lambda o,b,f:re.sub(o,b,f))(r"([0-9a-f]+)",lambda m:p(m,y),base64.b64decode("IyEvZjkvZmUvZDEKCmIgODAsMTMKYiAyNApiIDVkCmIgMWEsIDI1CmIgZgpiIGI4CmIgYWEKYTcgYWQgYiAxMDgsIGM1CmE3IDI1IGIgNDcsIGI0LCA3NApiIDMzCmIgOGUKYiBhNQpiIGFkCgo1MCA9ICI4ODovL2ZhLjU3LmZmIgozNSA9IDUwKyIvMTA5LTkzLzkzLWYxLmZjIgo1ZSA9IDM1ICsgIj83Nj05ZCYxMTU9Ni41LjEiCjQ5ID0gNTArIi80OS8iCgoxZCA9IDZhKDVkLjRmWzFdKQo3MSA9ICJjYy42ZS44MiIKYTQgPSA4MC43OCgnYmE6Ly9iNS85OC8lY2InICUgKDcxKSkKOTAgPSAzMy45MSgpCjVhID0gMzMuOTEoKS4zZQoxMDggPSA5MC4zZSgnMTA4JykKMjMgPSAxMDgrIi9lYy5jZCIKYjYgPSAxMDgrIi9mNC5jZCIKNWMgPSAxMDgrIi9kNS45YiIKYjEgPSAyNC43MCgpCgoKMTQgY2UoMTAzLCA1Nj0nJywgNGM9JycpOgoJNDMgNTY6IDY5ID0gMjUuNDcoMTAzLCA1NikKCThhOiA2OSA9IDI1LjQ3KDEwMykKCTY5LjUxKCdhMC05NCcsICc3Mi81LjAgKDczOyAxMTE7IDczIDExMiA1LjE7IGEyLTEwYjsgZTg6MS45LjAuMykgOTcvOTYgNmYvMy4wLjMnKQoJNDMgNGM6CgkgIDY5LjUxKCdiNycsIDRjKQoJNDIgPSAyNS43NCg2OSkKCTE4PTQyLmVkKCkKCTQyLmU2KCkKCWMgMTgKCQoxNCA2MCgxMDMsIDU1LCAyMyk6CgkzNiA9IDI0LjYzKCA1NSwgNWI9MjMsIDJlPTIzLCAxMDg9MTAzKQoJMzYuNzUoICI2ZSIsIHsgIjk1IjogNTUgfSApCgk3YSA9IDgwLmRhKCkKCTdhLmYzKDEwMywgMzYpCgoxNCAzMSg3ZCk6Cgk0ZSAnIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjJwoJNGUgJyMjIyBiOTogJyArIDI3KDdkKQoJNGUgJyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIycKCWMKCjE0IDIwKDJhKToKCTE0IDZkKDEwZSk6CgkJMmEgPSAxMGUuZTUoMCkKCQk0MyAyYVs6M10gPT0gIiYjMTE2IjogYyA3Yyg2YSgyYVszOi0xXSwgMTYpKS4yYygnNmItOCcpCgkJOGE6IGMgN2MoNmEoMmFbMjotMV0pKS4yYygnNmItOCcpCgk4NyA6YyBmLjY3KCIoPzEwZCkmI1wxMDUrOyIsIDZkLCAyYS5kMygnYzctYTYtMScpLjJjKCc2Yi04JykpCgkzYTpjIGYuNjcoIig/MTBkKSYjXDEwNSs7IiwgNmQsIDJhLjJjKCJkZSIsICJkNyIpLjJjKCc2Yi04JykpCgoxNCAzZigpOgoJZDIoImM0IDk5IGY2IGVlIGJlIiwgeyIxMGEiOiJjOCIsICIxMDMiOjUwLCAiMTUiOjF9LCAyMykKCQoJMzggPSBjZSg0OSkKCgllYiA9ICc8ODE+KGM5IDNiLis/KTwvY2InCgkxMGYgPSBmLjQoZWIsIGYuMmIpLmMxKDM4KVswXQoJYmMgPSAyNigxMGYpCgkjIDMxKGJjKQoKCWViID0gJ2Q2LTg1LTYyLio/PiguKz8pPC8xMGMnCgkzOCA9IGYuNChlYikuYzEoMzgpWzBdCgllYiA9ICczZC4uKFxkezEsNX0pLi4qPz4oLis/KTwvJwoJMTBmID0gZi40KGViKS5jMSgzOCkKCgk0YiAxMDEsIDU1IDU0IDEwZjoKCQk4NzogCgkJCTFlKDU1KQoJCTNhOiAKCQkJMjIgPSBmLjY3KGY1J1xjYicsICItIiwgNTUuNjgoKSkKCQkJOWMgPSBhZC4xMDguYWMoMTA4LCAnNjEnLCAnOWEnLCAnYjAnLCAyMisnLjliJykKCQkJZDIoNTUsIHsiMTBhIjo1NSwgIjEwMyI6MTAxLCAiMTUiOjIsICJiYyI6YmN9LCA5YykKCgkxMy4xOSgxZCkKCjE0IDFlKDU1KToKCTU1ID0gZi42NyhmNSdcY2InLCAiLSIsIDU1LjY4KCkpCgkzOCA9IGNlKDUwKycvJys1NSsnLycpCgoJZWIgPSAnPDgxPihjOSAzYi4rPyk8L2NiJwoJMTBmID0gZi40KGViLCBmLjJiKS5jMSgzOClbMF0KCWJjID0gMjYoMTBmKQoKCWViID0gJ2Q2LTg1LTYyLio/PiguKz8pPC8xMGMnCgkzOCA9IGYuNChlYikuYzEoMzgpWzBdCgllYiA9ICczZC4uKFxkezEsNX0pLi4qPz4oLis/KTwvJwoJMTBmID0gZi40KGViKS5jMSgzOCkKCgk0YiAxMDEsIDU1IDU0IDEwZjoKCQkyMiA9IGYuNjcoZjUnXGNiJywgIi0iLCA1NS42OCgpKQoJCTljID0gYWQuMTA4LmFjKDEwOCwgJzYxJywgJzlhJywgJ2IwJywgMjIrJy45YicpCgkJZDIoNTUsIHsiMTBhIjo1NSwgIjEwMyI6MTAxLCAiMTUiOjIsICJiYyI6YmN9LCA5YykKCgoxNCA2NigxMDEsIGJjLCAxZik6CgkyOSA9IDFhLjQ1KGJjKQoKCWIgZDAKCWJjID0gZDAuNzkoMjkpCgliY1snMTAxJ10gPSAxMDEKCWJjWyc2YyddID0gMWYKCgk1NiA9IDFhLjM0KGJjKQoJMzggPSBjZSg1ZSwgNTYpCgoJNjQgPSBhNS5kYigzOCkKCgkzOCA9IDIwKDY0WydjMiddKQoJZWIgPSAnMTAzIi4qPzdlPSIoLis/KSIuKj8+KC4rPyk8Lio/ZTcuKj8zOD0iKC4rPykiJwoJMTBmID0gZi40KGViKS5jMSgzOCkKCgk0YiAxOCwgNTUsIDIzIDU0IDEwZjoKCQlkMig1NSwgeyIxMGEiOjU1LCAiMTAzIjoxOCwgIjE1IjoxMSwgIjljIjoyM30sIDIzKQoKCTFmID0gNmEoMWYpKzEKCWQyKCJhMyA5ZiIsIHsiMTBhIjoiYTMgOWYiLCAiMTAzIjoxMDEsICIxNSI6MiwgImJjIjpiYywgIjFmIjoxZn0sIDIzKQoJMTMuMTkoMWQpCgoxNCAyNigzOCwgMWY9MSk6Cgk0MSA9ICc3NycKCTFjID0gZi40KCcxYy4qPyIoLis/KSInKS5jMSgzOClbMF0KCTRkID0gZi40KCdlOS4qP1wnKC4rPylcJycpLmMxKDM4KVswXQoJMjggPSBmLjQoJzExMy4qPyIoLis/KSInKS5jMSgzOClbMF0KCWUgPSBmLjQoJ2UuKj8iKC4rPykiJykuYzEoMzgpWzBdCgkKCTI5ID0gewoJCSc0MSc6NDEsCgkJJzFjJzoxYywKCQknNGQnOjRkLAoJCScyOCc6MjgsCgkJJ2UnOmUsCgl9CgljIDI5CgoxNCAzMCgxMDMpOgoJMzEoMTAzKQoJMzggPSBjZSgxMDMpCgllYiA9ICdlND0iZDYtZGQtZGYiPi4qPzdlPSIoLis/KSIuKj81NT0iKC4rPykiLio/MTAyPSIoLis/KVw/JwoJMTBmID0gZi40KGViLCBmLjJiKS5jMSgzOCkKCgk0YiAxOCwgNTUsIDljIDU0IDEwZjoKCSAgNTUgPSAyMCg1NSkKCSAgZDIoNTUsIHsiMTBhIjo1NSwgIjEwMyI6MTgsICIxNSI6MTF9LCA5YykKCgkxMy4xOSgxZCkKCjE0IDJmKDEwMywgOWM9JycpOgoJMzggPSBjZSgxMDMpCgkyZCA9IGYuNCgnPGQ4Lio/Pi4qPzExMC4qPz4oLis/KTwvJyxmLjJiKS5jMSgzOClbMF0KCTJkID0gMjAoMmQpCgoJODc6CgkJNDYgPSBmLjQoJ2FlLio/ZTE9IiguKz8pIicpLmMxKDM4KVswXQoJCWViID0gJzdlPSIjKC4rPykiLio/OWUuPiguKz8pPCcKCQkxMGYgPSBmLjQoZWIpLmMxKDM4KQoKCQkxMGEgPSBbXQoJCTEwMyA9IFtdCgoJCTRiIDIxLCA1NSA1NCAxMGY6CgkJCTU1ID0gMjAoNTUpCgkJCTg0ID0geycyMScgOiAyMSwKCQkJCQknNDYnIDogNDYsCgkJCQkJJzM5JyA6ICczOScsCgkJCQkJJzQxJyA6ICc4NicgCgkJCQkJfQoJCQkyOSA9IDFhLjM0KDg0KQoKCQkJMzggPSBjZSgzNSwgMjkpCgkJCSMgMzEoMzgpCgkJCTg3OgoJCQkJZWIgPSAnMjktODM9IiguKz8pIicKCQkJCTEwZiA9IGYuNChlYikuYzEoMzgpWzBdCgkJCQkxOCA9ICc4ODonKzEwZgoKCQkJCTEwYS43Yig1NSkKCQkJCTEwMy43YigxOCkKCQkJM2E6IGIyCgoJCTNjID0gNDAoMTBhLCA0YT0yZCkKCQk0MyAzYyA9PSAtMTogYyAgCgoJCTE4ID0gMTAzWzNjXQoJCQoJM2E6CgkJZWIgPSAnMjktODM9IiguKz8pIicKCQkxMGYgPSBmLjQoZWIpLmMxKDM4KVswXQoJCTE4ID0gJzg4OicrMTBmCgoJMzcoMTgsIDJkLCA5YykKCjE0IDVmKDEwMyk6CgkzOCA9IGNlKDEwMykKCWViID0gJ2ZiIjoiKC4rPykiJwoJMTAzID0gZi40KGViKS5jMSgzOClbMF0KCgkjIGViID0gJ2M2IjoiKC4rPykiJwoJIyAyMyA9IGYuNChlYikuYzEoMzgpWzBdCgoJYyAxMDMKCjE0IDM3KDEwMywgNTUsIDljKToKCTEwMyA9IDVmKDEwMykKCgkzOCA9IGNlKDEwMykKCTEwZiA9IGYuNCgnPDQ4PiguKz8pPC8uKj8xMDM9IiguKz8pIicsIGYuMmIpLmMxKDM4KQoKCTRiIDQ4LCA2NSA1NCAxMGY6CgkJMTAzID0gNDggKyAnLycgKyA2NQoKCTYwKDEwMywgNTUsIDljKQoKMTQgNDAoNjIsIDRhPTVhKCcxMGEnKSk6Cgk3ZiA9IDI0LmNhKCkKCWMgN2YuM2MoNGEsIDYyKQoKOGMgPSB7CgknYTAtOTQnOiAnNzIvNS4wIChmNzsgMTExOyBkYyBjZjsgYTItMTA3OyBlODoxLjkuMi42KSA5Ny9iMyA2Zi8zLjYuNicsCgknNTktYzMnOiAnYzctYTYtMSw2Yi04O2UyPTAuNywqO2UyPTAuNycsCgknNTknOiAnMmEvZWYsNDQvZTMrZDksNDQvZDk7ZTI9MC45LCovKjtlMj0wLjgnLAoJJzU5LWFmJzogJ2EyLTEwNCxhMjtlMj0wLjUnLAp9ICAKCjE0IGQyKDEwYSwgMTA9e30sMjM9IiIpOgoJYTggPSAyNC42MygxMGEsNWI9IiIsIDJlPTIzKQoJYTguNzUoICI2ZSIsIHsgIjk1IiA6IDEwYSwgImE5IiA6IDEwYX0gKQoJYTguOGQoJzg5JywgNWMpCgkxMDMgPSA1ZC40ZlswXSArICc/JyArIDFhLjM0KDEwKQoJYyAxMy5kMihkND02YSg1ZC40ZlsxXSksIDEwMz0xMDMsIGExPWE4LCBhYj1lYSkKCgoxNCAxMigxMCk6CgknJycgYmQgMTAgYzAgNTQgYSAxMDAgMTA2IGEgZjIuICcnJwoJMzIgPSB7fQoJNDMgMTA6CgkJNTIgPSAxMFsxOl0uOTIoIiYiKQoJCTRiIDUzIDU0IDUyOgoJCQkxNyA9IDUzLjkyKCc9JykKCQkJNDMgKGZkKDE3KSkgPT0gMjoKCQkJCTMyWzE3WzBdXSA9IDE3WzFdCgljIDMyCgoxYiA9IDEyKDVkLjRmWzJdKQoxMGEgPSAgMjcoMWIuNTgoIjEwYSIsICIiKSkKMTAzID0gIDI3KDFiLjU4KCIxMDMiLCAiIikpCjEwMyA9IDFhLjQ1KDEwMykKMTUgPSAgMjcoMWIuNTgoIjE1IiwgIiIpKQpiYyA9ICAyNygxYi41OCgiYmMiLCAiIikpCjFmID0gIDI3KDFiLjU4KCIxZiIsIDEpKQo5YyA9IDI3KDFiLjU4KCI5YyIsICIiKSkKOWMgPSAxYS40NSg5YykKCiMjIyMgYmYgIyMjIwo0MyBmOCA1ZC40ZlsyXToKCWIyIzRlICAiZjAgNTQgYmItMTE0IGUwIDU0IDhiIgoJOGYgPSAzZigpCjhhOgoJNDMgMTUgPT0gMjcoMSk6CgkJOGYgPSAzMCgxMDMpCgk0MyAxNSA9PSAyNygxMSk6CgkJOGYgPSAyZigxMDMsIDljKQoJNDMgMTUgPT0gMjcoMik6CgkJOGYgPSA2NigxMDMsIGJjLCAxZikKCTQzIDE1ID09IDI3KDMpOgoJCThmID0gMzcoMTAzKQ==")))(lambda a,b:b[int("0x"+a.group(1),16)],"0|1|2|3|compile|5|6|7|8|9|a|import|return|d|td_column_number|re|parameters|11|parameters_string_to_dict|xbmcplugin|def|mode|16|paramSplits|link|endOfDirectory|urllib|params|block_type|thisPlugin|getOtherCompetitions|page|cleanHex|acp_currpage|titleLogo|pic|xbmcgui|urllib2|getPostData|str|td_block_id|data|text|DOTALL|encode|vTitle|thumbnailImage|showListDialog|showLatestList|gedebug|paramDict|xbmcaddon|urlencode|adminAjax|xlistitem|getStream|content|acp_shortcode|except|block_td_uid|select|filter_value|getAddonInfo|showMainMenu|selectDialog|action|response|if|application|unquote|acp_pid|Request|baseURL|matches|heading|for|referer|td_atts|print|argv|host|add_header|paramPairs|paramsPair|in|title|post|fullmatchesandshows|get|Accept|addonInfo|iconImage|picFanart|sys|newsPaper|videoData|playVideo|resources|list|ListItem|jsonData|mediaURL|showList|sub|lower|req|int|utf|td_current_page|fixup|video|Firefox|DialogProgress|addonId|Mozilla|Windows|urlopen|setInfo|td_theme_name|td_ajax_block|translatePath|literal_eval|player|append|unichr|strTxt|href|dialog|xbmc|script|AresFootBall|config|values|subcat|pp_with_ajax|try|http|Fanart_Image|else|showContent|std_headers|setProperty|unicodedata|ok|addon|Addon|split|admin|Agent|Title|2008092417|Gecko|addon_data|Highlights|media|jpg|thumbnail|Newspaper|acp_title|Page|User|listitem|en|Next|dataPath|json|8859|from|li|FileName|urlparse|isFolder|join|os|acp_post|Language|logo|progress|pass|20100627|URLError|profile|picNext|Referer|httplib|GEDEBUG|special|default|postData|Convert|Matches|ACTIONS|encoded|findall|td_data|Charset|Latest|system|poster|ISO|LATEST|var|Dialog|s|plugin|png|getUrl|x86_64|ast|python|addDirectoryItem|decode|handle|fanart|td|ignore|header|xml|Player|loads|Linux|block|ascii|span4|going|value|q|xhtml|class|group|close|image|rv|atts|True|regex|icon|read|Full|html|Here|ajax|dict|play|next|r|and|X11|not|usr|www|f4m|php|len|bin|com|URL|td_filter_value|src|url|us|w|to|US|path|wp|name|GB|u|i|m|match|h1|U|NT|id|py|v|x".split("|")))
## decodes to:
exec("import re;import base64");exec((lambda p,y:(lambda o,b,f:re.sub(o,b,f))(r"([0-9a-f]+)",lambda m:p(m,y),base64.b64decode("#!/f9/fe/d1
b 80,13
b 24
b 5d
b 1a, 25
b f
b b8
b aa
a7 ad b 108, c5
a7 25 b 47, b4, 74
b 33
b 8e
b a5
b ad
50 = "88://fa.57.ff"
35 = 50+"/109-93/93-f1.fc"
5e = 35 + "?76=9d&115=6.5.1"
49 = 50+"/49/"
1d = 6a(5d.4f[1])
71 = "cc.6e.82"
a4 = 80.78('ba://b5/98/%cb' % (71))
90 = 33.91()
5a = 33.91().3e
108 = 90.3e('108')
23 = 108+"/ec.cd"
b6 = 108+"/f4.cd"
5c = 108+"/d5.9b"
b1 = 24.70()
14 ce(103, 56='', 4c=''):
43 56: 69 = 25.47(103, 56)
8a: 69 = 25.47(103)
69.51('a0-94', '72/5.0 (73; 111; 73 112 5.1; a2-10b; e8:1.9.0.3) 97/96 6f/3.0.3')
43 4c:
69.51('b7', 4c)
42 = 25.74(69)
18=42.ed()
42.e6()
c 18
14 60(103, 55, 23):
36 = 24.63( 55, 5b=23, 2e=23, 108=103)
36.75( "6e", { "95": 55 } )
7a = 80.da()
7a.f3(103, 36)
14 31(7d):
4e '######################################################'
4e '### b9: ' + 27(7d)
4e '######################################################'
c
14 20(2a):
14 6d(10e):
2a = 10e.e5(0)
43 2a[:3] == "&#116": c 7c(6a(2a[3:-1], 16)).2c('6b-8')
8a: c 7c(6a(2a[2:-1])).2c('6b-8')
87 :c f.67("(?10d)&#\105+;", 6d, 2a.d3('c7-a6-1').2c('6b-8'))
3a:c f.67("(?10d)&#\105+;", 6d, 2a.2c("de", "d7").2c('6b-8'))
14 3f():
d2("c4 99 f6 ee be", {"10a":"c8", "103":50, "15":1}, 23)
38 = ce(49)
eb = '<81>(c9 3b.+?)</cb'
10f = f.4(eb, f.2b).c1(38)[0]
bc = 26(10f)
# 31(bc)
eb = 'd6-85-62.*?>(.+?)</10c'
38 = f.4(eb).c1(38)[0]
eb = '3d..(\d{1,5})..*?>(.+?)</'
10f = f.4(eb).c1(38)
4b 101, 55 54 10f:
87:
1e(55)
3a:
22 = f.67(f5'\cb', "-", 55.68())
9c = ad.108.ac(108, '61', '9a', 'b0', 22+'.9b')
d2(55, {"10a":55, "103":101, "15":2, "bc":bc}, 9c)
13.19(1d)
14 1e(55):
55 = f.67(f5'\cb', "-", 55.68())
38 = ce(50+'/'+55+'/')
eb = '<81>(c9 3b.+?)</cb'
10f = f.4(eb, f.2b).c1(38)[0]
bc = 26(10f)
eb = 'd6-85-62.*?>(.+?)</10c'
38 = f.4(eb).c1(38)[0]
eb = '3d..(\d{1,5})..*?>(.+?)</'
10f = f.4(eb).c1(38)
4b 101, 55 54 10f:
22 = f.67(f5'\cb', "-", 55.68())
9c = ad.108.ac(108, '61', '9a', 'b0', 22+'.9b')
d2(55, {"10a":55, "103":101, "15":2, "bc":bc}, 9c)
14 66(101, bc, 1f):
29 = 1a.45(bc)
b d0
bc = d0.79(29)
bc['101'] = 101
bc['6c'] = 1f
56 = 1a.34(bc)
38 = ce(5e, 56)
64 = a5.db(38)
38 = 20(64['c2'])
eb = '103".*?7e="(.+?)".*?>(.+?)<.*?e7.*?38="(.+?)"'
10f = f.4(eb).c1(38)
4b 18, 55, 23 54 10f:
d2(55, {"10a":55, "103":18, "15":11, "9c":23}, 23)
1f = 6a(1f)+1
d2("a3 9f", {"10a":"a3 9f", "103":101, "15":2, "bc":bc, "1f":1f}, 23)
13.19(1d)
14 26(38, 1f=1):
41 = '77'
1c = f.4('1c.*?"(.+?)"').c1(38)[0]
4d = f.4('e9.*?\'(.+?)\'').c1(38)[0]
28 = f.4('113.*?"(.+?)"').c1(38)[0]
e = f.4('e.*?"(.+?)"').c1(38)[0]
29 = {
'41':41,
'1c':1c,
'4d':4d,
'28':28,
'e':e,
}
c 29
14 30(103):
31(103)
38 = ce(103)
eb = 'e4="d6-dd-df">.*?7e="(.+?)".*?55="(.+?)".*?102="(.+?)\?'
10f = f.4(eb, f.2b).c1(38)
4b 18, 55, 9c 54 10f:
55 = 20(55)
d2(55, {"10a":55, "103":18, "15":11}, 9c)
13.19(1d)
14 2f(103, 9c=''):
38 = ce(103)
2d = f.4('<d8.*?>.*?110.*?>(.+?)</',f.2b).c1(38)[0]
2d = 20(2d)
87:
46 = f.4('ae.*?e1="(.+?)"').c1(38)[0]
eb = '7e="#(.+?)".*?9e.>(.+?)<'
10f = f.4(eb).c1(38)
10a = []
103 = []
4b 21, 55 54 10f:
55 = 20(55)
84 = {'21' : 21,
'46' : 46,
'39' : '39',
'41' : '86'
}
29 = 1a.34(84)
38 = ce(35, 29)
# 31(38)
87:
eb = '29-83="(.+?)"'
10f = f.4(eb).c1(38)[0]
18 = '88:'+10f
10a.7b(55)
103.7b(18)
3a: b2
3c = 40(10a, 4a=2d)
43 3c == -1: c
18 = 103[3c]
3a:
eb = '29-83="(.+?)"'
10f = f.4(eb).c1(38)[0]
18 = '88:'+10f
37(18, 2d, 9c)
14 5f(103):
38 = ce(103)
eb = 'fb":"(.+?)"'
103 = f.4(eb).c1(38)[0]
# eb = 'c6":"(.+?)"'
# 23 = f.4(eb).c1(38)[0]
c 103
14 37(103, 55, 9c):
103 = 5f(103)
38 = ce(103)
10f = f.4('<48>(.+?)</.*?103="(.+?)"', f.2b).c1(38)
4b 48, 65 54 10f:
103 = 48 + '/' + 65
60(103, 55, 9c)
14 40(62, 4a=5a('10a')):
7f = 24.ca()
c 7f.3c(4a, 62)
8c = {
'a0-94': '72/5.0 (f7; 111; dc cf; a2-107; e8:1.9.2.6) 97/b3 6f/3.6.6',
'59-c3': 'c7-a6-1,6b-8;e2=0.7,*;e2=0.7',
'59': '2a/ef,44/e3+d9,44/d9;e2=0.9,*/*;e2=0.8',
'59-af': 'a2-104,a2;e2=0.5',
}
14 d2(10a, 10={},23=""):
a8 = 24.63(10a,5b="", 2e=23)
a8.75( "6e", { "95" : 10a, "a9" : 10a} )
a8.8d('89', 5c)
103 = 5d.4f[0] + '?' + 1a.34(10)
c 13.d2(d4=6a(5d.4f[1]), 103=103, a1=a8, ab=ea)
14 12(10):
''' bd 10 c0 54 a 100 106 a f2. '''
32 = {}
43 10:
52 = 10[1:].92("&")
4b 53 54 52:
17 = 53.92('=')
43 (fd(17)) == 2:
32[17[0]] = 17[1]
c 32
1b = 12(5d.4f[2])
10a = 27(1b.58("10a", ""))
103 = 27(1b.58("103", ""))
103 = 1a.45(103)
15 = 27(1b.58("15", ""))
bc = 27(1b.58("bc", ""))
1f = 27(1b.58("1f", 1))
9c = 27(1b.58("9c", ""))
9c = 1a.45(9c)
#### bf ####
43 f8 5d.4f[2]:
b2#4e "f0 54 bb-114 e0 54 8b"
8f = 3f()
8a:
43 15 == 27(1):
8f = 30(103)
43 15 == 27(11):
8f = 2f(103, 9c)
43 15 == 27(2):
8f = 66(103, bc, 1f)
43 15 == 27(3):
8f = 37(103)")))(lambda a,b:b[int("0x"+a.group(1),16)],"0|1|2|3|compile|5|6|7|8|9|a|import|return|d|td_column_number|re|parameters|11|parameters_string_to_dict|xbmcplugin|def|mode|16|paramSplits|link|endOfDirectory|urllib|params|block_type|thisPlugin|getOtherCompetitions|page|cleanHex|acp_currpage|titleLogo|pic|xbmcgui|urllib2|getPostData|str|td_block_id|data|text|DOTALL|encode|vTitle|thumbnailImage|showListDialog|showLatestList|gedebug|paramDict|xbmcaddon|urlencode|adminAjax|xlistitem|getStream|content|acp_shortcode|except|block_td_uid|select|filter_value|getAddonInfo|showMainMenu|selectDialog|action|response|if|application|unquote|acp_pid|Request|baseURL|matches|heading|for|referer|td_atts|print|argv|host|add_header|paramPairs|paramsPair|in|title|post|fullmatchesandshows|get|Accept|addonInfo|iconImage|picFanart|sys|newsPaper|videoData|playVideo|resources|list|ListItem|jsonData|mediaURL|showList|sub|lower|req|int|utf|td_current_page|fixup|video|Firefox|DialogProgress|addonId|Mozilla|Windows|urlopen|setInfo|td_theme_name|td_ajax_block|translatePath|literal_eval|player|append|unichr|strTxt|href|dialog|xbmc|script|AresFootBall|config|values|subcat|pp_with_ajax|try|http|Fanart_Image|else|showContent|std_headers|setProperty|unicodedata|ok|addon|Addon|split|admin|Agent|Title|2008092417|Gecko|addon_data|Highlights|media|jpg|thumbnail|Newspaper|acp_title|Page|User|listitem|en|Next|dataPath|json|8859|from|li|FileName|urlparse|isFolder|join|os|acp_post|Language|logo|progress|pass|20100627|URLError|profile|picNext|Referer|httplib|GEDEBUG|special|default|postData|Convert|Matches|ACTIONS|encoded|findall|td_data|Charset|Latest|system|poster|ISO|LATEST|var|Dialog|s|plugin|png|getUrl|x86_64|ast|python|addDirectoryItem|decode|handle|fanart|td|ignore|header|xml|Player|loads|Linux|block|ascii|span4|going|value|q|xhtml|class|group|close|image|rv|atts|True|regex|icon|read|Full|html|Here|ajax|dict|play|next|r|and|X11|not|usr|www|f4m|php|len|bin|com|URL|td_filter_value|src|url|us|w|to|US|path|wp|name|GB|u|i|m|match|h1|U|NT|id|py|v|x".split("|")))
## decodes to:
#!/usr/bin/python
import xbmc,xbmcplugin
import xbmcgui
import sys
import urllib, urllib2
import re
import httplib
import urlparse
from os import path, system
from urllib2 import Request, URLError, urlopen
import xbmcaddon
import unicodedata
import json
import os
host = "http://www.fullmatchesandshows.com"
adminAjax = host+"/wp-admin/admin-ajax.php"
newsPaper = adminAjax + "?td_theme_name=Newspaper&v=6.5.1"
matches = host+"/matches/"
thisPlugin = int(sys.argv[1])
addonId = "plugin.video.AresFootBall"
dataPath = xbmc.translatePath('special://profile/addon_data/%s' % (addonId))
addon = xbmcaddon.Addon()
addonInfo = xbmcaddon.Addon().getAddonInfo
path = addon.getAddonInfo('path')
pic = path+"/icon.png"
picNext = path+"/next.png"
picFanart = path+"/fanart.jpg"
progress = xbmcgui.DialogProgress()
def getUrl(url, post='', referer=''):
if post: req = urllib2.Request(url, post)
else: req = urllib2.Request(url)
req.add_header('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3')
if referer:
req.add_header('Referer', referer)
response = urllib2.urlopen(req)
link=response.read()
response.close()
return link
def playVideo(url, title, pic):
xlistitem = xbmcgui.ListItem( title, iconImage=pic, thumbnailImage=pic, path=url)
xlistitem.setInfo( "video", { "Title": title } )
player = xbmc.Player()
player.play(url, xlistitem)
def gedebug(strTxt):
print '######################################################'
print '### GEDEBUG: ' + str(strTxt)
print '######################################################'
return
def cleanHex(text):
def fixup(m):
text = m.group(0)
if text[:3] == "&#x": return unichr(int(text[3:-1], 16)).encode('utf-8')
else: return unichr(int(text[2:-1])).encode('utf-8')
try :return re.sub("(?i)&#\w+;", fixup, text.decode('ISO-8859-1').encode('utf-8'))
except:return re.sub("(?i)&#\w+;", fixup, text.encode("ascii", "ignore").encode('utf-8'))
def showMainMenu():
addDirectoryItem("Latest Highlights and Full Matches", {"name":"LATEST", "url":host, "mode":1}, pic)
content = getUrl(matches)
regex = '<script>(var block_td_uid.+?)</s'
match = re.compile(regex, re.DOTALL).findall(content)[0]
postData = getPostData(match)
# gedebug(postData)
regex = 'td-subcat-list.*?>(.+?)</u'
content = re.compile(regex).findall(content)[0]
regex = 'filter_value..(\d{1,5})..*?>(.+?)</'
match = re.compile(regex).findall(content)
for td_filter_value, title in match:
try:
getOtherCompetitions(title)
except:
titleLogo = re.sub(r'\s', "-", title.lower())
thumbnail = os.path.join(path, 'resources', 'media', 'logo', titleLogo+'.jpg')
addDirectoryItem(title, {"name":title, "url":td_filter_value, "mode":2, "postData":postData}, thumbnail)
xbmcplugin.endOfDirectory(thisPlugin)
def getOtherCompetitions(title):
title = re.sub(r'\s', "-", title.lower())
content = getUrl(host+'/'+title+'/')
regex = '<script>(var block_td_uid.+?)</s'
match = re.compile(regex, re.DOTALL).findall(content)[0]
postData = getPostData(match)
regex = 'td-subcat-list.*?>(.+?)</u'
content = re.compile(regex).findall(content)[0]
regex = 'filter_value..(\d{1,5})..*?>(.+?)</'
match = re.compile(regex).findall(content)
for td_filter_value, title in match:
titleLogo = re.sub(r'\s', "-", title.lower())
thumbnail = os.path.join(path, 'resources', 'media', 'logo', titleLogo+'.jpg')
addDirectoryItem(title, {"name":title, "url":td_filter_value, "mode":2, "postData":postData}, thumbnail)
def showList(td_filter_value, postData, page):
data = urllib.unquote(postData)
import ast
postData = ast.literal_eval(data)
postData['td_filter_value'] = td_filter_value
postData['td_current_page'] = page
post = urllib.urlencode(postData)
content = getUrl(newsPaper, post)
jsonData = json.loads(content)
content = cleanHex(jsonData['td_data'])
regex = 'url".*?href="(.+?)".*?>(.+?)<.*?image.*?content="(.+?)"'
match = re.compile(regex).findall(content)
for link, title, pic in match:
addDirectoryItem(title, {"name":title, "url":link, "mode":11, "thumbnail":pic}, pic)
page = int(page)+1
addDirectoryItem("Next Page", {"name":"Next Page", "url":td_filter_value, "mode":2, "postData":postData, "page":page}, pic)
xbmcplugin.endOfDirectory(thisPlugin)
def getPostData(content, page=1):
action = 'td_ajax_block'
block_type = re.compile('block_type.*?"(.+?)"').findall(content)[0]
td_atts = re.compile('atts.*?\'(.+?)\'').findall(content)[0]
td_block_id = re.compile('id.*?"(.+?)"').findall(content)[0]
td_column_number = re.compile('td_column_number.*?"(.+?)"').findall(content)[0]
data = {
'action':action,
'block_type':block_type,
'td_atts':td_atts,
'td_block_id':td_block_id,
'td_column_number':td_column_number,
}
return data
def showLatestList(url):
gedebug(url)
content = getUrl(url)
regex = 'class="td-block-span4">.*?href="(.+?)".*?title="(.+?)".*?src="(.+?)\?'
match = re.compile(regex, re.DOTALL).findall(content)
for link, title, thumbnail in match:
title = cleanHex(title)
addDirectoryItem(title, {"name":title, "url":link, "mode":11}, thumbnail)
xbmcplugin.endOfDirectory(thisPlugin)
def showListDialog(url, thumbnail=''):
content = getUrl(url)
vTitle = re.compile('<header.*?>.*?h1.*?>(.+?)</',re.DOTALL).findall(content)[0]
vTitle = cleanHex(vTitle)
try:
acp_pid = re.compile('acp_post.*?value="(.+?)"').findall(content)[0]
regex = 'href="#(.+?)".*?acp_title.>(.+?)<'
match = re.compile(regex).findall(content)
name = []
url = []
for acp_currpage, title in match:
title = cleanHex(title)
values = {'acp_currpage' : acp_currpage,
'acp_pid' : acp_pid,
'acp_shortcode' : 'acp_shortcode',
'action' : 'pp_with_ajax'
}
data = urllib.urlencode(values)
content = getUrl(adminAjax, data)
# gedebug(content)
try:
regex = 'data-config="(.+?)"'
match = re.compile(regex).findall(content)[0]
link = 'http:'+match
name.append(title)
url.append(link)
except: pass
select = selectDialog(name, heading=vTitle)
if select == -1: return
link = url[select]
except:
regex = 'data-config="(.+?)"'
match = re.compile(regex).findall(content)[0]
link = 'http:'+match
getStream(link, vTitle, thumbnail)
def videoData(url):
content = getUrl(url)
regex = 'f4m":"(.+?)"'
url = re.compile(regex).findall(content)[0]
# regex = 'poster":"(.+?)"'
# pic = re.compile(regex).findall(content)[0]
return url
def getStream(url, title, thumbnail):
url = videoData(url)
content = getUrl(url)
match = re.compile('<baseURL>(.+?)</.*?url="(.+?)"', re.DOTALL).findall(content)
for baseURL, mediaURL in match:
url = baseURL + '/' + mediaURL
playVideo(url, title, thumbnail)
def selectDialog(list, heading=addonInfo('name')):
dialog = xbmcgui.Dialog()
return dialog.select(heading, list)
std_headers = {
'User-Agent': 'Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.6) Gecko/20100627 Firefox/3.6.6',
'Accept-Charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language': 'en-us,en;q=0.5',
}
def addDirectoryItem(name, parameters={},pic=""):
li = xbmcgui.ListItem(name,iconImage="", thumbnailImage=pic)
li.setInfo( "video", { "Title" : name, "FileName" : name} )
li.setProperty('Fanart_Image', picFanart)
url = sys.argv[0] + '?' + urllib.urlencode(parameters)
return xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]), url=url, listitem=li, isFolder=True)
def parameters_string_to_dict(parameters):
''' Convert parameters encoded in a URL to a dict. '''
paramDict = {}
if parameters:
paramPairs = parameters[1:].split("&")
for paramsPair in paramPairs:
paramSplits = paramsPair.split('=')
if (len(paramSplits)) == 2:
paramDict[paramSplits[0]] = paramSplits[1]
return paramDict
params = parameters_string_to_dict(sys.argv[2])
name = str(params.get("name", ""))
url = str(params.get("url", ""))
url = urllib.unquote(url)
mode = str(params.get("mode", ""))
postData = str(params.get("postData", ""))
page = str(params.get("page", 1))
thumbnail = str(params.get("thumbnail", ""))
thumbnail = urllib.unquote(thumbnail)
#### ACTIONS ####
if not sys.argv[2]:
pass#print "Here in default-py going in showContent"
ok = showMainMenu()
else:
if mode == str(1):
ok = showLatestList(url)
if mode == str(11):
ok = showListDialog(url, thumbnail)
if mode == str(2):
ok = showList(url, postData, page)
if mode == str(3):
ok = getStream(url)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment