Kodi-vStream / venom-xbmc-addons

Addon de Streaming français pour Xbmc
GNU General Public License v3.0
496 stars 275 forks source link

Cloudflare modification #2481

Closed Arias800 closed 5 years ago

Arias800 commented 5 years ago

Alors voila j'utilise le code de Cloudflare pour un code personnel pour télécharger des scans et sur Japscan et ils y a depuis quelque jours une nouvelle version de cloudflare qui est apparu et il est fort probable quel apparaisse bientôt sur d'autre site. Voila l'erreur générer

  File "<string>", line 1
    str(+str(+str(str(1+1+1+1+1+1+1+1+1+0)+str(+0)+str(1+1+1+1)+str(1+1+1+1+1+1)+str(1+1)+str(1+1+1+1+1+1+1+1)+str(1+1+1+1+1+1+1+1)+str(1+1+1+1+1+1+1+1+1)+str(1+1+1+1+1)))+str(functionstr(p){return evalstr(str(true+"")[0]+"."+str(0["fill"]+"")[3]+str(+str(101))["to"+String["name"]]str(21)[1]+str(false+"")[1]+str(true+"")[1]+Functionstr("return escape")str()str(str("")["italics"]str())[2]+str(true+0["fill"])[10]+str(undefined+"")[2]+str(true+"")[3]+str(+0+Array)[10]+str(true+"")[0]+"str("+p+")")}str(+str(str(1+1+1+1+1+1+1+0)))))
                                                                                                                                                                                              ^
SyntaxError: invalid syntax

Elle est declencher par dd = eval(droite) pendant calcul = eval( format(calcul,'.17g') + str(aEntry[0]) + format(parseInt(aEntry[1]),'.17g')). J'ai poser le code de la page cloudflare ici : https://github.com/Arias800/Fichier-divers/blob/master/newCF.html

TmpName commented 5 years ago

La y a un soucis, y a plein de commande JS dans le code. Donc soit c'est fixe et on passe par un code python qui extrait juste les chaine de caracteres, soit ca bouge et faut passer par l'interpreteur JS

Mais ya plein de nouvelle commande, y compris un passage en base64.

En fait le code est pas dur, un fois simplifié y a juste 2 /3 commandes je dirais a vu d'oeuil, mais si ca bouge tout les jours ca va pas etre possible.

function(p$jscomp$1) {
  return eval((true + "")[0] + "." + ([]["fill"] + "")[3] + (+101)["to" + String["name"]](21)[1] + (false + "")[1] + (true + "")[1] + Function("return escape")()(""["italics"]())[2] + (true + []["fill"])[10] + (undefined + "")[2] + (true + "")[3] + (+[] + Array)[10] + (true + "")[0] + "(" + p$jscomp$1 + ")");
}(+(!+[] + !![] + !![] + !![] + !![] + [])));
yufRqmf.PqzitQdGogNZ *= function(p$jscomp$2) {
  /** @type {*} */
  p$jscomp$2 = eval(eval(atob("ZG9jdW1l") + (undefined + "")[1] + (true + "")[0] + (+(+!+[] + [+!+[]] + (!![] + [])[!+[] + !+[] + !+[]] + [!+[] + !+[]] + [+[]]) + [])[+!+[]] + (false + [0] + String)[20] + (true + "")[3] + (true + "")[0] + "Element" + (+[] + Boolean)[10] + (NaN + [Infinity])[10] + "Id(" + (+20)["to" + String["name"]](21) + ")." + atob("aW5uZXJIVE1M")));
  return +p$jscomp$2;
}();
yufRqmf.Pqzit
Arias800 commented 5 years ago

Je sais pas j'ai vu qu'ici il sont deja dessus et que ça a l'air de bien avancer mais il passe par js2py https://github.com/Anorov/cloudflare-scrape/issues/215 ^^

TmpName commented 5 years ago

Je viens de lire, en fait ca plante si les parametres ne sont pas passé dans le bon ordre aussi, ca c'est vicelard.

Je ne pense pas avoir besoin de js2py, mais par contre leur code me semble leger

js = js.replace('function(p){return eval((true+"")[0]+"."+([]["fill"]+"")[3]+(+(101))[

Je sais pas combien de temps ca va rester fixe ca ?

Krylanc3lo commented 5 years ago

j'utilise ce code depuis un moment et c'est assez stable. c'est surtout le coup des parametres a mettre dans l'ordre qui est galere. J'essaie d'implementer le OrderedDictionary et ensuite on pourra peut-etre adapter sans js2py

(BTW, rien a voir directement mais vous avez un bon moyen de descrambler les images sur JS ? mon code marche mais pas sur tous)

Arias800 commented 5 years ago

Ca depends si c'est pour japscan oui il y a un code qui traine sur internet il faut juste faire deux 3 modif dessus ^^

Krylanc3lo commented 5 years ago

Oui c'est pour JS, ca marche pour la plupart des scans mais pas sur tous. Merci je vais chercher alors!

TmpName commented 5 years ago

Ben le truc c'est que leur derniere modif ne date que de quelques jours, donc je sais pas ce que ca va donner sur le long terme. En fait mon probleme est de savoir ce que je laisse en JS et ce que je converti en python.

Arias800 commented 5 years ago

Depuis qu'ils ont mis cette version il ne l'ont pas modifier mais ça fait une petite semaine donc ca n'indique rien :/ @Krylanc3lo le code que j'ai trouver sur internet et que j'utilise en python pour descrambler les image est ici et pour le moment il n'a jamais poser probleme : https://github.com/Arias800/Fichier-divers/blob/master/jap.py

Krylanc3lo commented 5 years ago

Merci beaucoup @Arias800, je regarde tout de suite :)

Arias800 commented 5 years ago

Si tu a des question créer une issue la : https://github.com/Arias800/Fichier-divers/issues comme ça on pollue pas cette issue avec du hors sujet ^^

TmpName commented 5 years ago

Alors je viens de faire un mix de notre code, du leur et de fonction prise dans le parser JS et j'arrive a ca https://pastebin.com/b7ciDLUN Ca tourne sans js2py

Par contre faudrait remettre ce code dans le fichhier cloudflare et trouver un site pour tester.

Y a evidement moyen d'alleger le code, c'etait juste un test pour voir si c'etait possible.

Arias800 commented 5 years ago

Je viens d'essayer pour que ca fonctionne il faut que je mettent a jour manuellement les cookie sinon il y a le cookie __cfduid qui apparait deux fois et du coup il manque le cf_clearance

Krylanc3lo commented 5 years ago

ah nice. tu l'updates avec quelle valeurs?

Arias800 commented 5 years ago

Avec celle recuperer via le navigateur internet ^^

TmpName commented 5 years ago

Le code actuel permet d'avoir deux fois le meme cookie ? Je pensais que ca avait ete corrige ca.

Arias800 commented 5 years ago

Non il y a deux cookie différent pour __cfduid l'un apres l'autre mais aucun pour cf_clearance ^^

Arias800 commented 5 years ago

Tiens voila le code cloudflare que j'utilise pour voir si tu trouve d'ou viens le probleme (je l'ai mis sous python 3) https://github.com/Arias800/Fichier-divers/blob/master/cf.py

TmpName commented 5 years ago

Ben deja me suis loupe dans mon code pour decoder ^^. La je repare un code qui traine sur internet jsunfuck.py pour l'integrer a notre code, si ca marche pas j'integre notre parserJS.

Arias800 commented 5 years ago

Je sais pas si c'est celui la mais il y a deja un jsunfuck.py dans Vstream que j'avais mis pour FirstOneTv ^^ https://github.com/Kodi-vStream/venom-xbmc-addons/blob/Beta/plugin.video.vstream/resources/lib/jsunfuck.py

TmpName commented 5 years ago

C'est presque de celui que je suis parti, mais il ne marche pas, je suis sur la fin la.

Arias800 commented 5 years ago

D'accord c’était pour savoir vu que j’hésitais a le dégager vu que FirstOneTv a fermer ^^

TmpName commented 5 years ago

Alors nouvelle version https://pastebin.com/s07UsjDz Fonctionne avec le nouveau jsfuck, j'ai modifie celle du github.

Le decodage est bon, enfin la valeur renvoyée est bonne, mais ca marche pas ^^. J'ai fais gaffe aux nouveaux headers et l'ordre des parametres.

Par contre pas vu le probleme de cookie ?

Arias800 commented 5 years ago

C'est bizarre sur japscan ca ne veux pas recuperer les cookie et donc ça ne veux pas rediriger vers la page que je demande si tu veux essayer pour voir si ca vient de chez moi voila un liens qui ne marche pas : h ttps://www.japscan.to/manga/jackals/

TmpName commented 5 years ago

Non , mais le code que j'ai mis en ligne de marche pas non plus ^^. J'ai le premier cookie, le decodage est bon, mais au lieu d'avoir la page qui donne le bon cookie (le deuxieme > cf_clearance), je reboucle. Y a un probleme sur la requete, c'est pour ca qu'on a pas le bon cookie

La j'ai supprime le header 'Content-Type' mais ca marche tjours pas, j'ai du rater un truc.

TmpName commented 5 years ago

Bon derniere version https://pastebin.com/5V3zaxQf A marche pas, et la je vois pas, j'ai foutu absolument tout les headers.

TmpName commented 5 years ago

C'est bon ca remarche, probleme d'encodage. Nouveau fichier > https://pastebin.com/7RUhGSwk

Reste a la convertir en python2 pour kodi, et faire un peu de nettoyage.

ebs111222 commented 5 years ago

new_cf.zip here is a working code.

TmpName commented 5 years ago

@ebs111222 but your version can't work on the new CF version with in code ]+!![]+!![]));YixtMfi.bV-=function(p){var p = eval(eval(atob("ZG9jdW1l")+(undefined+"")[1]+(true+"")[0]+(+(+!+[]+[+!+[]]+(!![]+[])[!+[]+!+[]+!+[]]+[!+[]+!+[]]+[+[]])+[])[+!+[]]+(false+[0]+String)[20]+(true+"")[3]+(true+"")[0]+"Element"+(+[]+Boolean)[10]+(NaN+[Infinity])[10]+"Id("+(+(20))["to"+String["name"]](21)+")."+atob("aW5uZXJIVE1M"))); return +(p)}();YixtMfi.bV*=+((!+[]+!![]+!![]+!!"

your fonction parseJSString is not strong enought.

And after reflexion, my version works with the new one, but does't work any more with the old one, and CF still use the old one ...

Edit: Oups , I haven't checked all the code, sorry thx, and without js2py too.

TmpName commented 5 years ago
            if '+ t.length).toFixed' in self.html:
                answer += len(self.domain) # Only old variantes add the domain length.  

Was exactly, that we miss for old version compatibility ^^, realy good code.

BTW the waiting time is important ? We are using a static value, and I haven't see problem yet.

ebs111222 commented 5 years ago

@TmpName i think that the safe side is reading the correct one. its in the code here: js_data["wait"] any way any improvement you can make will be welcome.

Arias800 commented 5 years ago

I have make some change :

https://github.com/Arias800/Fichier-divers/blob/master/cf.py

Arias800 commented 5 years ago

Cloudflare change again today

ebs111222 commented 5 years ago

@Arias800 As i understood it was changed again any way here is a working solution https://gist.github.com/doko-desuka/58d9212461f62583f8df9bc6387fade2

TmpName commented 5 years ago

ok, so on my side I will wait for some days to see if cloudflare want to make a dynamic code. And if yes, i will update the JSparser for it, I don't want to make a new code every 2 days.

ebs111222 commented 5 years ago

@TmpName Accualy the repair was made not because cf changed there code as i understood it the was aproblem with the old code but i didnt checked exactly what

ebs111222 commented 5 years ago

You know i never understood why isnt there some sort of an API where you send him the address and get the resolved html...

TmpName commented 5 years ago

Lol, yeah, will be usefull :) But you need tons of proxy to change the server IP, because you will be banned so fast. Too much people will need it.

TmpName commented 5 years ago

Bon j'ai refais le code en rendant les regex plus large. Le decodage est bon, le lien est bon , mais ca marche pas, et j'arrive pas a voir ce qui deconne dans les headers. https://pastebin.com/Y0PUJmtX

Arias800 commented 5 years ago

C'est quand même bizarre ce probleme de headers peut être est ce urllib qui merde car tout les autres code utilise request ?

ebs111222 commented 5 years ago

@TmpName Why? Tmdb does it quite well...

TmpName commented 5 years ago

Ben je voulais compararer les deux solutions avec wireshark, et la leur ne marche plus non plus

# coding=utf-8
import cf
import cfscrape

UA = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'

headers = {}
headers['User-Agent'] = UA
headers['Accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8'
headers['Accept-Language'] = 'en-US,en;q=0.5'
headers['Cache-Control'] = 'no-cache'
headers['Pragma'] = 'no-cache'
headers['DNT'] = '1'

if (False):

    CF = cf.CloudflareBypass()
    sContent = CF.GetHtml("https://www.japscan.to/" ,"","","",headers)

else:
    s = cfscrape.CloudflareScraper()
    s.headers.update(headers)
    r = s.get('https://www.japscan.to/')
    sContent = r

print (r)

G:\Python\Cloudflare2>python G:\Python\Cloudflare2\comparatif.py
<Response [403]>
Arias800 commented 5 years ago

Ah moi j'utilise celle la et elle fonctionne très bien https://github.com/Arias800/CloudflareScraper/blob/master/CloudflareScraper/__init__.py Pour la requete je l'effectue comme ça :

scraper = CloudflareScraper.create_scraper()
file = scraper.get("https://www.japscan.to/").content
TmpName commented 5 years ago

Ben celui la marche "mieux" mais j'ai la protection captcha a la place ^^.

Arias800 commented 5 years ago

Ah bizarre d'habitude c'est moi qui est la protection captcha x)

Arias800 commented 5 years ago

@TmpName c'est corriger https://github.com/Arias800/CloudflareScraper/blob/master/CloudflareScraper/__init__.py c’était un bug que j'avais pas vu passer dans le pull request x)

TmpName commented 5 years ago

Ben en fait j'ai encore un truc bizarre Si je fais cloudflare_kwargs = deepcopy(original_kwargs) > captcha Si je fais cloudflare_kwargs = original_kwargs.copy( ) > ca marche mais si je fais print (str( cloudflare_kwargs )) j'ai la meme chose, c'est le type qui va pas ?

Arias800 commented 5 years ago

C'est vrai que j'ai pas vérifier car a la base c'est baser sur un code qui utilise ce principe et c'est vrai qu'entre temps j'ai juste dégager deepcopy car ça faisait une dépendance en plus et qui plus est pas utile mais j'ai pas penser a faire totalement sans cette ligne et effectivement ca marche sans x)

TmpName commented 5 years ago

Bon ca me gave, derniere version > https://pastebin.com/BhBD5hrz

Tout a l'identique et ca passe pas. Et je vais pas foutre en place le https dans wireshark, donc si quelqu'un a un site en http avec cette protection sinon, moi je change de lib.

TmpName commented 5 years ago

Bon j'ai voulu garder notre code et faire avec request > meme probleme. Mais au moins ca va etre plus facile pour comparer. Si tu as 5mn pr avoir ton avis https://pastebin.com/YNDAhSZx

A part le systeme de sessions je vois pas ce qui manque

Arias800 commented 5 years ago

Je viens d'essayer et chez moi ca me revoie tout le temps sur la page de le protection donc il y a un probleme pendant le decryptage des valeurs je pense ^^