ВОПРОС РЕШЕН. ТЕМУ МОЖНО ЗАКРЫТЬ. ВСЕМ СПАСИБО Делаю запрос на смену пароля, ответ приходит такой же как и при удачном запросе, но сам пароль не меняется. Все проснифал увидел что при отправке запроса, к старому и новому паролю, добавляются 2 или 1 символов, но знаний в JS не хватает, что бы выяснить откуда они берутся... Вот запрос: Code: [COLOR=White]POST /cgi-bin/modifypass HTTP/1.1 Accept-Encoding: identity Content-Length: 425 Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3 Connection: close Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1 Host: e.mail.ru Cookie: Здесь печеньки Referer: https://e.mail.ru/cgi-bin/editpass Content-Type: application/x-www-form-urlencoded[/COLOR] POST - данные: [COLOR=White]x_reg_id=yMW0MGiw& form_sign=405410312838354260527282252891373638199& modify=1& back=& security_image_word=ckk8ex& Username=юзер Password=новый пароль + 2a Password_Verify=новый пароль + 2 oldPswd=старый пароль + BA form_token=74414172637d5658190892020d02900603060b000d0a0201070f0704060503010205040b090e0003060403040d000d0e181e45454a1d5e575a585d16424144195e57505b164647185d5245541d46461c1b4d5258455a554551411e495144424e564a551e58595358& browserData=NoJS[/COLOR] гуру JS можете уделить пару минут?)
Да у меня полный набор инструментов, и перехватывал и изменял. И JS отключал. Но суть не в этом. Мне наоборот надо узнать как генерируются те символы которые добавляются потому что без них пароль не изменяется.
De-visible Копай у себя у меня в браузере без JS и без добовлений пароль изменился. А значит в скрипте твоём проблема.. Копируй запрос точь в точь и не отсылай лишнего ... пошли теже хидеры и теже параметры не больше не меньше и тогда проверяй .. не может быть что браузер отсылает без и всё норм а ты не можешь.
Делаем в 3 шага: 1. Ищем функцию function a (form), выглядит она так: PHP: function a (form) { var r; eval(function(p,a,c,k,e,r)....//и так далее 2. В найденной функции ищем массив символов r, выглядит примерно так: Code: r=[\'l\',\'h\',\'i\',\'j\',\'m\',\'9\',\'d\',\'e\'] 3. Приписываем к параметрам нужные символы. Соотношение параметр - символ из массива (приписываемый параметру при отправке): Code: form_sign - r[2]+r[0] form_token - r[5]+r[7] oldPswd - r[4]+r[3] Password - r[6] Password_Verify - r[1]
Ты немного не понимаешь, что мне необходимо. Каждый раз там новые данные. мне нужно понять как они генерируются. Для этого нужно понять как работает JS функция. С этим и вся проблема. а копировать запрос точь в точь - чего я этим добьюсь? // added Отталкиваясь от того что написал patcher Вот кусок кода полностью: Code: <script type="text/javascript"> $(function() { var $form = $('#passwordForm'), input = $form[0].elements['security_image_word']; function a (form) { var r; eval(function(p,a,c,k,e,r){e=function(c){return c.toString(a)};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('r=[\'l\',\'g\',\'i\',\'j\',\'m\',\'9\',\'d\',\'e\'];f h(a,b,c){a.k[b].t+=c}h(8,\'n\',r[3]+r[1]);h(8,\'o\',r[5]+r[7]);h(8,\'p\',r[4]+r[2]);h(8,\'q\',r[6]);h(8,\'s\',r[0]);',30,30,'||||||||form|f||||F|X|function|N||u|b|elements|U|z|form_sign|form_token|oldPswd|Password||Password_Verify|value'.split('|'),0,{})); } $form.submit(function (evt) { if (CheckPassword($form[0])) { collectBrowserData($form[0]); a($form[0]); } else { evt.preventDefault(); } }); }); </script> Расшифровываем и приводим в читабельный вид: Code: <script type="text/javascript"> $(function () { var $form = $('#passwordForm'), input = $form[0].elements['security_image_word']; function a(form) { var r; r = ['U', 'N', 'u', 'b', 'z', 'f', 'F', 'X']; function h(a, b, c) { a.elements[b].value += c } h(form, 'form_sign', r[3] + r[1]); h(form, 'form_token', r[5] + r[7]); h(form, 'oldPswd', r[4] + r[2]); h(form, 'Password', r[6]); h(form, 'Password_Verify', r[0]); } $form.submit(function (evt) { if (CheckPassword($form[0])) { collectBrowserData($form[0]); a($form[0]); } else { evt.preventDefault(); } }); }); </script> Вот необходимый кусок, то есть то, что и требовалось: Code: h(form, 'form_sign', r[3] + r[1]); h(form, 'form_token', r[5] + r[7]); h(form, 'oldPswd', r[4] + r[2]); h(form, 'Password', r[6]); h(form, 'Password_Verify', r[0]); вот массив: Code: r = ['U', 'N', 'u', 'b', 'z', 'f', 'F', 'X']; Вопрос решен. тему можно закрыть спасибо.
А что мешает просто вырезать эти символы ? Я хоть и не смотрел код и не снифал запросы, но зачастую бывает так что такого рода цифры могут генерироваться алгоритмом известный только разработчикам дабы повысить безопасность и приходится тупо вырезать их из страницы.
De-visible Тьфу ты)) что ты прицепился к этому JS я же тебе говорю что я отключил JS в браузере ... поменял пароль и проснифал запрос .. к старому и новому паролю ни чё не добавилось(При включеном JS добавлялось) вышел из акка и зашёл новым паролем... Выводы: Не обязательно анализировать функцию можно и без добавления соли к паролям изменить пароль. Чего добьешься? Ненужно будет анализировать функцию просто нужно симулировать браузер с выключеным JS. У тебя задача какая? Правильно. Изменить пароль... А зачем еб*тся и анализировать работу JS если можно симулировать браузер с выключеным JS. //Added Вот решение без JS если что =) PHP: <?php /** * @author @Fatal@ * @copyright 2012 */ set_time_limit(0); $login = ''; //Логин $pass = ''; //Пароль $domain = 'bk.ru'; //Домен $npass = ''; // Новый $cook = dirname(realpath(__FILE__)).'/test.txt'; require_once('cu/mod/cURL.class.php'); $c = new cURL(true,$cook); if(isset($_POST['cap'])) { $post = 'form_sign='.$_POST['sing'].'&form_token='.$_POST['token'].'&back=&modify=1&Username=tema357&browserData=NoJS&oldPswd='.$pass.'&Password='.$npass.'&Password_Verify='.$npass.'&security_image_word='.$_POST['cap'].'&x_reg_id='.$_POST['reg']; $c->post('https://e.mail.ru/cgi-bin/modifypass',$post,array('Referer' => 'https://e.mail.ru/cgi-bin/modifypass')); echo 'OK'; } else { unlink($cook); $r = $c->get('https://e.mail.ru/cgi-bin/login'); /********* ЛОВИМ ВАЖНЫН КУКИ!! **********/ preg_match('#src="(https://rs\.mail\.ru\/.+?)"#',$r,$p); preg_match('#src="//(top-fwz1\.mail\.ru\/counter.+?)"#',$r,$fw); $c->get($p[1]); $c->get('https://'.$fw[1]); /****************************************/ $login = urlencode($login); $pass = urlencode($pass); $domain = urlencode($domain); $c->post('http://win.mail.ru/cgi-bin/auth','Login='.$login.'&Domain='.$domain.'&Password='.$pass); $r = $c->get('https://e.mail.ru/cgi-bin/editpass'); preg_match("#src='(\/cgi-bin\/x_pass_frame\?x_reg_id=.+?&no_meta_refresh=1&r=\d+?)'>#",$r,$cap); preg_match('#<input type="hidden" name="form_sign" value="(\d+?)" />#',$r,$sing); preg_match('#<input type="hidden" name="form_token" value="(.+?)" />#',$r,$token); preg_match('#<input type="hidden" value="(.+?)" name="x_reg_id"/>#',$r,$reg); $r = $c->get('https://e.mail.ru'.$cap[1]); preg_match('#<img src="(x_get_image\?x_reg_id=.+?&r=\d+?)"#',$r,$cap); $r = $c->get('https://e.mail.ru/cgi-bin/'.$cap[1]); file_put_contents('a.jpeg',$r); echo '<img src="a.jpeg" /><form method="POST"> <input type="hidden" name="sing" value="'.$sing[1].'" /><input type="hidden" name="token" value="'.$token[1].'" /> <input type="hidden" name="reg" value="'.$reg[1].'" /> <input type="text" name="cap" /><input type="submit" /></form>'; } ?>