Changeset 43826


Ignore:
Timestamp:
May 18, 2019, 12:38:50 AM (4 weeks ago)
Author:
aafsvn
Message:

update net

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/mediathek/localhoster/lib/net.py

    r42597 r43826  
    280280        return val
    281281
    282     def _extract_js(self, htmlcontent, domain):
     282    def _extract_js_old(self, htmlcontent, domain):
    283283        line1 = re.findall('var s,t,o,p,b,r,e,a,k,i,n,g,f, (.+?)={"(.+?)":\+*(.+?)};', htmlcontent)
    284284        varname = line1[0][0] + '.' + line1[0][1]
     
    291291        return format(rep, '.10f')
    292292
    293     def createUrl(sUrl, oRequest):
     293#######################
     294# neu
     295#######################
     296
     297    def cf_sample_domain_function(self, func_expression, domain):
     298#        print "cf_sample_domain_functio"
     299        parameter_start_index = func_expression.find('}(') + 2
     300        sample_index = self.cf_parse_expression(func_expression[parameter_start_index: func_expression.rfind(')))')])
     301        return ord(domain[int(sample_index)])
     302
     303    def cf_arithmetic_op(self, op, a, b):
     304#        print "cf_arithmetic_op"
     305
     306        if op == '+':
     307            return a + b
     308        elif op == '/':
     309            return a / float(b)
     310        elif op == '*':
     311            return a * float(b)
     312        elif op == '-':
     313            return a - b
     314        else:
     315            raise Exception('Unknown operation')
     316
     317    def _get_jsfuck_number(self, section):
     318#        print "_get_jsfuck_number"
     319
     320        digit_expressions = section.replace('!+[]', '1').replace('+!![]', '1').replace('+[]', '0').split('+')
     321        return int(''.join(str(sum(int(digit_char) for digit_char in digit_expression[1:-1]))
     322                               for digit_expression in digit_expressions))
     323
     324    def cf_parse_expression(self, expression, domain=None):
     325#        print "cf_parse_expression"
     326
     327        if '/' in expression:
     328            dividend, divisor = expression.split('/')
     329            dividend = dividend[2:-1]
     330            if domain:
     331                divisor_a, divisor_b = divisor.split('))+(')
     332                divisor_a = self._get_jsfuck_number(divisor_a[5:])
     333                divisor_b = self.cf_sample_domain_function(divisor_b, domain)
     334                return self._get_jsfuck_number(dividend) / float(divisor_a + divisor_b)
     335            else:
     336                divisor = divisor[2:-1]
     337                return self._get_jsfuck_number(dividend) / float(self._get_jsfuck_number(divisor))
     338        else:   
     339            return self._get_jsfuck_number(expression[2:-1])
     340       
     341#    @staticmethod
     342    def _extract_js(self, body, domain):
     343#        print "1 body", body
     344#        return "123"
     345#        print "2 domain", domain
     346
     347        form_index = body.find('id="challenge-form"')
     348#        print "3 form_index", form_index
     349
     350        sub_body = body[form_index:]
     351#        print "4 sub_body", sub_body
     352
     353        if body.find('id="cf-dn-', form_index) != -1:
     354            extra_div_expression = re.search('id="cf-dn-.*?>(.+?)<', sub_body).group(1)
     355#            print "5 extra_div_expression", extra_div_expression
     356
     357        js_answer = self.cf_parse_expression(re.search('setTimeout\(function\(.*?:(.*?)}', body, re.DOTALL).group(1))
     358#        print "6 js_answer", js_answer
     359
     360        builder = re.search("challenge-form'\);\s*;(.*);a.value", body, re.DOTALL).group(1)
     361#        print "7 builder", builder
     362
     363        lines = builder.replace(' return +(p)}();', '', 1).split(';')
     364#        print "8 lines", lines
     365        for line in lines:
     366#            print "9 line", line
     367            if len(line) and '=' in line:
     368                heading, expression = line.split('=', 1)
     369                if 'eval(eval(' in expression:
     370                    expression_value = self.cf_parse_expression(extra_div_expression)
     371                elif 'function(p' in expression:
     372                    expression_value = self.cf_parse_expression(expression, domain)
     373                else:
     374                    expression_value = self.cf_parse_expression(expression)
     375#                print "10 js_answer"
     376                js_answer = self.cf_arithmetic_op(heading[-1], js_answer, expression_value)
     377#                print "11 js_answer", js_answer
     378#            print "12 js_answer"
     379
     380        if '+ t.length' in body:
     381            js_answer += len(domain)
     382       
     383        ret = format(js_answer, '.10f')
     384#        print "end ret", ret
     385        return (str(ret))
     386
     387############################
     388
     389    def createUrl(self, sUrl, oRequest):
    294390        parsed_url = urlparse(sUrl)
    295391        netloc = parsed_url.netloc[4:] if parsed_url.netloc.startswith('www.') else parsed_url.netloc
     
    320416        jschl = re.compile('name="jschl_vc" value="(.+?)"/>').findall(challenge)[0]
    321417        passw = re.compile('name="pass" value="(.+?)"/>').findall(challenge)[0]
     418        s = re.compile('name="s"\svalue="(?P<s_value>[^"]+)').findall(challenge)[0]
     419
     420#        print "jschl", jschl
     421#        print "passw", passw
     422#        print "s", s
     423
    322424        js = self._extract_js(challenge, url)
    323425
     426#        body = response.read()
    324427        body = challenge
    325428        parsed_url = urlparse(url)
    326429        submit_url = "%s://%s/cdn-cgi/l/chk_jschl" % (parsed_url.scheme, parsed_url.netloc)
     430
    327431        params = {}
    328         try:
     432#        print "123", submit_url
     433
     434        try:
     435#            print "try", submit_url
     436
    329437            params["jschl_vc"] = re.search(r'name="jschl_vc" value="(\w+)"', body).group(1)
    330438            params["pass"] = re.search(r'name="pass" value="(.+?)"', body).group(1)
     439            params["s"] = re.search(r'name="s"\svalue="(?P<s_value>[^"]+)', body).group(1)
     440
    331441            js = self._extract_js(body, parsed_url.netloc)
    332442        except:
     443            print "except", submit_url
     444
    333445            return None
    334446
    335447        params["jschl_answer"] = js
    336448        sParameters = urllib.urlencode(params, True)
     449
    337450        request = urllib2.Request("%s?%s" % (submit_url, sParameters))
    338451
     
    351464
    352465        url = url.rstrip('/')
    353         query = '%s/cdn-cgi/l/chk_jschl?jschl_vc=%s&jschl_answer=%s' % (url, jschl, answer)
     466#        query = '%s/cdn-cgi/l/chk_jschl?jschl_vc=%s&jschl_answer=%s' % (url, jschl, answer)
     467        query = '%s/cdn-cgi/l/chk_jschl?s=%s&jschl_vc=%s&jschl_answer=%s' % (url, urllib.quote_plus(s), jschl, answer)
     468#        print "query1", query
    354469
    355470        if 'type="hidden" name="pass"' in challenge:
    356471            passval = re.compile('name="pass" value="(.*?)"').findall(challenge)[0]
    357             query = '%s/cdn-cgi/l/chk_jschl?pass=%s&jschl_vc=%s&jschl_answer=%s' % \
    358                     (url, urllib.quote_plus(passval), jschl, answer)
     472#            query = '%s/cdn-cgi/l/chk_jschl?pass=%s&jschl_vc=%s&jschl_answer=%s' % \
     473#                    (url, urllib.quote_plus(passval), jschl, answer)
     474            query = '%s/cdn-cgi/l/chk_jschl?s=%s&jschl_vc=%s&pass=%s&jschl_answer=%s' % \
     475                    (url, urllib.quote_plus(s), jschl, passval, answer)
     476#            print "query2", query
     477
    359478            time.sleep(9)
    360479
    361         self._update_opener(cloudflare_jar=True)
     480#        createUrl(sUrl, oRequest):
     481 
     482        self._update_opener()
    362483        req = urllib2.Request(query)
    363484        if form_data:
     
    393514            compression.
    394515        """
     516#        print "_set_cloudflare"
    395517        netloc = urlparse(url).netloc
    396518        if not netloc:
    397519            netloc = urlparse(url).path
    398520        cloudflare_url = urlunparse((urlparse(url).scheme, netloc, '', '', '', ''))
    399         try:
     521
     522        try:
     523#            print "_set_cloudflare try"
    400524            self._cloudflare_challenge(cloudflare_url, challenge, form_data, headers, compression)
    401525            for c in self._cloudflare_jar:
     526#                print "_set_cloudflare c: ", c
    402527                self._cj.set_cookie(c)
    403             self._update_opener()
     528            self._update_opener(cloudflare_jar=True)
    404529        except:
    405530            # make sure we update to main jar
     531#            print "_set_cloudflare except"
     532
    406533            self._update_opener()
    407534            raise Exception
     
    552679            meta-information about the page and the page content.
    553680        '''
     681#        print "http_GET"
     682
    554683        if cloudflare is None:
    555684            cloudflare = self.cloudflare
     
    632761            meta-information about the page and the page content.
    633762        '''
     763#        print "_fetch"
    634764        if cloudflare is None:
    635765            cloudflare = self.cloudflare
Note: See TracChangeset for help on using the changeset viewer.