PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : VB.net PSC CAPTCHA Auslesen?



FuNTeX
30.01.2012, 13:47
Moinsen!
also ich Bau gerade mein erstes Programm
ist nur was ganz kleines!

ich möchte PSC checken!

und das nicht auf der HP sondern mit dem TOOL

ich gebe also die PSC ein und eventuell ein Password
und klick dann auf PSC Checken!

er soll im Hintergrund den CAPTCHA ausfüllen

ist das machbar?
oder wäre es einfacher wenn ich einfach eine PictureBox nehme, wo dann der CAPTCHA angezeigt wird?
wenn ja wie mach ich das?
oder er zeigt den CAPTCHA in einem extra Fenster an!

MFG FuNTeX



/e kann man bei der Textbox ein Zeichenlimit setzen?!

Death~
30.01.2012, 13:53
Ich würde das so machen, dass du auf der Seite auf der das Captcha erscheint, über nen Webrequest den Quelltext auslesen und nach dem Link zum Captcha-Bild suchen. Dann kannst du ihn in deiner Picturebox darstellen lassen.

Edit: Klar

FuNTeX
30.01.2012, 14:03
wäre ja dann "https://customer.cc.at.paysafecard.com/seam/resource/captcha" oder?

und wie lass ich ihn in der Picturebox darstellen?

Death~
30.01.2012, 14:09
Nein, das wäre es wahrscheinlich hier nicht, da beim Öffnen jeweils ein anderes Bild angezeigt wird. Du musst an das selbe Bild kommen, das dein Browser anzeigt.

FuNTeX
30.01.2012, 14:12
das der quellcode vom Bild / Chaptcha

wie finde ich jetzt da genau das raus was ich brauche?
versteh das gerade nicht^^
wie gesagt alles neu für mich^^

<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" media="screen,projection,tv,handheld" href="opera:style/image.css"/>
<style media="(max-width:164px),(max-height:48px)">body.contain {position: absolute;margin: 0;top: 0;left: 0;bottom: 0;right: 0;}body.contain > img {width: 100%;height: 100%;-o-object-fit: contain;cursor: zoom-in;}body.zoom > img {cursor: zoom-out;}</style>
<link rel="icon" href=""/>
<title>captcha (148×32)</title>
</head>
<body class="contain">
<img onerror="this.error=true" src=""/>
<script>(function() {if (window.donotrun)return;var img = document.querySelector('img');document.title = window.location.pathname.match(/([^\/]*)\/*$/)[1];var zoomX;var zoomY;function zoomIn() {document.body.className = 'zoom';window.scrollTo(zoomX + img.offsetLeft - window.innerWidth/2,zoomY + img.offsetTop - window.innerHeight/2);}function zoomOut() {zoomX = window.scrollX + window.innerWidth/2 - img.offsetLeft;zoomY = window.scrollY + window.innerHeight/2 - img.offsetTop;document.body.className = 'contain';}var interval = setInterval(function() {if (img.naturalWidth && img.naturalHeight) {clearInterval(interval);document.title += ' ('+img.naturalWidth+'\u00d7'+img.naturalHeight+')' ;var padding = 2*parseInt(getComputedStyle(document.body).padding , 10);var s = document.querySelector('style[media]');s.media = '(max-width:' + (img.naturalWidth + padding) + 'px),(max-height:' + (img.naturalHeight + padding) + 'px)';zoomX = img.naturalWidth/2;zoomY = img.naturalHeight/2;} else if (img.error) {clearInterval(interval);}}, 100);img.onclick = function(e) {var s = getComputedStyle(img);if (s.cursor == 'zoom-in') {zoomX = e.offsetX;zoomY = e.offsetY;var clientAspect = img.clientWidth/img.clientHeight;var naturalAspect = img.naturalWidth/img.naturalHeight;var scale;if (naturalAspect > clientAspect) {var displayHeight = img.clientWidth/naturalAspect;zoomY -= (img.clientHeight - displayHeight)/2;scale = img.clientWidth/img.naturalWidth;} else {var displayWidth = img.clientHeight*naturalAspect;zoomX -= (img.clientWidth - displayWidth)/2;scale = img.clientHeight/img.naturalHeight;}zoomX /= scale;zoomY /= scale;zoomIn();} else if (s.cursor == 'zoom-out') {zoomOut();}};window.onkeypress = function(e) {if (e.keyCode == 13 && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey) {var s = getComputedStyle(img);if (s.cursor == 'zoom-in')zoomIn();else if (s.cursor == 'zoom-out')zoomOut();e.preventDefault();}};var drag;window.onmousedown = function(e) {if (e.button == 0 && !e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && document.body.className == 'zoom')drag = {screenX: e.screenX,screenY: e.screenY,scrollX: window.scrollX,scrollY: window.scrollY};};window.onmouseup = function(e) {img.style.cursor = '';drag = undefined;};window.onmousemove = function(e) {if (!drag) return;img.style.cursor = 'move';window.scrollTo(drag.scrollX + drag.screenX - e.screenX,drag.scrollY + drag.screenY - e.screenY);};})();</script>
</body>
</html>

Death~
30.01.2012, 14:42
Schick mal die URL zu der Seite, auf der das Captcha dargestellt wird.

cby
30.01.2012, 15:03
Hat er doch. Dahinter verbirgt sich wohl ein PHP Script das ein Bild erstellt.

Death~
30.01.2012, 15:14
Ich meinte eher die den kompletten Link der Seite, auf den man mit dem Browser navigiert (z.B. https://mypins.paysafecard.com/customer-registration/virtual/StartApplyNow.xhtml?product=psc)
Da könnte man dann genauer schauen, wie der Browser mit dem Server kommuniziert.

FuNTeX
30.01.2012, 15:15
@Death~
Klicken / Seite mit dem Captche (https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet?&language=de)

inout
30.01.2012, 15:42
Ein etwas älteres Script von mir. Ich hab keine Ahnung, ob es noch funktioniert, aber da siehst Du wie die Übertragung abläuft.


<?php
//psc checker with captchatrader support
//script by inout

error_reporting(E_ALL);

//config start
define('PSC_LOGIN_URL', 'https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet');
define('PSC_CAPTCHA_URL', 'https://customer.cc.at.paysafecard.com/seam/resource/captcha');
define('INVALID_PIN_PASSWORD_STRING', 'Bei der Eingabe des');
define('WRONG_CAPTCHA_STRING', 'Der eingegebene Text stimmt nicht');

define('USER_AGENT', 'Mozillla/5.0 (Windows NT 6.1; WOW64; rv:2.0) Gecko/20100101 Firefox/4.0');
define('COOKIE_FILE', 'cookie.txt');
define('CAPTCHA_FILE', 'captcha.jpg');
define('SOCKET_TIMEOUT', 60);

define('CAPTCHATRADER_SUBMIT_URL', 'http://api.captchatrader.com/submit');
define('CAPTCHATRADER_RESPOND_URL', 'http://api.captchatrader.com/respond');
define('CAPTCHATRADER_GET_CREDITS_URL', 'http://api.captchatrader.com/get_credits/username:{USERNAME}/password:{PASSWORD}/');
define('CAPTCHATRADER_USERNAME', '');
define('CAPTCHATRADER_PASSWORD', '');
define('CAPTCHATRADER_API_KEY', '');

define('PSC_CODES_INPUT_FILE', 'psc.txt');
define('RESULT_OUTPUT_FILE', 'out.txt');

define('RETRY_BAD', true);
//config end

$default_curl_options = array(CURLOPT_USERAGENT => USER_AGENT,
CURLOPT_COOKIEFILE => COOKIE_FILE,
CURLOPT_COOKIEJAR => COOKIE_FILE,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FRESH_CONNECT => true,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_FAILONERROR => true,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_CONNECTTIMEOUT => SOCKET_TIMEOUT,
CURLOPT_TIMEOUT => SOCKET_TIMEOUT);

function psc_get_cookie(&$error)
{
$error = false;

$ch = curl_init(PSC_LOGIN_URL);
if($ch !== false)
{
global $default_curl_options;

curl_setopt_array($ch, $default_curl_options);
$src = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);

return $src !== false;
}

return false;
}

function psc_get_captcha($ch, $captcha_file)
{
$fp = fopen($captcha_file, 'w');
if($fp !== false)
{
curl_setopt_array($ch, array(CURLOPT_URL => PSC_CAPTCHA_URL,
CURLOPT_FILE => $fp));
$ok = curl_exec($ch);
fclose($fp);

return $ok;
}

return false;
}

function psc_get_data($src)
{
$data = array();

if(preg_match('#<td class="cell1">Wert</td>\s*<td class="cell2"><table>\s*<tbody>\s*<tr>\s*<td>(.+?)</td>\s*<td>(.+?)</td>\s*</tr>\s*</tbody>\s*</table>\s*</td>#i', $src, $match))
{
$data['credit'] = $match[1];
$data['credit_currency'] = $match[2];
}

if(preg_match('#<td class="cell1">Verf&uuml;gbares Guthaben</td>\s*<td class="cell2"><table>\s*<tbody>\s*<tr class="price">\s*<td>(.+?)</td>\s*<td>(.+?)</td>\s*</tr>\s*</tbody>\s*</table>\s*</td>#i', $src, $match))
{
$data['available_credit'] = $match[1];
$data['available_credit_currency'] = $match[2];
}

if(preg_match('#<td class="cell1">Seriennummer</td>\s*<td class="cell2">(\d+)</td>#i', $src, $match))
$data['serial_number'] = $match[1];

if(preg_match('#<td class="cell1">In Zahlung</td>\s*<td class="cell2"><table>\s*<tbody>\s*<tr>\s*<td>(.+?)</td>\s*<td>(.+?)</td>\s*</tr>\s*</tbody>\s*</table>\s*</td>#i', $src, $match))
{
$data['paid'] = $match[1];
$data['paid_currency'] = $match[2];
}

if(preg_match('#<td class="cell1">Produktionsdatum</td>\s*<td class="cell2">(.+?)</td>#i', $src, $match))
$data['production_date'] = $match[1];

return $data;
}

function psc_login($ch, $pin, $captcha, $pass = '')
{
$pin_parts = str_split($pin, 4);
curl_setopt_array($ch, array(CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => 'https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet',
CURLOPT_REFERER => 'https://customer.cc.at.paysafecard.com/psccustomer/GetWelcomePanelServlet',
CURLOPT_POSTFIELDS => "mainPagePart=mainPagePart&mainPagePart:rn1={$pin_parts[0]}&mainPagePart:rn2={$pin_parts[1]}&mainPagePart:rn3={$pin_parts[2]}&mainPagePart:rn4={$pin_parts[3]}&mainPagePart:passField=$pass&mainPagePart:verifyCaptcha=$captcha&mainPagePart:next=OK&javax.faces.ViewState=j_id2"));
$src = curl_exec($ch);

if($src !== false)
{
if(stripos($src, WRONG_CAPTCHA_STRING) !== false)
return 'wrong captcha';
else if(stripos($src, INVALID_PIN_PASSWORD_STRING) !== false)
return 'invalid pin/password';
else
return psc_get_data($src);
}

return false;
}

function valid_psc_code($psc_code)
{
return preg_match('/^\d{16}$/', $psc_code);
}

function psc_data_to_string($data)
{
$str = '';
foreach($data as $key => $value) $str .= "$key: $value\n";
return $str;
}

function captchatrader_submit($username, $password, $api_key, $captcha_file)
{
$ch = curl_init(CAPTCHATRADER_SUBMIT_URL);
if($ch !== false)
{
global $default_curl_options;

curl_setopt_array($ch, $default_curl_options + array(CURLOPT_POSTFIELDS => array('username' => $username, 'password' => $password, 'api_key' => $api_key, 'value' => "@$captcha_file")));
$src = curl_exec($ch);
if($src !== false)
$return = json_decode($src, true);
else
$return = curl_error($ch);
curl_close($ch);

return $return;
}

return false;
}

function captchatrader_respond($username, $password, $is_correct, $ticket)
{
$ch = curl_init(CAPTCHATRADER_RESPOND_URL);
if($ch !== false)
{
global $default_curl_options;

curl_setopt_array($ch, $default_curl_options + array(CURLOPT_POSTFIELDS => http_build_query(array('username' => $username, 'password' => $password, 'is_correct' => $is_correct, 'ticket' => $ticket), '', '&')));
$src = curl_exec($ch);
if($src !== false)
$return = json_decode($src, true);
else
$return = curl_error($ch);
curl_close($ch);

return $return;
}

return false;
}

function captchatrader_get_credits($username, $password)
{
$ch = curl_init(str_replace(array('{USERNAME}', '{PASSWORD}'), array($username, $password), CAPTCHATRADER_GET_CREDITS_URL));
if($ch !== false)
{
global $default_curl_options;

curl_setopt_array($ch, $default_curl_options);
$src = curl_exec($ch);
if($src !== false)
$return = json_decode($src, true);
else
$return = curl_error($ch);
curl_close($ch);

return $return;
}

return false;
}

if(psc_get_cookie($error))
{
$ch = curl_init();
if($ch !== false)
{
$use_captchatrader = CAPTCHATRADER_USERNAME != '' && CAPTCHATRADER_PASSWORD != '';
$ok = !$use_captchatrader;
if($use_captchatrader)
{
echo "checking captchatrader status...\n";
$credits = captchatrader_get_credits(CAPTCHATRADER_USERNAME, CAPTCHATRADER_PASSWORD);
if(is_array($credits))
{
if($credits[0] == 0)
{
$ok = $credits[1] > 0;
if($ok)
echo "captchatrader credits available: {$credits[1]}\n";
else
echo "no captchatrader credits available\n";
}
else
echo "unable to get captchatrader credits: \"{$credits[1]}\"\n";
}
else
echo "unable to get captchatrader credits: \"$credits\"\n";
}

if($ok)
{
if(file_exists(PSC_CODES_INPUT_FILE))
{
$psc_codes = file(PSC_CODES_INPUT_FILE, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if($psc_codes !== false)
{
if(is_writeable(RESULT_OUTPUT_FILE))
{
curl_setopt_array($ch, $default_curl_options);
foreach($psc_codes as $psc_code)
{
$psc_code = trim($psc_code);
if($psc_code == '') continue;
$tmp = explode(':', $psc_code);
$psc_code = $tmp[0];
$psc_code = str_replace('-', '', $psc_code);
if(!valid_psc_code($psc_code)) continue;
$password = count($tmp) > 1 ? $tmp[1] : '';

while(true)
{
echo "checking $psc_code";
if($password) echo ":$password";
echo "\n";

if(psc_get_captcha($ch, CAPTCHA_FILE))
{
if($use_captchatrader)
{
echo "submitting captcha...\n";
$submit = captchatrader_submit(CAPTCHATRADER_USERNAME, CAPTCHATRADER_PASSWORD, CAPTCHATRADER_API_KEY, CAPTCHA_FILE);
if(is_array($submit))
{
if($submit[0] != -1)
{
$captcha = $submit[1];
echo "captcha received: $captcha\n";
}
else
{
echo "unable to submit captcha: \"{$submit[1]}\"\n";
break 2;
}
}
else
{
echo "http error while submitting captcha: \"$submit\"\n";
break 2;
}
}
else
{
exec(CAPTCHA_FILE);
echo 'captcha: ';
$captcha = stream_get_line(STDIN, 1024, PHP_EOL);
}

$data = psc_login($ch, $psc_code, $captcha, $password);
if(is_array($data))
{
echo "check ok\n";
$str = $psc_code;
if($password) $str .= ":$password";
$str .= "\n";
$str .= psc_data_to_string($data);
$str .= "\n";
echo $str;
if(file_put_contents(RESULT_OUTPUT_FILE, $str, FILE_APPEND) === false)
echo "unable to write output file\n";
}
else if(curl_error($ch))
echo 'http error: "' . curl_error($ch) . "\"\n";
else
{
echo "$data\n";
if($data != 'wrong captcha') break;
}

if($use_captchatrader)
{
$respond = captchatrader_respond(CAPTCHATRADER_USERNAME, CAPTCHATRADER_PASSWORD, is_array($data), $submit[0]);
if(is_array($respond))
{
if($respond[0] == 0)
echo "captcha response ok\n";
else
{
echo "unable to respond to captcha: \"{$respond[1]}\"\n";
//break;
}
}
else
{
echo "http error while responding to captcha: \"$respond\"\n";
//break;
}
}

if(!is_array($data) && $data == 'wrong captcha' && RETRY_BAD)
echo "retrying\n";
else
break;
}
else if(curl_error($ch))
echo 'http error: "' . curl_error($ch) . "\"\n";
else
echo "unable to create captcha file\n";
}
}
}
else
echo "output file is not writeable\n";
}
else
echo "unable to load psc codes input file\n";
}
else
echo "psc codes input file not found\n";
}

curl_close($ch);
}
else
echo "unable to create curl handle (2)\n";
}
else if($error)
echo "unable to get curl cookie: \"$error\"\n";
else
echo "unable to create curl handle (1)\n";
?>

Death~
30.01.2012, 15:43
Okay, ich habe es mir einmal angeschaut. Ist recht einfach. Das Captcha, das man eingibt muss nicht mit dem Angezeigten übereinstimmen. Navigiert man mit den richtigen Cookies auf die Seite, die das Captcha generieren lässt, kann man das dortige Captcha immer verwenden.
D.h. du steuerst dann hier hin (https://customer.cc.at.paysafecard.com/seam/resource/captcha) (mit den alten Cookies), lädst dir diese Datei runter und lässt sie dann in einer PictureBox darstellen.

FuNTeX
30.01.2012, 16:03
@inout

sry aber ich kann damit überhaubt nichts anfangen xD

das doch c++ oder so?! aber kein VB.net?! oder?o.O

inout
30.01.2012, 16:21
Das ist kein C++, sondern PHP, aber das ist doch egal; Du wolltest doch nur wissen wie das mit dem Captcha funktioniert und das siehst Du in diesem Code (auch wenn du kein PHP kannst). Wenn Du nur fertigen VB.NET Code haben möchtest, bist Du hier leider falsch.


in den Coding & Scripting Sections geht es ums Programmieren. Wenn ihr nicht programmieren könnt und auch nicht vor habt dies zu erlernen, dann werden eure Threads einfach gelöscht und ihr gegebenen Falls gewarnt oder verwarnt.

K-Gee
30.01.2012, 16:33
Das thema gabs schonmal einfach die SuFu nutzen!


PictureBox1.ImageLocation = ("https://customer.cc.at.paysafecard.com/seam/resource/captcha")

Grüße

FuNTeX
30.01.2012, 16:34
@inout ich will das doch lernen!
darum frag ich hier nach!
nur bin ich gerade voll verwirrt!

kennst du eine Seite wo alles erklärt ist?
ick kauf mir morgen erstmal ein Buch zum Anfang^^


* das layout hab ich ja schon alles
nur weiß ich nicht wie ich das umsetzen soll!


@K-Gee danke!
hab die SuFu benutzt muss es wohl übersehen haben sry!

hab da noch eine Frage und zwar!
wenn ich das jetzt starte wird der Captcha nicht angezeigt
erst wenn ich 1 mal auf ihn klicke
kann man das auch noch fixen?

inout
30.01.2012, 16:45
:D


Ich tschätz mal sowas ginge nuhr in vb.
nein das geht nur mit html, weil den http und so



Wo ist blackberry? die Trashbox wartet.

blackberry
30.01.2012, 17:11
das doch c++ oder so?! aber kein VB.net?! oder?o.O

Nein, das ist PHP. Zum Glück sind PHP und VB.NET aber 1:1 kompatibel (daher .NET für INTERNET, PHP ist eine Internetsprache). Einfach den Code in Visual Basic reinkopieren und auf Release-Build gehen -- keines Falls Debug Build. Das kann deinen Computer kaputt machen.



Wo ist blackberry? die Trashbox wartet.
Hier! Stehe mit Remote Administration Tool und Tat zur Seite, guter Freund (:

FuNTeX
30.01.2012, 17:14
@blackberry ah okey

hätte ich net gedacht^^
aber teste ick gleich mal aus^^
und wieder was gelernt :D


/e sry für die evl dumme frage
aber wo finde ich "Release-Build" ?

Javatar
30.01.2012, 18:32
Ein Berliner wie man lesen kann ^^ :D

Oben rechts neben dem grünen Butten wo du deine Programme immer startest ist ne dropdownbox in der Debug stehen dürfte und dort kannst du Debug in Release ändern.

wacked
30.01.2012, 20:08
Zuerst glaubte ich an einen Troll.

Allerdings hat BlackBerry von VB.NET keine Ahnung. Er will dich nur verarschen weil er meint dass alle VB.NET Benutzer nicht programmieren können, in Foren um Hilfe bitten bei Themen die nicht ihren Fähigkeiten entsprechen und dann am Ende doch nur c&pen.
Hör lieber auf mich, ich programmiere selber gerne in VB.NET am liebsten Taschenrechner.
Das mit dem Release build stimmt zwar allerdings wirst du trotzdem viele, viele Fehler bekommen.
Als allererstes musst du die

define('A', 'B');zu
#define A "B" umändern.
Auch musst du alle === und !== verändern. Nimm einfach immer das letzte Gleichheitszeichen weg. Das brauch man nur in PHP damit man die Skripte nicht so leicht hacken kann. Ist ja wichtig weil das ja im Internet liegt.
Dann ist curl nicht standartmäßig bei MSVC# dabei, du kannst es aber von hier (http://curl.haxx.se/libcurl/dotnet/)herunterladen.
Wenn du das alles gemacht hast und weniger als 10 Fehler kommen hat Paysafecard seinen Captchaalogorithmus geändert. Dann können wir die leider nicht helfen.
Wenn doch melde dich doch einfach noch einmal hier, aber schreib auf jeden Fall auch die genauen Fehlermeldungen hier hinein sonst können wir dir auch nicht helfen.

Edit: Was ich total vergessen habe: Falls du irgendeinen fehler bei error_reporting(E_ALL) kriegst must du in die Registry und HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Winlogon veränderen. Dort sollte stehen: "error_rep.exe -ON, userinit.exe"