Новичок
Покинул форум
Сообщений всего: 4
Дата рег-ции: Июнь 2012
Помог: 0 раз(а)
|
Здравствуйте.
Интересует такой вопрос: возможно ли написать скрипт авторизации на сайте steamcommunity.com на php?
На сколько я знаю, пароль там шифруется яваскриптом(rsa).
Логин из формы отправляется на http://steamcommunity[dot]com/login/[dot][dot][dot]y?username=login , после чего мы получаем такие данные:
CODE ( htmlphp):
скопировать код в буфер обмена
{"success":true,"publickey_mod":"C49B23FC4D7B6C201D18B2042132C1A1FE5AB1801097761F1196CD16D5F6B4184593D454A259AAFB64D74A3E0773613889101D2BAF58CFB78478B198D58CE99B4BEF3DC154C6E9175B2EDD90A62A2BEE90405F97BD014C912FF44606487ADD6C2888C826F53BD06F71F148C2013EB7090387416DE134A98912D9EF2B471C66D3104877A47D0F13E7C440273215C8C170A69AF8FC7975B6F0A4D1421268E6A6604222718890E12558B20C4F920E43B8BC790518080E7FE30D52990D3EBA1DD6D0C5DE3E48DCC0139FFF05423A6FF29A6E57FF00143031101A19A5D9366DBD9BC166409E79896FE6EA2446D1A167357C7C121E5330D5CE6452373A0F667D16D03F","publickey_exp":"010001","timestamp":"10826500000"}
Затем publickey_mod, timestamp и пароль используются для шифрования яваскриптом:
CODE ( javascript):
скопировать код в буфер обмена
var form = document.forms['logon']; var pubKey = RSA.getPublicKey( results.publickey_mod, results.publickey_exp ); var encryptedPassword = RSA.encrypt( form.elements['password'].value, pubKey ); new Ajax.Request( 'https://steamcommunity.com/login/dologin/', { method: 'post', parameters: { password: encryptedPassword, username: form.elements['username'].value, emailauth: form.elements['emailauth'].value, captchagid: form.elements['captchagid'].value, captcha_text: form.elements['captcha_text'].value, emailsteamid: form.elements['emailsteamid'].value, rsatimestamp: results.timestamp, remember_login: form.elements['remember_login'] && form.elements['remember_login'].checked }, onSuccess: OnLoginResponse, onException: function( req, e ) { throw e; } } );
CODE ( javascript):
скопировать код в буфер обмена
var RSAPublicKey = function($modulus_hex, $encryptionExponent_hex) { this.modulus = new BigInteger( $modulus_hex, 16); this.encryptionExponent = new BigInteger( $encryptionExponent_hex, 16); } var Base64 = { base64: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", encode: function($input) { if (!$input) { return false; } var $output = ""; var $chr1, $chr2, $chr3; var $enc1, $enc2, $enc3, $enc4; var $i = 0; do { $chr1 = $input.charCodeAt($i++); $chr2 = $input.charCodeAt($i++); $chr3 = $input.charCodeAt($i++); $enc1 = $chr1 >> 2; $enc2 = (($chr1 & 3) << 4) | ($chr2 >> 4); $enc3 = (($chr2 & 15) << 2) | ($chr3 >> 6); $enc4 = $chr3 & 63; if (isNaN($chr2)) $enc3 = $enc4 = 64; else if (isNaN($chr3)) $enc4 = 64; $output += this.base64.charAt($enc1) + this.base64.charAt($enc2) + this.base64.charAt($enc3) + this.base64.charAt($enc4); } while ($i < $input.length); return $output; }, decode: function($input) { if(!$input) return false; $input = $input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); var $output = ""; var $enc1, $enc2, $enc3, $enc4; var $i = 0; do { $enc1 = this.base64.indexOf($input.charAt($i++)); $enc2 = this.base64.indexOf($input.charAt($i++)); $enc3 = this.base64.indexOf($input.charAt($i++)); $enc4 = this.base64.indexOf($input.charAt($i++)); $output += String.fromCharCode(($enc1 << 2) | ($enc2 >> 4)); if ($enc3 != 64) $output += String.fromCharCode((($enc2 & 15) << 4) | ($enc3 >> 2)); if ($enc4 != 64) $output += String.fromCharCode((($enc3 & 3) << 6) | $enc4); } while ($i < $input.length); return $output; } }; var Hex = { hex: "0123456789abcdef", encode: function($input) { if(!$input) return false; var $output = ""; var $k; var $i = 0; do { $k = $input.charCodeAt($i++); $output += this.hex.charAt(($k >> 4) &0xf) + this.hex.charAt($k & 0xf); } while ($i < $input.length); return $output; }, decode: function($input) { if(!$input) return false; $input = $input.replace(/[^0-9abcdef]/g, ""); var $output = ""; var $i = 0; do { $output += String.fromCharCode(((this.hex.indexOf($input.charAt($i++)) << 4) & 0xf0) | (this.hex.indexOf($input.charAt($i++)) & 0xf)); } while ($i < $input.length); return $output; } }; var RSA = { getPublicKey: function( $modulus_hex, $exponent_hex ) { return new RSAPublicKey( $modulus_hex, $exponent_hex ); }, encrypt: function($data, $pubkey) { if (!$pubkey) return false; $data = this.pkcs1pad2($data,($pubkey.modulus.bitLength()+7)>>3); if(!$data) return false; $data = $data.modPowInt($pubkey.encryptionExponent, $pubkey.modulus); if(!$data) return false; $data = $data.toString(16); return Base64.encode(Hex.decode($data)); }, pkcs1pad2: function($data, $keysize) { if($keysize < $data.length + 11) return null; var $buffer = []; var $i = $data.length - 1; while($i >= 0 && $keysize > 0) $buffer[--$keysize] = $data.charCodeAt($i--); $buffer[--$keysize] = 0; while($keysize > 2) $buffer[--$keysize] = Math.floor(Math.random()*254) + 1; $buffer[--$keysize] = 2; $buffer[--$keysize] = 0; return new BigInteger($buffer); } }
Зашифрованный логин, пароль и timestamp отправляются сюда: https://steamcommunity[dot]com/login/dologin/
Т.е надо переписать эту функцию на php.(Отредактировано автором: 25 Августа, 2012 - 22:17:23)
|