Closed Arias800 closed 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
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 ^^
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 ?
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)
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 ^^
Oui c'est pour JS, ca marche pour la plupart des scans mais pas sur tous. Merci je vais chercher alors!
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.
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
Merci beaucoup @Arias800, je regarde tout de suite :)
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 ^^
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.
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
ah nice. tu l'updates avec quelle valeurs?
Avec celle recuperer via le navigateur internet ^^
Le code actuel permet d'avoir deux fois le meme cookie ? Je pensais que ca avait ete corrige ca.
Non il y a deux cookie différent pour __cfduid l'un apres l'autre mais aucun pour cf_clearance ^^
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
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.
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
C'est presque de celui que je suis parti, mais il ne marche pas, je suis sur la fin la.
D'accord c’était pour savoir vu que j’hésitais a le dégager vu que FirstOneTv a fermer ^^
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 ?
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/
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.
Bon derniere version https://pastebin.com/5V3zaxQf A marche pas, et la je vois pas, j'ai foutu absolument tout les headers.
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.
new_cf.zip here is a working code.
@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.
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.
@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.
I have make some change :
https://github.com/Arias800/Fichier-divers/blob/master/cf.py
Cloudflare change again today
@Arias800 As i understood it was changed again any way here is a working solution https://gist.github.com/doko-desuka/58d9212461f62583f8df9bc6387fade2
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.
@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
You know i never understood why isnt there some sort of an API where you send him the address and get the resolved html...
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.
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
C'est quand même bizarre ce probleme de headers peut être est ce urllib qui merde car tout les autres code utilise request ?
@TmpName Why? Tmdb does it quite well...
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]>
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
Ben celui la marche "mieux" mais j'ai la protection captcha a la place ^^.
Ah bizarre d'habitude c'est moi qui est la protection captcha x)
@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)
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 ?
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)
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.
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
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 ^^
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
Elle est declencher par
dd = eval(droite)
pendantcalcul = 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