3 Eylül 2018 Pazartesi

Python'da JavaScript çalıştırmak - Js2Py

Javascript to Python Translator

Python alıştığınızda bırakılması zor olan bir dil. Python da JavaScript çalıştırabilirsiniz dersem aklınıza ilk ne gelir. Bunun için Chrome, Nodejs modülleri var lakin ben hiç birini kullanmadım.
Js2Py biçilmiş kaftan. Hem admin isteği yok yani static(portable) olarak Python'la etkileşimli bir şekilde çalışıyor. Js2Py tarayıcı zorunluğu gerektiren requests isteklerinde, js algoritmalarını pythonda çözmek gerekirse harika çalışıyor.

Js2Py nedir ? 

Js2Py, % 100 etkileşimli Python'da ECMAScript 5.1'i tam olarak çalıştırabilen çeviricidir . JavaScript'i doğrudan Python'a çevirerek çalışır. Bu, JS'yi, V8 gibi büyük harici motorları kurmadan Python kodunuzdan kolayca çalıştırabileceğiniz anlamına gelir. Js2Py nerede kullandığımı açıklayayım.

Cloudflare Bypass Set Cookie

Bir sitenin kaydolma sayfasına requests isteği göndermem gerekiyordu. Sayfa cloudflare ile ddostan korunuyordu.
siteye ilk girdiğinizde sizi ddos sayfası karşılıyor ve 4 saniye sonra gerçek sayfaya yönlendiriliyorsunuz.
bu yönlendirmede tarayıcaya iki adet cookie set ediliyor ve tekrar tekrar sayfaya girdiğinizde 4 saniye beklemek zorunda kalmıyorsunuz.
yönlendirme yapılırken tarayıcıda js kodu çalışarak token üretiliyor. bu token yardımıyla post ediliyor.









Bize lazım olan formdaki action urlsi ve KoTuvCg kısmını jschl_answer değerine yerleştirmek. Bu işlemlerin pythoncasına gelelim.


CloudFlare Bypass with Python js run code

NOT:
kodda değiştirmeniz gereken yer https://example.com ve sitenin uzunluğu ["t.length;","11;")]

import re,requests,urllib2,js2py#pip install js2py

#jschl-answer icin gerekli kodlarin regexi
regexddos = r"(var s.+)\n.+\n.+\n.+\n.+\n.+\n.+\n........(.+)"
#formdaki get(?) istegi icin malzemeler
regexform = r"jschl_vc\".value=\"(.+)\"\/>\n.+value=\"(.+)\""

def sayfa_ac(link):
    page = requests.get(link)
    return page.text

def jsrun():
    source=sayfa_ac("https://example.com")#guvenlik sebebiyle siteyi gizledim.
    if(source.find('DDoS')>-1):
        print "cloudflare ok."
        jstext=re.findall(regexddos,source)
        fr=re.findall(regexform,source)
        f=fr[0]
        print f[0]#jschl_vc
        print f[1]#pass
        t=jstext[0]
        js1=t[0]
        js2=t[1]
        #js2py icin bazi degisiklikler..
        js2=js2.replace("a.value","a").replace("t.length;","11;").replace("'; 121'","return a;")#11 https://example.com --> 'example.com'.length >> 11
        print js1
        print js2
        jscrpt=js2py.eval_js("function jscrpt(){"+js1+js2+"}")
        url="http://example.com/cdn-cgi/l/chk_jschl?jschl_vc="+str(f[0])+"&pass="+str(f[1])+"&jschl_answer="+str(jscrpt())
        s = requests.Session()
        r=s.get(url)
        print r.text
        print s.cookies.get_dict()#set edilen cerezler
        e=s.get("https://example.com")
        print e.text#gercek sayfamizin kaynak kodlari

jsrun()


jscrpt=js2py.eval_js("function jscrpt(){"+js1+js2+"}")
pythonla etkileşimli olan kısım burası eval_js kısmına yazdığımız fonksiyona pythonda erişebiliyoruz.  jschl_answer="+str(jscrpt())

Daha fazla bilgi için..

https://github.com/PiotrDabkowski/Js2Py
http://piter.io/projects/js2py

2 yorum

Sorunuz olursa yorum bölümden çekinmeden sorabilirsiniz.

Admin çok güzel çalışıyor js2py teşekkürler

Okuyup geçme yorum yap lütfen :)
EmojiEmoji