Bitcoin Forum

Local => Кодеры => Topic started by: akledirs on May 22, 2016, 01:32:12 PM



Title: Процедура логина на BTC-e.com
Post by: akledirs on May 22, 2016, 01:32:12 PM
Ребятушки, хочу одну утилитку написать, учусь кодингу заодно на практике, требуется запилить вход на биржу Btc-e.com.
Язык C#.
У сайта есть защита при логине, от перебора наверное. Отправляешь логин и пароль, он тебе в ответ криптографическую задачку вида:
Code: ("Задача")
{"success":1, "data":{"PoW":1,"work":{"target":3.1153781151209e+34,"data":"V8C55QPU0G6B768DSWZMWOD5OCJRXKYTV354KWF05K8HRAZDICFY6GGSFBME59C2"}}}
Для браузера есть код, который задачку решает:
Code: ("JS")
function getPoW(a,b){var c=0;do hash=eval("(0x"+login_md5(md5(md5(b+c)))+")"),++c;while(hash>=a);return c}
function login_md5(a){d1=a.substr(0,16);d2=a.substr(16,16);return d2+d1}
/*В качестве a, b значений для функции getPoW используются значения target и data из задачи
*/
Пишу на шарпе так, но считает почему-то неправильно:
Code: ("C#")
public int Get_PoW(string target, string data)
        {
            int nonce = 0;
            target = target.Replace(",", ".");
            BigInteger number=1, y = 0;
            //func(md5(md5(data+nonce)
            MD5 md5 = new MD5CryptoServiceProvider();
            while (number > y)
                {
                    byte[] checkSum = md5.ComputeHash(md5.ComputeHash(Encoding.UTF8.GetBytes(data+nonce.ToString())));
                    string result = BitConverter.ToString(checkSum).Replace("-", String.Empty);
                    string d1 = result.Substring(0, 16);
                    string d2 = result.Substring(16, 16);
                    string hash = d2 + d1;
                    /*
                    If value is a hexadecimal string, the TryParse(String, NumberStyles, IFormatProvider, BigInteger)
                    method interprets value as a negative number stored by using two's complement representation if its
                    first two hexadecimal digits are greater than or equal to 0x80. In other words, the method interprets
                    the highest-order bit of the first byte in value as the sign bit. To make sure that a hexadecimal string
                    is correctly interpreted as a positive number, the first digit in value must have a value of zero.
                    For example, the method interprets 0x80 as a negative value, but it interprets either 0x080 or 0x0080 as
                    a positive value.
                    */
                    if (BigInteger.Parse(hash[0].ToString(), NumberStyles.HexNumber) >= 8)
                        hash = "0" + hash;
                    number = BigInteger.Parse(hash, NumberStyles.HexNumber);
                    string number_s = number.ToString();     
                    y = BigInteger.Parse(target, NumberStyles.Float | NumberStyles.AllowExponent, CultureInfo.InvariantCulture);
                    nonce++;
                }
            return nonce;
        }
Подскажите советом, весь мозг уже сломал


Title: Re: Процедура логина на BTC-e.com
Post by: tloze on May 24, 2016, 02:38:57 PM
а что за функция md5, в JavaScript вроде нет встроенной функции md5..


Title: Re: Процедура логина на BTC-e.com
Post by: akledirs on May 24, 2016, 06:21:17 PM
Честно говоря с JS до сих пор сталкиваться не приходилось, был уверен, что это просто стандартная функция. Но в коде этого https://btc-e.com/js/core12.min.js (https://btc-e.com/js/core12.min.js) файла, я ссылок на другие функции с md5 не увидел.


Title: Re: Процедура логина на BTC-e.com
Post by: shotev on May 24, 2016, 07:22:35 PM
а что за функция md5, в JavaScript вроде нет встроенной функции md5..
Тот же вопрос в js нет md5 мб просто название или что? вообще я прочел партянку даже особо не понял что нужно)


Title: Re: Процедура логина на BTC-e.com
Post by: tloze on May 24, 2016, 09:25:37 PM
Честно говоря с JS до сих пор сталкиваться не приходилось, был уверен, что это просто стандартная функция. Но в коде этого https://btc-e.com/js/core12.min.js (https://btc-e.com/js/core12.min.js) файла, я ссылок на другие функции с md5 не увидел.

да она вызывается из  jquery1.js который подгружается раньше, а вообще твою задачу не проще будет решить через официальное API биржи?
просто так как ты сейчас хочешь сделать может перестать работать после любого изменения, это как бы не совсем честный метод :)


Title: Re: Процедура логина на BTC-e.com
Post by: akledirs on May 25, 2016, 09:29:56 AM
Увы, метод API не позволяет решить задачу.
shotev, мне нужно залогиниться на сайте. Но решение задачки у меня не соответствует решению задачки браузером при одинаковых данных.
tloze, хм, чтож буду копать этот файл вечерком, может разберусь что к чему


Title: Re: Процедура логина на BTC-e.com
Post by: uservalera on June 30, 2016, 02:49:41 PM
Quote
Увы, метод API не позволяет решить задачу.

Мониторинг ввода "яда" хотите сделать?

А через WebBrowser (компонент - вкладка коммон контрол (визуал студио)) не получается?


Title: Re: Процедура логина на BTC-e.com
Post by: akledirs on July 21, 2016, 12:11:13 PM
Quote
Увы, метод API не позволяет решить задачу.

Мониторинг ввода "яда" хотите сделать?

А через WebBrowser (компонент - вкладка коммон контрол (визуал студио)) не получается?
Точно, надо будет и ЯД прикрутить)
Но изначально замысел был другой.
Через webBrowser логинится с вылезанием ошибок скриптов, но в профиль заходится. Но возникает другая проблема - webBrowser самые нужные куки и не отдаёт. bID, SESSID, __cfduid отсутствуют.
Поискал - это нормально для webBrowser'а - в целях какой-то безопасности определенные куки не отдаются.


Title: Re: Процедура логина на BTC-e.com
Post by: ON on July 23, 2016, 03:42:42 PM
Выложишь в общий доступ, когда сделаешь? В эту ветку?