Как генерируется form_key на странице регистрации?

Тема в разделе "JavaScript", создана пользователем MrDevil, 26 июл 2012.

Модераторы: ZiX
  1. MrDevil

    MrDevil Постоялец

    Регистр.:
    26 июл 2008
    Сообщения:
    72
    Симпатии:
    13
    Столкнулся с такой проблемой, пишу реггер акков для форумов на forum.mybb.ru, но для регистрации кроме стандартных данных там еще генерируются form_key и form_etc. Со вторым все понятно, это браузер и его можно просто скопировать из сниффера, но первый при каждом обновлении странице генерируется заново. Подскажите как получить из этого кода formkey или form_key.

    Код:
    <script type="text/javascript">
    <!--
    function process_form(the_form)
    {
        var element_names = new Object()
            element_names["req_username"] = "Имя"
            element_names["req_password1"] = "Пароль"
            element_names["req_password2"] = "Подтвердите пароль"
            element_names["req_email1"] = "E-mail"
            element_names["req_email2"] = "E-mail 2"
        if (document.all || document.getElementById)
        {
            for (i = 0; i < the_form.length; ++i)
            {
                var elem = the_form.elements[i]
                if (elem.name && elem.name.substring(0, 4) == "req_")
                {
                    if (elem.type && (elem.type=="text" || elem.type=="textarea" || elem.type=="password" || elem.type=="file") && elem.value=='')
                    {
                        alert("\"" + element_names[elem.name] + "\" это поле обязательно для заполнения в этой форме.")
                        elem.focus()
                        return false
                    }
                }
            }
        }
        document.getElementById('formkey').innerHTML='<div class="TErmpSDAFwusL" id="otKAPrQxEa">Z66Z6FZ72Z6DZ63Z6FZ64Z65Z20Z3DZ20Z27Z3CZ69Z6EZ70</div><p id="TErmpSDAFwusL">Z43Z4AZ65ZE3Z90ZD0Z39Z70ZBBZ4FZ6AZD6ZBBZ79ZD0ZADZ4FZD3ZA7Z6CZABZADZ8FZ82Z7FZEAZ77Z70</p><strong class="ZhavVbf" id="iemBkWrnvMSD">Z60Z92Z73ZF6Z0BZ7BZE5ZABZ53ZF3Z36Z31ZAEZ78ZC1</strong><strong id="WTiXaJ" class="WTiXaJ">ZD4ZDCZE1ZAAZB1Z08ZEEZA2Z80Z85ZA8ZB9Z04Z2AZB4ZF2ZA5Z01ZC6Z50ZDFZ3EZ40Z25Z9FZA4ZB4Z5DZ89ZD4</strong><div id="tSkGw"><div id="GCTqgOUMnP">Z58ZF8ZC9Z91ZCDZE9Z15Z40Z79ZBBZ12Z2DZ29Z78ZB4Z3DZ2BZA2ZDBZ0EZ9AZE2ZFAZ5CZ53Z04</div></div><span id="QcMzmECNJbI">Z5DZ2BZDEZ43Z3DZ82Z9FZBDZ4EZ3FZ8DZ84Z6C</span><div class="mIzpUQtjq" id="yeiuwpDIvmxF">Z75Z74Z20Z74Z79Z70Z65Z3DZ22Z68Z69Z64Z64Z65Z6EZ22</div><p id="MPNdmxLGlXJeT" class="VyxPEsFi">Z97ZFCZC1Z44ZE0Z34Z7AZ98ZF9Z0EZFFZF5ZA8ZC9Z2FZ39Z95Z24Z46Z0DZ90ZD2Z59Z28</p><p id="NibdfArH">Z20Z6EZ61Z6DZ65Z3DZ22Z66Z6FZ72Z6DZ5FZ6BZ65Z79Z22</p><span id="nYaAKNOF" class="jbOnZJNp">ZE5Z72Z0BZ46ZDCZ71Z2BZB1ZE5Z19Z3CZ6FZ1D</span><span id="rUqDfMA">ZDEZB5Z95ZE5ZE4ZA3ZDDZDAZC0Z02Z13Z45Z55Z73ZA5ZDEZ2EZBDZ61Z7BZ64Z23Z4BZ9D</span><span class="kXIsnaOFRbE" id="VyxPEsFi">Z37Z65Z64Z33Z36Z35Z38Z32Z32Z62Z31Z34Z62Z61Z30Z39</span><div id="ruJZpsFYkUaQn">Z22Z3EZ27Z3B</div><strong id="lKcNxIM">Z62Z33Z37Z61Z34Z37Z39Z32Z66Z32Z30Z34Z30Z65Z34Z31</strong><div id="ZhavVbf" class="QcMzmECNJbI">Z55ZACZB7ZCDZ22ZA8Z99Z9CZC7ZE5ZB4Z9A</div><h1 id="jbOnZJNp" class="JAPsSeabwnUW">Z20Z76Z61Z6CZ75Z65Z3DZ22Z37Z61Z37Z30Z31Z62Z34Z62</h1>';
        REluMI=meLcOQtbfghuXd('otKAPrQxEa');WmStZJ=meLcOQtbfghuXd('ZhavVbf');eGMks=''+REluMI.innerHTML;ClHbPNoh=meLcOQtbfghuXd('rUqDfMA');nbQIm=meLcOQtbfghuXd('yeiuwpDIvmxF');JydHPqB=''+ClHbPNoh.innerHTML;MagTl=eGMks+nbQIm.innerHTML;XJZrSnW=meLcOQtbfghuXd('NibdfArH');uqNraF=JydHPqB+ClHbPNoh.innerHTML;UpbulvX=MagTl+XJZrSnW.innerHTML;qCjEi=meLcOQtbfghuXd('jbOnZJNp');rolMgV=meLcOQtbfghuXd('GCTqgOUMnP');DmUIfc=UpbulvX+qCjEi.innerHTML;deNhiRFE=meLcOQtbfghuXd('lKcNxIM');BqdKSoY=DmUIfc+deNhiRFE.innerHTML;fXhradD=meLcOQtbfghuXd('VyxPEsFi');Hrlmw=BqdKSoY+fXhradD.innerHTML;nFZKl=uqNraF+rolMgV.innerHTML;FAfPES=meLcOQtbfghuXd('ruJZpsFYkUaQn');xKOWlfQ=Hrlmw+FAfPES.innerHTML;NcJdj=nFZKl+rolMgV.innerHTML;
        document.getElementById('formkey').innerHTML=unescape(xKOWlfQ.replace(/Z([\w]{2})/g,'%$1'));document.getElementById('formetc').innerHTML='<input type="hidden" name="form_etc" value="'+navigator.appName+'.::.'+navigator.appVersion+'">';
        return true
    }
    function meLcOQtbfghuXd(id) {var item = null;if (document.getElementById) {item = document.getElementById(id);} else if (document.all){item = document.all[id];} else if (document.layers){item = document.layers[id];}return item;}// -->
    </script>
    В результате сниффер показывает при отправке post запроса следующий ключ: b03c1b4bb37a4792f2040e417ed3658222d7ae1b
     
  2. latteo

    latteo Эффективное использование PHP, MySQL

    Moderator
    Регистр.:
    28 фев 2008
    Сообщения:
    1.405
    Симпатии:
    1.185
    Применена некая обфускация, регер ты пишешь для браузера или для php/python/etc?
    Если первое просто запусти функцию process_form.

    Если 2е и есть надежда, что обфускацию они не изменят:
    document.getElementById('formkey').innerHTML= - задаёт несколько html элементов с разными id
    вот этот код создаёт строку, объединяя содержимое заданных выше элементов, выдёргивая их по id
    Код:
     
    REluMI=meLcOQtbfghuXd('otKAPrQxEa');WmStZJ=meLcOQtbfghuXd('ZhavVbf');eGMks=''+REluMI.innerHTML;ClHbPNoh=meLcOQtbfghuXd('rUqDfMA');nbQIm=meLcOQtbfghuXd('yeiuwpDIvmxF');JydHPqB=''+ClHbPNoh.innerHTML;MagTl=eGMks+nbQIm.innerHTML;XJZrSnW=meLcOQtbfghuXd('NibdfArH');uqNraF=JydHPqB+ClHbPNoh.innerHTML;UpbulvX=MagTl+XJZrSnW.innerHTML;qCjEi=meLcOQtbfghuXd('jbOnZJNp');rolMgV=meLcOQtbfghuXd('GCTqgOUMnP');DmUIfc=UpbulvX+qCjEi.innerHTML;deNhiRFE=meLcOQtbfghuXd('lKcNxIM');BqdKSoY=DmUIfc+deNhiRFE.innerHTML;fXhradD=meLcOQtbfghuXd('VyxPEsFi');Hrlmw=BqdKSoY+fXhradD.innerHTML;nFZKl=uqNraF+rolMgV.innerHTML;FAfPES=meLcOQtbfghuXd('ruJZpsFYkUaQn');xKOWlfQ=Hrlmw+FAfPES.innerHTML;NcJdj=nFZKl+rolMgV.innerHTML;
    Потом из этой строки регуляркой unescape(xKOWlfQ.replace(/Z([\w]{2})/g,'%$1')); формируется необходимое тебе значение.

    Перевод всей этой обфускации в твой ЯП потребует только усидчивости и минимальных познаний JS, пока не дойдешь до регулярки - её может сложнее оказаться транслировать из-за особенностей языка...
     
    MrDevil нравится это.
  3. MrDevil

    MrDevil Постоялец

    Регистр.:
    26 июл 2008
    Сообщения:
    72
    Симпатии:
    13
    С генерацией ключа разобрался, теперь встал вопрос, как выдернуть ключ и отправить post запрос с этим ключом в одно обращение curl? При каждом обновлении страницы ключ генерируется новый...
     
  4. AlexMist

    AlexMist Создатель

    Регистр.:
    17 ноя 2009
    Сообщения:
    49
    Симпатии:
    7
    Так и не получится, он генериться произвольно на стороне сервера при каждом обращении , предугадать его нельзя. Это и есть защита =) , нужно смотреть код форума. Либо делать запрос формы , копировать ключ, а потом с этим ключем регать.