PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : (BASH) - Upload promptfile.com - API/Schnittstelle



syrius
15.05.2015, 10:34
Tag,

habe derzeit ein Problem ne Schnittstelle für PromtFile.com zu schreiben. Die fordern beim Login ein Captcha wo ich mir aktuell schwer tu einen Login für die Zuordnung der Files durchzuführen.

Für gewöhnlich realisiere ich das mit cURL und der POST würde wie folgt aussehen:

action=login&data%5Blogin%5D=${ACCOUNT_USER}&data%5Bpassword%5D=${ACCOUNT_PASS}&data%5Bcode%5D=${CAPTCHA_CODE}

nur komme ich nicht an den Captcha Code per SSH. Das Captcha wird hier generiert: http://www.promptfile.com/securimage_show.php?sid=.......

erschwerend kommt hinzu, dass die JavaScript nutzen ... ohne JS kein Overlay fürn Login :(

Hat jemand Vorschläge/Ideen?

greetz

Cappa
15.05.2015, 11:13
Captcha kannst du schön an 9kw z.B. schicken:

https://www.9kw.eu/api.html#apisubmit-tab

Da kannst du einfach die URL hin curlen :-)

syrius
15.05.2015, 11:28
Captcha kannst du schön an 9kw z.B. schicken:

https://www.9kw.eu/api.html#apisubmit-tab

Da kannst du einfach die URL hin curlen :-)

Schick aber dazu müsste ich per cURL erst mal das Captcha bekommen ... und das ist aktuell nicht der Fall.

Unlimiter
15.05.2015, 12:32
Als schnell gesagt empfehle ich hier einmal den Neebuu-Uploader zu downloaden und dir dazu die Java-Files anzusehen.

Neembuu Uploader / Git Code / [90ce67] /modules/neembuu-uploader-uploaders/src/neembuu/uploader/accounts/PromptFileAccount.java (http://sourceforge.net/p/neembuuuploader/gitcode/ci/90ce677f729cd57dc93dbf5b7d12113032c17d2e/tree/modules/neembuu-uploader-uploaders/src/neembuu/uploader/accounts/PromptFileAccount.java#l136)

Dieser hat nämlich auch promtfile implementiert und hat hier die eigenen Captchaklassen hinterlegt. Eine genauere Antwort kann ich leider nicht liefern, da ich es mir nicht noch näher angesehen habe.

Hier übrigens die Verzeichnisse: Neembuu Uploader / Git Code / [8bdd6b] /modules/NeembuuUploader/src/neembuu/uploader (http://sourceforge.net/p/neembuuuploader/gitcode/ci/master/tree/modules/NeembuuUploader/src/neembuu/uploader/)

syrius
15.05.2015, 12:42
Als schnell gesagt empfehle ich hier einmal den Neebuu-Uploader zu downloaden und dir dazu die Java-Files anzusehen.

Neembuu Uploader / Git Code / [90ce67] /modules/neembuu-uploader-uploaders/src/neembuu/uploader/accounts/PromptFileAccount.java (http://sourceforge.net/p/neembuuuploader/gitcode/ci/90ce677f729cd57dc93dbf5b7d12113032c17d2e/tree/modules/neembuu-uploader-uploaders/src/neembuu/uploader/accounts/PromptFileAccount.java#l136)

Dieser hat nämlich auch promtfile implementiert und hat hier die eigenen Captchaklassen hinterlegt. Eine genauere Antwort kann ich leider nicht liefern, da ich es mir nicht noch näher angesehen habe.

Hier übrigens die Verzeichnisse: Neembuu Uploader / Git Code / [8bdd6b] /modules/NeembuuUploader/src/neembuu/uploader (http://sourceforge.net/p/neembuuuploader/gitcode/ci/master/tree/modules/NeembuuUploader/src/neembuu/uploader/)

Ohje :) Ich bin doch kein Webentwickler ... ^^ aber ich werds mir ansehen und versuchen zu verstehen, danke))

xTear
15.05.2015, 13:23
Ohje :) Ich bin doch kein Webentwickler ... ^^ aber ich werds mir ansehen und versuchen zu verstehen, danke))

Hab dich ja in ICQ ^^
BIn da auch gerade dran, bloß mit NodeJS statt Bash ;)

Das Captcha regt mich auch ziemlich auf ^^

Cappa
15.05.2015, 14:51
Habs mal mit Wireshark gesnifft. Ganz einfach :-)

Sende ein POST mit "modal=login" an http://www.promptfile.com/modal.php

Als Response bekommst du dann die Form auf gewohntem Wege:


<div id="login_modal" class="modal_container">

<h1>Login<span class="modal_close">x</span></h1>

<div id="modal_msg"></div>

<form id="login_form">

<input type="text" name="login" id="login" class="placeholders" placeholder="Username or Email" />
<input type="password" name="password" id="password" class="placeholders" placeholder="Password" />

<img id="captcha" src="/securimage_show.php?sid=9a3734d3dffc6fda91a9155dd3 09a0a7" alt="captcha image" />
<a href="#" id="refresh_captcha" onclick="document.getElementById('captcha').src = '/securimage_show.php?sid=' + Math.random(); return false;">Refresh</a>

<input type="text" name="ccode" id="ccode" class="placeholders" placeholder="Captcha Code" />

<button type="submit" class="gray_btn right_btn">Login</button>

<div class="clear"></div>

</form>

</div>


Edit: Und das direkt nach 2 stündigem Mittagsschlaf VOR meinem Kaffee! Preiset den Cappa!

Cappa
19.05.2015, 10:48
Klappt das denn? Oder habe ich mich geirrt?

Habe das nicht verifiziert sondern lediglich interpretiert :-D

syrius
19.05.2015, 11:26
Klappt das denn? Oder habe ich mich geirrt?

Habe das nicht verifiziert sondern lediglich interpretiert :-D

Hab das leider noch nicht abgearbeitet... bin aktuell dabei ma Gedanken neu zu ordnen :D aber spätestens am Wochenende wirds dann soweit sein dann poste ich mein Ergebnis :)

syrius
31.05.2015, 11:12
Klappt das denn? Oder habe ich mich geirrt?

Habe das nicht verifiziert sondern lediglich interpretiert :-D

Habe mir das gestern nochmal angesehen habe aber Schwierigkeiten das Captcha zu bekommen- das richtige. Denn bei Request an die modal.php und dem damit verbundenen Aufruf an die /securimage_show.php?sid=<SESSIONID> wird trotzdem immer ein anderes Captcha generiert.

Cappa
31.05.2015, 12:10
Du sollst da keinen Request hinschicken :-P

per CURL POST an modal und die Daten parsen, dann direkt mit Captcha beginne:

Du lädst das von modal erhaltene Captcha direkt runter (/securimage_show.php?sid=${SID}) - als PNG nachher bei 9kw oder so wieder hoch und schickst den kompletten Login Request ab. Das Captcha darfst du natürlich insgesamt nur einmal laden. Wenn du die Captcha URL an 9kw sendest dann hast du recht. 5 Downloads = 5 unterschiedliche Caotchas.

Raynor
31.05.2015, 16:24
Ich kann nicht gut Bash, darum helfe ich dir mal mit einen einfachen Pythonscript aus.
Funktioniert ohne Probleme.

Der Captcha ist außerdem ziemlich einfach. Statt 9KW kannst du mal probieren die Captchas mit OCR (en.wikipedia.org/wiki/Optical_character_recognition) zu lösen. Bei ORC-Webseiten hat das gut funktioniert.



print "Promptfile loginbot"
print "[email protected]"
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "255.255.255.255", 1080) #Socks5 proxy
socket.socket = socks.socksocket
import urllib
import urllib2
import cookielib
import re

#EasyHTTP by Raynor@Szenebox
class EasyHTTP:
def __init__(self):
self.header = ( 'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36' )
self.cookies = cookielib.CookieJar()

def HTTPRequest(self,url,data=None):
self.opener = urllib2.build_opener(urllib2.HTTPRedirectHandler() ,
urllib2.HTTPHandler(debuglevel=0),
urllib2.HTTPSHandler(debuglevel=0),
urllib2.HTTPCookieProcessor(self.cookies))
self.addheaders = [self.header]
urllib2.install_opener(self.opener)
response = self.opener.open(url,data)
return response.read()

class Bot:
def __init__(self):
self.easyHTTP = EasyHTTP()

def setUser(self,username,password):
self.username = username
self.password = password

def login(self):
print "fetch captcha.."
self.easyHTTP.HTTPRequest('http://www.promptfile.com')

html = self.easyHTTP.HTTPRequest('http://www.promptfile.com/modal.php',"modal=login")
html = html.split('securimage_show.php?sid=')[1]
sid = html.split('"')[0]

captcha = open("captcha.png","w")
captcha.write(self.easyHTTP.HTTPRequest('http://www.promptfile.com/securimage_show.php?sid='+sid))
captcha.close()
captchacode = raw_input("Enter Captcha:\n$ ")
print "login.."
status = self.easyHTTP.HTTPRequest('http://www.promptfile.com/actions.php',"action=login&data[login]="+self.username+"&data[password]="+self.password+"&data"+"["+"code]="+captchacode)
if '"status":1' in status:
return 1
else:
return 0


def start(self):
self.__login()

if __name__ == "__main__":
b = Bot()
b.setUser("Syrius","passwort")
status = b.login()
if status == 1:
print "Login succeed!"
else:
print "Login failed!"



Dieser Script ist nur ein kleines Beispiel aber löst die Captchas automatisch und speichert zum Schluss die Cookies in "cookies.txt" ab.
Sollte genau das sein, was du suchst. :)
Funktioniert dafür nicht unter Windows.


print "Promptfile loginbot"
print "[email protected]"
import socks
import socket
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "255.255.255.255", 1080) #Socks5 proxy
socket.socket = socks.socksocket
import urllib
import urllib2
import cookielib
import re
import os
from subprocess import call

#EasyHTTP by Raynor@Szenebox
class EasyHTTP:
def __init__(self):
self.header = ( 'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36' )
self.cookies = cookielib.CookieJar()

def HTTPRequest(self,url,data=None):
self.opener = urllib2.build_opener(urllib2.HTTPRedirectHandler() ,
urllib2.HTTPHandler(debuglevel=0),
urllib2.HTTPSHandler(debuglevel=0),
urllib2.HTTPCookieProcessor(self.cookies))
self.addheaders = [self.header]
urllib2.install_opener(self.opener)
response = self.opener.open(url,data)
return response.read()

class Bot:
def __init__(self):
self.easyHTTP = EasyHTTP()

def setUser(self,username,password):
self.username = username
self.password = password

def __login(self):
print "fetch captcha.."
self.easyHTTP.HTTPRequest('http://www.promptfile.com')

html = self.easyHTTP.HTTPRequest('http://www.promptfile.com/modal.php',"modal=login")
html = html.split('securimage_show.php?sid=')[1]
sid = html.split('"')[0]

captcha = open("captcha.png","w")
captcha.write(self.easyHTTP.HTTPRequest('http://www.promptfile.com/securimage_show.php?sid='+sid))
captcha.close()
call(["tesseract", "captcha.png", "captcha"], stdout=open(os.devnull, 'w'))
captchacode = open("captcha.txt","r").read()
captchacode = captchacode.split("\x0A\x0A")[0]
print "login.."
status = self.easyHTTP.HTTPRequest('http://www.promptfile.com/actions.php',"action=login&data[login]="+self.username+"&data[password]="+self.password+"&data"+"["+"code]="+captchacode)
if '"status":1' in status:
return 1
else:
return 0


def start(self):
while True:
status = b.__login()
if status == 1:
print "Login succeed!"
os.remove("captcha.txt")
os.remove("captcha.png")
break
else:
print "Login failed!"
print "Try again.."
cookies = open("cookies.txt","w")
cookies.write(str(self.easyHTTP.cookies))

if __name__ == "__main__":
b = Bot()
b.setUser("username","password")
status = b.start()


lg

Cappa
31.05.2015, 16:33
tesseract gibts auch unter windows - wäre daher ohne Aufwand portiertbar.

Aber nicht notwendig - Syrius arbeitet ja nicht per cygwin :-)

syrius
01.06.2015, 12:04
tesseract gibts auch unter windows - wäre daher ohne Aufwand portiertbar.

Aber nicht notwendig - Syrius arbeitet ja nicht per cygwin :-)

In der Tat .... die Zeiten von Cygwin sind vorbei.

xTear
01.06.2015, 13:34
Ich mach den ganzen Spaß derzeit mit NodeJS
erst Req auf modal.php
dort dir SID auslesen,
danach Requeste ich die securimage.php?sid={SID}

(Ich lese es testweiße so aus, speichere es, und gebe per CLI das Captcha Manuell ein, jedoch JEDESMAL falscher captcha code, und weiß nicht wieso ichs verkack..)

syrius
01.06.2015, 20:54
Ich mach den ganzen Spaß derzeit mit NodeJS
erst Req auf modal.php
dort dir SID auslesen,
danach Requeste ich die securimage.php?sid={SID}

(Ich lese es testweiße so aus, speichere es, und gebe per CLI das Captcha Manuell ein, jedoch JEDESMAL falscher captcha code, und weiß nicht wieso ichs verkack..)

Dann poste dein Codesnippet ... kann man sicher mehr damit anfangen digger :)

Cappa
23.06.2015, 14:00
Hast es denn nun hinbekommen oder muss ich noch mal zaubern?

syrius
23.06.2015, 14:11
Hast es denn nun hinbekommen oder muss ich noch mal zaubern?

Zaubere! Ich hab mindestens 10 graue Haar wega dem Unfug ;(