вот нашел на просторах интернета источник http://allcheats.ru/t205662/
Получения изображения, передача параметров в flash, отправка POST запроса.
При запросе страницы голосования, например http://l2top.ru/vote/3577/, происходит загрузка flash ролика по адресу http://l2top.ru/StrongCaptcha.swf. Далее в этот flash ролик передаются следующие аргументы
key: 'b6c40f814e4f920ac9e32f7272070449',
imgUrl: 'cryptImg.php',
id: 3577,
pref:'0=Без+префикса;725=Air;1128=Aria;721=Earth;2285=Elmoreden;854=Event;723=Hunter;727=Pandora;728=Sun;719=Water;720=Wind',
nick: ''
где key – является уникальным ключом-идентификатором изображения капчи. Далее во flash-е происходит загрузка изображения капчи по адресу http://l2top.ru/cryptImg.php?key=b6c40f814e4f920ac9e32f7272070449. Данное изображения зашифрована с помощью алгоритма DES в режиме ECB с выравнивания данных null байтом(и). Во flash-е происходит его расшифровка, ключ для расшифровки формируется из строки, которая зашита в сам flash.
Данный ключ меняется периодически(один раз в час), поэтому придется подгружать flash, отступать 8 байт, и распаковывать с помощью zlib оставшиеся байты(zlib сигнатура начинается с 78DA), и искать ключ, он начинается со строки fl.events:DataChangeEvent.
Или искать по оффсету, размер ключа всегда постоянен, меняется только символы. На момент написания данный ключ выглядит так :
tsxzlmdcxntswopqziuwyomc4da92a68ef8401dniorhkmhwdueuvzuypfkiluygf086cc33f4b582f0xjwcoghgmxlzqjktyuedsjsunimqynbnoykutmpcvsjmqislswcbrrzdmiztllonognyrl17q40m
Далее при стирании капчи, заполнении всех полей и нажатии на кнопку проголосовать на сервер отправляется POST запрос:
key: b6c40f814e4f920ac9e32f7272070449
pref: 1128
data2:3051cee4fb0bd9c5422732f4176a8b69dc9ef3eec05c67e24f00b402ae93098864bba7701a08dd35a1ef7d75ac2ab7766473532112c727d47ebd21820624b799deacb68ff1fd0afc9f4ba8c6defb0f06f8c8dbb51843bf0a97f078a06264bc06c8c136ad11740a0a92f2fd226138c24c4891ce787c9015052c1ec8ab7aa31370b09ddd37bb21f0e9c16dcabf6c9cd2f3696e94d9052cd0cf5429fb32bc4b066eb070d0ef8243ce234d6ab5ca9176cb826afed3ce4a060ce274d7312f39c1c7dfc5878818acdd40dae497f3db6114a0f8d5afa3631d73623ab342decad25c4ac840cd839db5065fcde6de0c138bc6f9c6d7e0d95f3983966022c6dc34dfcf5f1ba1640f4d7b3b727285300a8cfb61e730e91637c7d7d2cd949c8adfd0b5917a2ed3242e398fa534093f89eeb9035625076bb5c3ef53f4afbd672138833ba3b21752747495cc050d4c4dd499678e7b6d9333016c36decbc5c927a19a4fdd1f5c378bb9ca00d69a0d5918aebb2105a70352e0bf933330d77b957dcb55ed4cb36206daad427b374a7c9378d62518e69cda3246c0971488fda1910245db206dcc9e1c22b775a2b85f1fafcc4b755a80818b036babd4322665ba88e610a62b12f94d67a236f99699c03ceccf13699e2e74c5e3b93635ac3e5d18766867a51f359875101d410c7b9340b8a9cdfc4a741ebd986d9c100f01f47c3e2904c1056b9b90bff319e22a8c558d15dd2c6f955a3d48daed2f9670160a5b4160e5d7dcac8817f45fa73380efc11d1ba019d112d9c68c524d36b89a7e7283303e4dff82152f77e603bac7b4418aa3dd6ae0baf55952d5de894dff82152f77e6037f96b8f234f1f5becb0d5d28190018d4a50ca221292cafc42e0b7038cef6f5a0308b2241b938b8a5eea4b4e32ecdc0748560fbf86d7714670f22ae04cbc1ecab15e31e13f59cea189a26968cc0d3a9a67aae544ce45357eb74f86a4ec3706b53cf5da5dd2951815a9c14c3a556f1b422a8d91538f3e710eae6a62288674e3fa55954323cc0edce7653a1428f89a4d746503fa2b3f052d8f70055f937c2d6757f9a9582c83fad9c694b4cc06614cab186747e5b7991aa9e8d8d97e351726961e3bc3d674544deac4b2c660cd1c35bc38baa85e4fa07f04016
data:a413532ec999e2b499a70e8cffebdaacdd2466cbcc07d08c57df4d6ca2133f63b6e7b5fbbe383c0c749ff8646e6c751e646faf5eebf1052dea6917647d358015a43caacc21d71863
code:c7pmu
nick:
где есть два поля data и data2 которые не совсем очевидны. Они зашифрованы с помощью DES, ключ для шифрования также формируется из строки описанного выше, и полученный массив байт после шифрования с помощью DES преобразовывается в HEX строку, то есть из 10-го байта получается его hex эквивалент, переведенный в строку, например символ пробела 35 -> 20 .
Что из себя представляет data:
это дубль всех переменных передаваемых в POST запросе в виде url query, кроме data и data2, то есть для запроса выше data будет иметь значения:
key=b6c40f814e4f920ac9e32f7272070449&nick= &code= c7pmu&pref=1128
data2 – координаты мыши по x,y при стирании капчи, разделенные “;” например:
167,53;164,53;150,52;137,52;123,51;106,51;88,51;47,51;22,51;0,51;-21,51;1,44;31,43;57,42;82,42;108,42;131,42;152,42;168,42;189,42;190,42;188,42;186,42;180,42;159,42;143,42;127,42;40,42;12,42;-12,42;-24,30;51,26;72,24;95,22;137,18;153,16;168,14;189,11;193,11;190,11;186,11;180,11;169,11;154,12;138,13;119,13;99,13;46,13;21,13;2,13;-16,13;-21,12;-5,10;15,10;38,10;104,7;134,6;158,5;181,4;199,3;226,3;232,3;229,3;228,3;225,3;219,3;210,3;197,3;181,3;162,3;109,3;84,3;61,3;38,3;14,3;-3,3;-18,3;-21,-1;-9,-3;5,-5;21,-7;40,-9;58,-11;99,-15;119,-15;136,-16;150,-16;161,-17;169,-17;173,-17;172,-17;171,-16;167,-14;161,-12;152,-8;139,-4;124,1;88,10;65,14;44,18;26,24;7,28;-8,31;-24,34;-23,34;-10,33;4,32;23,31;60,30;112,26;131,25;149,24;164,23;175,23;183,23;180,24;175,26;165,29;152,32;137,37;102,43;81,45;8,47;-8,47;-20,44;38,39;57,37;92,33;108,32;125,30;162,28;161,28;158,28;152,29;144,30;120,37;107,40;92,43;62,48;36,50;25,50;17,50;9,50;9,49;11,45;14,42;16,40;18,38;22,34;29,30;37,25;46,21;72,9;99,-1;118,-8;122,-10;125,-11;122,-11;118,-10;112,-8;92,-4;78,-2;65,-1;50,1;20,3;6,3;-4,4;-11,4;-16,5;-13,5;-12,5;-7,3;-3,3;3,2;32,-3;45,-5;58,-6;70,-7;79,-8;89,-8;96,-9;110,-10;112,-10;111,-10;110,-10;
Расшифровка изображения капчи и формирования ключа расшифровки капчи из строки.
Поскольку используется режим ECB, то данный разбиваются на группу по 8 байт в цикле, и каждый блок данных расшифровывается отдельно, ключ расшифровки также составляет 8 байт. Также следует учесть то, что недостающие байты до 8 байт, при разбивки расшифровываемых данных, дополняются нулевыми символами. Как формируется ключ расшифровки:
Из строки описанной выше строки:
tsxzlmdcxntswopqziuwyomc4da92a68ef8401dniorhkmhwdueuvzuypfkiluygf086cc33f4b582f0xjwcoghgmxlzqjktyuedsjsunimqynbnoykutmpcvsjmqislswcbrrzdmiztllonognyrl17q40m
берется подстрока длиной 2 символа и началом с 150-а символа, первый символ начинается с 0, то есть для приведенной строки это будет число 17 (там всегда должно быть hex значения, то есть 0-f). Полученное hex значения нужно перевести в десятичное основания. То есть x17->23, данное число обозначает начало другой hex подстроки, которая уже и будет непосредственно ключом расшифровки, то есть для приведенной выше строки это будет:
c4da92a68ef8401d
Далее эти 16 hex символов нужно разбить по двое в цикле, и перевести в десятичное основания, использую полученный результат как массив байт размерностью 8, то есть:
0xC4 -> 196
0xDA -> 218
0x92 ->146
0xA6 ->166
0x8E ->142
0xF8 ->248
0x40 ->64
0x1d ->29
И в цикле пройтись по массиву байт зашифрованной капчи, разбивая этот массив на блоки по 8 байт(режим DES ECB) расшифровывая каждый блок с помощью ключа полученного выше(или в зависимости от конечного языка программирования и способа реализации указать режим ECB и передать весь массив с изображениям), дополняя не хватающие байты null байтами до длины блока 8 байт.
Шифрования POST переменных data и data2 и получения ключа шифрования.
Режим DES также ECB и также не достающий байты до блока 8 байт дополняются null байтами. Ключ шифрования также получается из строки описанной выше:
tsxzlmdcxntswopqziuwyomc4da92a68ef8401dniorhkmhwdueuvzuypfkiluygf086cc33f4b582f0xjwcoghgmxlzqjktyuedsjsunimqynbnoykutmpcvsjmqislswcbrrzdmiztllonognyrl17q40m
По такому же принципу, как и для ключа расшифровки, берутся 2 символа начиная со 153 символа, то есть 40 , интерпретируются как HEX значения, переводятся в десятичное основания получая 64 – это начало HEX строки, из которой будет аналогично, как и для расшифровки сформирован ключ шифрования –
f086cc33f4b582f0
0xFO-> 240
0x86 -> 134
0xCC ->204
0x33 ->51
0xF4 ->244
0xB5 ->181
0x82 ->130
0xF0->240
Затем каждый байт в полученном зашифрованном массиве байт переводиться в его HEX эквивалент, и получается HEX строка.