хеширате VKontakte

Интересува се от темата разшифровате хеша, който се използва, за да се противодейства на контакти CSRF атаки
Ако се вгледате в пост-заявки, че е лесно да се види на параметъра хеша, състоящ се от 18 знака.
Какви са моите предположения за този профил

Тази функция просто нарязани на парчета и хеш обменя знаци. В резултат на това хеша е съкратено до 18 знака.

Ето как изглежда в PHP

На сървъра, с MD5 хеш също намалява до 18 знака (на функцията по-горе), както и в сравнение с хашиш, който дойде в искането.

Как е md5 хеш?
Най-вероятно чрез параметрите на искането. Ако отворите документацията за API. има такова нещо.

Логично е да се предположи, (ако вземем проба код API), че с MD5 хеш се формира по този начин
md5 ( "12345act = ентерално = 1gid = 11111); // за присъединяване към групата
md5 ( "12345act = leaveal = 1gid = 11111); // да напусне групата

md5 ( "средата = 12345 # 038; акт = влиза # 038; Al = 1 # 038; GID = 11111); // за присъединяване към групата
md5 ( "средата = 12345 # 038; акт = оставя # 038; Al = 1 # 038; GID = 11111); // да напусне групата

или така
md5 ( "12345method = groups.entergid = 11111) // за присъединяване към групата
md5 ( "12345method = groups.leavegid = 11111); // да напусне групата

12345 - потребителско име
11111 - ID Group

Но в действителност, хеша за влизане и излизане за едно и също! Следователно действа параметър (въвеждане || отпуск) не се използва в формиране на хеш. Освен това, хеша за ", за да кажете на приятелите си за групата" съвпада с хеш влизането хашиш и изход.

Ясно е, че параметрите на потребителско име и група, използвани при формирането на хеш, но какво друго е имало не е известна. Шансовете все още се използват до известна ключ "podsolki" хашиш. Документацията на API може да се види на ключови приложения.

Но дори и ако се научим как с MD5 хеш, не е ясно как алгоритъма след това го е съкратено до 18 знака. Макар че, ако се знае точно md5, бюста може да бъде да се опита да намери алгоритъм. Вероятно имате нормална пермутация на символите в линейна прогресия (вж. По-горе).

Като цяло, мисля, че хеша до 32 знака, е съкратено от стария алгоритъм 2 пъти (вж. Над PHP функция decodehash). С всяко подаване линия намалява от 7 символи (32-> 25-> 18).
Въведете decodehash (decodehash (md5 ( "средата = 12345gid = 11111")))

Защо е старият алгоритъм? Тъй като всички програмисти ужасен тъпак и вероятно алгоритъма не се е променило.

Защо реших, че всичко, което се взима от md5 32-герой, а не от ша или друг метод за криптиране? На първо място, md5 - Това Латинска плюс фигури, което съвпада със символа хашиш. На второ място, контактът първоначално използват md5 за криптиране на пароли в бисквитки. На трето място, md5 се използва в Контакти API на.

С една дума, в нощта озадачи и в крайна сметка напусна тази професия. Но ако някой има идея за работа по декодиране, той е готов да плати добри пари :)

Що се отнася до разшифроването е по-добре да не се опитват, защото на md5 100% подсолена тайна "ключ", който се съхранява на сървъра.

Така че, бл *, тази идея! Въпреки това, едно нещо - на паметта на вашия компютър dohrenischa работа. Може би това не е достатъчно за нея, тя е най-вероятно. Така че, след това: 1) създаване на прост генератор парола (Например, аз бях в състояние да подреди всички PERL комбинация от 2 до 6 знака на 7-аз не разполагате с достатъчно място) ... 2) Създаване на скрипт, който използва списък с пароли от речник и монтаж и демонтаж на md5 хеш; и след това, след като програмата за обработка на данни се създава речник (като база данни) и са написани на всеки ред стойности:
мине: парола pass_md5: parol_md5.

Е, ако контактът е използването podsolku да md5, най-доброто нещо, което през втората скрипта на Perl - създаване на скрипт, който ще е идентична JS скрипт. И базата данни ще се изписва така:
мине: парола pass_md5: parol_md5 pass_md5sol: Парола md5sol.

Generator прости пароли realzovat с помощта на линия, докато в езика Perl:
#! ЮЕсАр / хамбар / Perl
отворено (CFG "alfabet.txt");
отворена (PASS ">> brut1.txt");
докато ($ р =)
печат PASS "0 $ р";
>
близо CFG;
печат PASS "\ Н";
близо PASS;
отворено (CFG "alfabet.txt");
отворена (PASS ">> brut1.txt");
докато ($ р =)
печат PASS "1 $ р";
>
близо CFG;
печат PASS "\ Н";
близо PASS;
.
.
.
И така нататък. Необходимо е да се отбележи, че тези същите парчета код в един файл с разширение пл 36 парчета. Къде печат PASS линия "1 $ р" - там е необходимо да се създаде променлив характер. подредбата на клавиатурата е от 0 до 9 за цифрите, а след това писма на английски клавиатурата е малък.
Също така е уместно да се припомни, че създава alfabet.txt файл и там са написани с един ред в него азбуката:
0
1
2
3
.
и така нататък. Това ще създаде двуцифрен код на програмата. За да го увеличи с един знак, че трябва да се създаде още една и съща програма, но данните са взети от речника на двойно-цифрена парола, за да създадете трицифрен. Вземете това:
#! ЮЕсАр / хамбар / Perl
отворено (CFG "brut1.txt");
отворена (PASS ">> brut2.txt");
докато ($ р =)
печат PASS "0 $ р";
>
близо CFG;
печат PASS "\ Н";
близо PASS;
. И така нататък.
Програмата е един и същ, но взема данните и създава brut1.txt речник brut2.txt. Като цяло, аз се надявам, значението е ясно.
В първия етап на създаването на речници. И тогава, sbabatsat сценария за промяната в md5. Ще стане готов със сценария на интернет, но по-добре е да се преправи под. Точно сега аз няма да пробие главата ми над това. Сценарий, че монтаж и демонтаж с обичайната парола в md5 прави и търси съвпадение, например:
#! / ЮЕсАр / хамбар / Perl -w

използването на строг режим;
използвате Digest :: MD5 QW (md5_hex);

ми $ correct_pass = "bb456cfc65785beda9ec0c034e2a54ae";

отпечатва "Въведете паролата: \ н";

ми $ пас =;
Chomp ($ подаване); # Режеш \ н

ако ($ correct_pass екв md5_hex ($ пас)) печат "Добре дошли \ н!";
> Иначе печат "Отиде nafig \ н!";
>

Вече не е си мислех, добре, а след това да го отрежете до 18 знака.