PDA

Просмотр полной версии : ДЕШИФРУЕМ ТРАФИК


Страницы : [1] 2

VORON
24.12.2007, 00:02
собственно ситуация стандартная куча ботов было на серваке.. и админы сменили шифрацию на серваке.. теперь пакетхак неможет корректно распознать пакеты..
в етой теме мы будем на моем многострадальном примере учиться как сломать защиту.. очень расчитываю на помощ людей которые сталкивались с подобной задачей..
для решения нам нужно знать то что для входящщего и исходящего трафика применяются разные алгоритмы шифрации (но невсегда) в базовой шифрации ети алгоритмы совпадают.. ДЛЛ исходники для которой дал ХКОР- сделана так что применяет 1 и тотжэ алгоритм для дешифрации трафика в обоих направлениях поетому ковыряние в ней ниче не даст нам нужно для каждого направления свой алгоритм применить...
я планирую ето сделать с помощью скриптов.. 1 скрипт помещу вверху списка - его задача будет ДЕШИФРИРОВАТЬ переменную PCK разными методами в зависимости от того пакет ИСХОДЯЩИЙ ИЛИ ВХОДЯЩИЙ.. а второй скрипт помещу в конце списка- и он будет зашифровывать ету переменную..
посредине списка скрипты будут работать с расшифрованными данными...

ну собственно я не надеюсь на очень быстрое решение задачи просто в етой теме будет обмен опытом.. те кто сталкивался с похожим..
начал я с того что ХКОРА замучал вопросами тупыми-) че да как -)) с чего начать.. ну начали с мониторинга... пакетов..
для шифрации обычно применяют КСОРИНГ на ключ.. КСОРИНГ хорош тем что он не изменяет длинну данных.. и данные зашифрованные с его помощью могут быть обратно распаковыны к начальному виду.. а вот ключ- админы любят менять.. причем в моем случае- очень извращенными способами.. при мониторинге исходящего трафика и отправке подряд 3-х одинаковых однобайтовых пакетов на разрыв пати (2B) я обнаружил что пакетхак перехватывает 88 8F 8E.. т.е. каждый раз новое...
но приетом часто по порядку.. ксоринг того что перехватил пакетхак на 2b дает нам последовательность a3 a4 a5 и т.д. т.е. последовательность каждый член которой отличается друг от друга на 1.. ХКОР посоветовал предположить что ключ инкрементируется (увеличивается) на длинну пакета каждый раз при отправке нового пакета... ну собствено проблема в том что я продолжил мониторить етот пакет на разрыв пати и обнаружил что порой ключ уменьшается-((( ето меня в тупичек поставил... раз 20-30 пакетов подряд ключ на 1 увеличивается а потом бац и срывается последовательность и ключ на 2 меньше становится...
если у ковото есть идеи- поделитесь...

stirena
24.12.2007, 02:36
Дай первые 10 пакетов гейм сервера (без расшифровки), я папробую проанализировать, может помагу чемто.

VORON
24.12.2007, 14:53
Дай первые 10 пакетов гейм сервера (без расшифровки), я папробую проанализировать, может помагу чемто.
написал скрипт для удобного мониторинга пакетов и ксоров.. он выводит на МЕМО на форму пакет перехваченый и ксор к нему.. так вот при отправке 10 подряд пакетов (2B) - на разрыв пати состоящий из 1-го байта в мемо записывается ЛОГ:
43 -125-86
43 -126-85
43 -127-84
43 -112-91
43 -113-90
43 -114-89
43 -115-88
43 -116-95
43 -117-94
43 -118-93
43- это 2B , вторая колонка зашифрованые пакеты от клиента к серверу содержащие 2B а 3-я колонка ксор к ним.. но иногда выходит так что ключ убафляется не по 4 пакета блоком а по 2 пакета..

43 -220-247
43 -221-246
43 -210-249
43 -211-248
43 -208-251
43 -209-250
43 -214-253
43 -215-252
43 -212-255
43 -213-254
43 -202-225
вот собственно и всё..
код в скрипте который создаёт лог выглядит так:

if FromClient then
begin
D:=ord(PCK[1]);
x:= d XOR 43;
frm.caption:=inttostr(d)+'-'+inttostr(x);
memo.Lines.Add('43 -' + inttostr(D) + '-' + inttostr(x));
end;
если теья интерисуют именно 10 первых пакетов при входе в игровой мир.. то они такие:
Ис BD 9E 00 00 49 BA 54 87 B0 9E 00 00 49 BA 54 87 B0 9E 00

Вх F8 02 01

Вх 15 56 00 4F 73 1B 54 C8 00 4E 00 37 73 49 54 1E 46 00 00 00 73 83 6D 87 00 A5 01 00 73 49 54 87 00 00 00 00 73 4B 54 87 00 25 00 00 73 48 54 87 00 1D CF FE 8C 0C 4D 86 00 60 F2 FF 8C C6 96 72 28 5C 57 9C 33 91 F7 F7 3D 0A 97 8F 33 CA C8 29 00 27 D3 22 7B 49 54 87 00 3C 00 00 73 49 54 87 00 01 00 00 73 60 54 87 00 22 00 00 73 69 54 87 00 19 00 00 73 45 54 87 00 1A 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 3F 51 87 00 00 00 00 73 6C 54 87 00 00 00 00 73 49 54 87 00 00 00 00 73 49 54 87 00

Ис 8D 85 00

Вх FE 1B 00 09 67 35 54 86 00 00 00 67 67 59 54 F2 00 64 00 69 67 5A 54 87 00 02 00 00 67 51 54 EE 00 6F 00 6E 67 35 54 84 00 00 00 67 67 5C 54 F5 00 61 00 6E 67 35 54 83 00 00 00 6F 67 47 54 E2 00 6E 00 00 67 30 54 87 00 61 00 64 67 50 54 E9 00 00 00 06 67 35 54 EE 00 6E 00 6E 67 54 54 E3 00 72 00 69 67 59 54 E2 00 00 00 07 67 35 54 E0 00 6F 00 64 67 54 54 F5 00 64 00 00 67 3D 54 87 00 72 00 75 67 5B 54 E2 00 00 00 09 67 35 54 F4 00 63 00 68 67 40 54 F3 00 74 00 00 67

Ис 55 86 00 00 41 A9 54 87 56 86 00 00 41 A9 54 87 56 4F BC F2 E6 CF 0E 8C CE B0 A5 BD C8 44 2B 63 81 ED 49 E2 DE 46 22 6C 98 25 FA F4 FE A5 30 24 E2 22 CE DC 87 A1 6A E9 BC C3 CA D3 BF 21 47 00 EE 80 2C 96 B1 32 4A 09 EA 40 9B 98 89 CA 42 48 86 A5 48 00 41 A9 54 87 56 86 00 00 41 A9 54 87 56 86 00 00 41 A9 54 87 56

Вх 7F 00 00

Вх 64 6C 04 00 62 34 54 87 00 04 00 00 62 13 55 87 00 01 00 00 62

Вх E4 00 04 F6 AB 4D 54 84 00 00 00 02 AB 49 54 02 00 00 00 01 AB 49 54 0D 00 00 00 01 AB 49 54
при входе в игровой мир я нахожусь в отдаленном месте где нет не мобов не живых чаров.. поетому лишнего вроде не должно быть нечего... еще хачу заметить что галочка НЕ ДЕШЕФРИРОВАТЬ ТРАФИК- отключена и стоит галочка ОБХОД СМЕНЫ КСОР КЛЮЧА.. галочка НЕ ДЕШЕФРИРОВАТЬ ТРАФИК- помагает в том что во входящем трафике пакеты на половину верно расшифровываются.. первые 4 байта- корректно а следующие 4 байта- нет... и т.д. по пакету 4 верно а 4 нет...

stirena
24.12.2007, 19:52
Какието неправильные пакеты.
должно бытьхотябы так
1. ProtocolVersion,
2. CryptInit
3. AuthLogin
4. CharList
5. CharacterSelected
6. RequestQuestList и RequestExManorList
7. ExSendManorList
8. QuestList
9. EnterWorld
10. UserInfo

VORON
25.12.2007, 01:38
интересная вещь получается.. при отправке серверу пакета на разрыв пати "2B" сервер дает ответ что невозможно выйти из пати в дешиврованном виде "3B 00 00 00 00" на на моем сервере вместо етого приходит "3B 00 00 00 XX", хх- всегда разное и меняется по непонятным мне законам... если применяется ксоринг- то ксор чего угодно на 00 - должен дать само себя.. т.е. то что мы видим вместо хх в логе ето и есть 5-й байт ключа.. самый младший байт в изменяющейся части ключа 8-ми байтного.. но закон его изменения мне непонятен вапще.. вместо хх в 4-х принятых подряд пакетах- на разрыв пати (A6 25 AD 20) ну а первые 4 байта дешифрируются корректно (3B 00 00 00).. возможно ли что то еще кроме ксоринга? кто с чем сталкивался?

Добавлено спустя 1 час 10 минут 35 секунд:
продолжаю исследовать.. и обнаружил еще кое что интересное.. взял пакет ЮЗЕР ИНФО весьма длинный.. в начале там где моё имя указывается а потом характеристики.. как я уже сказал мой сервак шифрует ходящий трафик пакет не полностью а лиш половину.. весь пакет делится на орезки по 8 байт начиная с 1-го.. первые 4 байта в каждом отрезке- не закодированы и пакетхак их видит в расшифрованном виде как и должно быть.. а вот 4 следующие закодированы.. так вот в пакете ЮЗЕР ИНФО очень много нулей используется и есть места где по 12-16 нулей подряд идут.. я выбрал место там где в оригинале долны быть нули но в закодированом виде байты какието и предположил что ето и есть ключ для КСОИНГА.. так 0 отксореный на ключ= самому ключу.. и попробывал с помощью етого ключа расшифровать свое имя в етом жэ пакете.. просто отксорил побайтово закодированые байты в имени на байты из ключа.. И У МЕНЯ ПОЛУЧИЛОСЬ РАСШИФРОВАТЬ ИМЯ СВОЁ-).. т.е. теперь я знаю точно что применяется обычный КСОРИНГ для шифрации.. тока закон изменения ключа для меня остался загадкой..
но теперь чтоб немучится и не вычислять КСОР для каждого пакета который я мониторю я нашел хороший входящий паетик выдающий сообщение "ВЫ НЕМОЖЕТЕ ИСПОЛЬЗОВАТЬ ЕТО СИДЯ" который приходит каждый раз когда сидя на попе скил любой юзаеш в оригинале он выглядет так: "64 1F 00 00 00 00 00 00 00" .. но как вы уже сами догадываетесь пакетхак у меня его видит типа так "64 1F 00 00 XX XX XX XX 00" само собой ХХ ХХ ХХ ХХ - ето и есть ключ для ксоринга.. осталось выяснить по каким законом меняется от пакета к пакету етот ключ.. ето для меня покачто загадка.. наблюдения показывают что от пакета к пакету изменяются 1 байт- часто 2-й реже а 3 очень очень редко (через долгий промежуток времени) и 4 ваще почти никогда (ненаблюдал).. т.е. складывается впечатление что ето 4 разряда 4-х байтного числа которое от пакета к пакету немного изменяется.. но по какому закону?

Добавлено спустя 44 минуты 31 секунду:
может кто то захочет голову поломать.. приведу лог пакетхака для осмысления.. который получается если в тихом безлюдном месте без мобов сидя на попе 3 раза заюзать скил с ИД "63 00 00 00" при етом в фильтрах все галочки включены в логе никаких пакетов не пропущено..

отправляю запрос на использования скила:
A9 20 01 00 48 9A 55 87 86 43 расшифрованный вид:"2F 63 00 00 00 00 00 00 00 00"

получаю ШОУ МЕССАДЖ
64 1F 00 00 E5 10 54 87 00 расшифрованный вид:"64 1F 00 00 00 00 00 00 00"

получаю ЭКШН ФЕЙЛД
25 расшифрованный вид:"25"

отправляю запрос на использования скила:
BC 4D 01 00 13 C4 54 87 93 2E расшифрованный вид:"2F 63 00 00 00 00 00 00 00 00"

получаю ШОУ МЕССАДЖ
64 1F 00 00 E6 10 54 87 00 расшифрованный вид:"64 1F 00 00 00 00 00 00 00"

получаю ЭКШН ФЕЙЛД
25 расшифрованный вид:"25"

отправляю запрос на использования скила:
C5 20 01 00 2B F7 55 87 EA 43 расшифрованный вид:"2F 63 00 00 00 00 00 00 00 00"

получаю ШОУ МЕССАДЖ
64 1F 00 00 E1 10 54 87 00 расшифрованный вид:"64 1F 00 00 00 00 00 00 00"

получаю ЭКШН ФЕЙЛД
25 расшифрованный вид:"25"

Добавлено спустя 1 час 2 минуты 2 секунды:
тут во входящем трафике- сразу ключ выделен (4 байта вместо нулей).. а в исходящем ключ выделить не проблема тоже вот например:
отправляю запрос на использования скила:
C5 20 01 00 2B F7 55 87 EA 43 расшифрованный вид:"2F 63 00 00 00 00 00 00 00 00"

EA 43 - ето первые 2 байта ключа.. проверяем: EA xor C5 = 2F, 43 xor 20= 63 что соттветстыует тому что и нужно получить..
3 4 5 6 7 8 байты ключа ето 01 00 2B F7 55 87

dmitry501
25.12.2007, 07:35
Сервер то какой? :)

QaK
25.12.2007, 11:44
отправляю запрос на использования скила:
Скилл рапид шот? 2Voron выложи побольше пакетов не 3 ттройки а штук 10-15, а то из 3х мало что сделаешь...
Плияяяя!ППЦ работать не могу =) интересно стало ... щас тупо сижу и думаю как же может ключь меняться ааааааааа :O:

VORON
25.12.2007, 23:56
QAK да рапидшот.. ДИМКА сервер тока в пм (отпраавил) по понятным причинам тебе..

седня пока работал- думал.. стораясь думать головой-) надумал вот что.. новое значение ключа недолжно зависеть от своего предыдущего значения-((( или наоброт- "-)))" в доказательство приведу такой пример.. предположим ПАКЕТХАК отправит от имени сервера клиенту пакет какойто с использованием ключа, значение для которого он сам расчитает в зависимости от предыдущего значения ключа.. чтож- при етом клиент у себя в мозгах вычеслит новое значение ключа для будущего пакета от сервера.. но так как сервер про етот пакет (отправленный ПАКЕТХАКОМ клиенту) и знать не знал то сервер не станет расчитывать новый ключ.. и при следущей отправки любого пакета от сервера к клиенту- произойдет ошибка! так как сервак закодирует одним ключем а КЛИЕНТ будет распаковывать- другим ключем.. из етого вывод что для расчета нового значения ключа нам ненужно опираться на его прежнее значение... А НА ЧТО ЖЕ НАМ ТОГДА ОПИРАТЬСЯ??? ведь от чегото он всётаки меняется каждый раз...! помагите плиз!
из идей тока повнимательней всмотреться в заголовок пакета- который каждый раз разный и обрубается пакетхаком для удобства визуализации.. с учетом того что длинна пакет к примеру- "2b" (разрыв пати) - константа, предположив что ключ както от нее зависит- мы для одинакового пакета 2b должны получать одинаковый зашифрованный вид.. а вот например ЧЕКСАМ с учетом заголовка- будет всегда разный.. так как заголовок- меняется.. возможно там надо разгадку искать.. но либо в езменяющейся части заголовка какието подсказки есть.. вапще я кудато глубоко копать стал- но к этому приводят тока логические выводы опровергнуть которые- сам немагу..
щас запущу ПАКЕТХАК и отловлю ЛОГ новый из 15-20 пакетов и выложу... лог будет очень удобным надеюсь для осмысления..

Добавлено спустя 48 минут 2 секунды:
ТРИНДЕЦ НАРОД! админы чета грандиозное нахемичили! мои самые страшные прогнозы- сбылись..! КЛЮЧ ЗАВИСИТ ОТ СВОЕГО ПРЕДЫДУЩЕГО ЗНАЧЕНИЯ! И КАЖДЫЙ РАЗ МЕНЯЕТСЯ! и СЕРВЕР И КЛИЕНТ ДОЛЖНЫ ЕГО ИМЕТЬ и КАЖДЫЙ РАЗ ДЛЯ НОВОГО ПАКЕТА- ВЫСЧИТЫВАТЬ ЗАНОГО! я попытался внедриться ПАКЕТХАКОМ в трафик.. отправил клиенту безобидный пакет "25" - "ЕКШН ФЕЙЛД" в надежде подтвердить то что ето не приведет к ошибке.. так как я думал что ключ не зависит от своего предыдущего значения.. и получил что после етого пакета к клиенту- всё летит к чертям.. сообщения в чат через ЕРОГЛИФЫ начинают писаться.. и т.д. через пакетов 2-3-4-5 КЛИЕНТ вапще зависает и вылетает с критом.. из чего вывод: КЛЮЧ ЗАВИСИТ ОТ СВОЕГО ПРЕДЫДУЩЕГО ЗНАЧЕНИЯ!! всвязи с чем вопрос-- даже если я пойму логику его изменения то как я скриптом в трафик внедрюсь?? любой пакет от скрипта- рассинхронизирует клиент с сервером... ВО ЖЭСТЬ ТО! ето ведь придется фалшивый ключ ключ клиенту подсовывать а серверу фальшивый от клиента.. на несколько состояний назад.. т.е. если скрипт отправит хотябы 1 пакет камуто то он должен будет весь трафик последующий перекодировать с использованием ключаот предыдущего состоянния.. причем когда скрипт порядочно поработает откат состояния ключа достигнит ГРАНДИОЗНЫХ ЗНАЧЕНИЙ!..
а выход в чём??? че делать то ребята!

Добавлено спустя 2 часа 14 минут 29 секунд:
собственно ХКОР меня немного успакоил.. говорит что рассинхронизация ключа- ето в порядке вещей. и нужно просто перешифровывать все пакеты при прохождении через пакетхак (в нашем случаее ето будет скрипт) для того чтобы синхронизация ключа не нарушалась.. прийдется хранить 2 ключа для клиента (вход и выход) и 2 ключа для сервера (вход и выход) независимо друг для друга и перешифровывать все пакеты при прохождении через скрипт.. такчто продолжаем искать закон изменения ключа..
вот лог:
8E2C00001C5A5487A14F
FB41000011475487D422
A22C00007F3754878D4F
CF410000722A5487E022
B62C00001C5A5487994F
23400000114754870C23
4A2D00007F375487654E
37400000722A54871823
5E2D00001C5A5487714E
0B400000114754872423
722D00007F3754875D4E

такой лог получаю зажав сидя на попе долго кнопку ЮЗ СКИЛ.. за долю секунды от клиента к серверу улетают ети пакеты и межды ними нет ничего.. тока после них сервер начинает говорить что нельзя юзать скил... с задержкой..
как я уже сказал в оригинале етот пакет должен выглядеть так: "2F 63 00 00 00 00 00 00 00 00", выделить ключ отсюда не проблема.. мы видим что у ключа 3 4 байты не меняются (00 00), и 7 8 тоже не меняются (54 87), 2 байт меняется лениво както (4F,22,23,4E) повторов много.., 6-й байт закономерно циклом (5A,47,37,2A).. 5-й байт вместе с 6-м циклит.. но маловато 1 фиг данных закон изменения непонятен мне пока.. щас выйду из игры и зайду снова и получу новый лог аналогичный етому.. чтоб проверить цикличность..
ВОТ лог еще 1 с вкраплениями пакетов от сервера (ШОУ МЕСЕДЖ и ЕКШН ФЕЙЛД) как мы видим ети вкрапления не нарушают цикличности вапще никак.. а значит входящий и исходящий трафики не влияют на ключ друг друга..

379100003EE3548718F2
5EFC0000203F5487719F
25 (экшн фейлд) входящий
2B9100005D8E548704F2
B2FC0000435254879D9F
DF9100003EE35487F0F2
A6FC0000203F5487899F
F39100005D8E5487DCF2
9AFC000043525487B59F
E79100003EE35487C8F2
8EFC0000203F5487A19F
9B9100005D8E5487B4F2
E2FC000043525487CD9F
8F9100003EE35487A0F2
641F00006B67548700 (шоу месадж) входящий
D6FC0000203F5487F99F
A39100005D8E54878CF2
25 (экшн фейлд) входящий
CAFC000043525487E59F
579000003EE3548778F3
3EFD0000203F5487119E
4B9000005D8E548764F3
12FD0000435254873D9E
7F9000003EE3548750F3
06FD0000203F5487299E
139000005D8E54873CF3
7AFD000043525487559E
079000003EE3548728F3
641F00006A67548700 (шоу месадж) входящий
6EFD0000203F5487419E
3B9000005D8E548714F3
25 (экшн фейлд) входящий

QaK
26.12.2007, 10:08
В общем мысли вслух: взял последовательность:
8E2C00001C5A5487A14F
FB41000011475487D422
A22C00007F3754878D4F
CF410000722A5487E022
B62C00001C5A5487994F
23400000114754870C23
4A2D00007F375487654E
37400000722A54871823
5E2D00001C5A5487714E
0B400000114754872423
722D00007F3754875D4E

выделил в ней предполагаемый ключ для ксора: разбил на пары байт (для наглядности):

A14F00001C5A5487 =========================== A14F 0000 1C5A 5487
D422000011475487 =========================== D422 0000 1147 5487
8D4F00007F375487 =========================== 8D4F 0000 7F37 5487
E0220000722A5487 =========================== E022 0000 722A 5487
994F00001C5A5487 =========================== 994F 0000 1C5A 5487
0C23000011475487 =========================== 0C23 0000 1147 5487
654E00007F375487 =========================== 654E 0000 7F37 5487
18230000722A5487 =========================== 1823 0000 722A 5487
714E00001C5A5487 =========================== 714E 0000 1C5A 5487
2423000011475487 =========================== 2423 0000 1147 5487
5D4E00007F375487 =========================== 5D4E 0000 7F37 5487


Дальше мысли потекли в таком направлении(/bred generator on):
"А что будет если предыдущий ключь отксорить на последующий"
получилось(жирным выделен результат ксора)

A1-4F 0000 1C-5A 5487
75-6D 0000 0D-1D 0000
D4-22 0000 11-47 5487
59-6D 0000 6E-70 0000
8D-4F 0000 7F-37 5487
6D-6D 0000 0D-1D 0000
E0-22 0000 72-2A 5487
79-6D 0000 6E-70 0000
99-4F 0000 1C-5A 5487
95-6C 0000 0D-1D 0000
0C-23 0000 11-47 5487
69-6D 0000 6E-70 0000
65-4E 0000 7F-37 5487
7D-6D 0000 0D-1D 0000
18-23 0000 72-2A 5487
69-6D 0000 6E-70 0000
71-4E 0000 1C-5A 5487
55-6D 0000 0D-1D 0000
24-23 0000 11-47 5487
79-6D 0000 6E-70 0000
5D-4E 0000 7F-37 5487

Наблюдения 5й и 6й байты повотряются циклично 6Е-70 и 0D-1D а 1й и 2й как-то непонятно(для меня) воть пока все.
А еще 2й байт ксора 6D - повторяется сколько-то раз, потом 6С, потом снова по 6D, 2й байт ключа увеличивается на 1, надо отловить от чего это зависит, в частности нужен кусок, где 2 раза меняется (+1) 2й байт.

такс продолжение: анализируя второй кусок кода с вкраплениями получил (без пакетов от сервака):

18-F2 0000 3EE3 5487
69-6D 0000 1E-DC 0000
71-9F 0000 203F 5487
75-6D 0000 7D-B1 0000
04--F2 0000 5D8E 5487
99-6D 0000 1E-DC 0000
9D9F 0000 4352 5487
6D-6D 0000 7D-B1 0000
F0-F2 0000 3EE3 5487
79-6D 0000 1E-DC 0000
89-9F 0000 203F 5487
55-6D 0000 7D-B1 0000
DC-F2 0000 5D8E 5487
69-6D 0000 1E-DC 0000
B5-9F 0000 4352 5487
7D-6D 0000 7D-B1 0000
C8-F2 0000 3EE3 5487
69-6D 0000 1E-DC 0000
A1-9F 0000 203F 5487
15-6D 0000 7D-B1 0000
B4-F2 0000 5D8E 5487
79-6D 0000 1E-DC 0000
CD9F 0000 4352 5487
6D-6D 0000 7D-B1 0000
A0-F2 0000 3EE3 5487
59-6D 0000 1E-DC 0000
F9-9F 0000 203F 5487
75-6D 0000 7D-B1 0000
8C-F2 0000 5D8E 5487
69-6D 0000 1E-DC 0000
E5-9F 0000 4352 5487
9D-6C 0000 7D-B1 0000
78-F3 0000 3EE3 5487
69-6D 0000 1E-DC 0000
11-9E 0000 203F 5487
75-6D 0000 7D-B1 0000
64-F3 0000 5D8E 5487
59-6D 0000 1E-DC 0000
3D-9E 0000 4352 5487
6D-6D 0000 7D-B1 0000
50-F3 0000 3EE3 5487
79-6D 0000 1E-DC 0000
29-9E 0000 203F 5487
15-6D 0000 7D-B1 0000
3C-F3 0000 5D8E 5487
69-6D 0000 1E-DC 0000
55-9E 0000 4352 5487
7D-6D 0000 7D-B1 0000
28-F3 0000 3EE3 5487
69-6D 0000 1E-DC 0000
41-9E 0000 203F 5487
55-6D 0000 7D-B1 0000
14-F3 0000 5D8E 5487


5й и 6й байты ксора о5 циклично повторяются, 2й байт ксора 6D - такой же как и в первом, один раз изменяется на 6С, первый байт ксора непонятно как меняется, хотя вроде какая-то закономерность есть .... ток хз какая ...
еще: если поксорить 5е байты от ксора из первого варианта и из второго - получается одно и то же значение (63), для 6го также (6D)
З.Ы. просьба по голове больно не бить :wink:

VORON
28.12.2007, 02:51
QAK , давай думать мозгами... мне кажется что мы на верном пути.. то что циклит- заметили, то что ксор повторяется- тожэ.. давай думать дальше.. применять школьный курс математики... наврядли они ДИФЕНЦИАЛЬНЫЕ УРАВЕНИЯ ввели...
я и ты заметили что 2-й байт ключа отличается друг от друга на ксор равный "6D" а я ето подтвердил путем долгово мониторинга.. в разные дни.. даже после рестарта сервака- 2-й байт ключа- закономерно циклится на ксор "6D" об чем ето говорит???
я думаю что новый ключ получается из предыдущего путем ксора!. в случае со вторым байтом ключа- на одно и тожэ... поетому цикл такой.. именно на 6D ... 2-й байт от одного ключа отксорим на 6D и получим второй байт нового ключа... былобы всё хорошо но ето не всегда.. порой ето сбивается.. на 1 раз... на 1 пакет.. ксор нового ключа на предыдущий становится 6C порой.. на 1 пакет... и после етого всё снова: ксор- 6D (даже после рестарта сервака) 6D- это константа для ксора второго байта ключа.. очень редко на 1 раз она на 1С прыгает- но ето мы разберемся... далее.. раз так то- как мы можем получить цикличность такую? как написано в логе для второго байта исходящего пакета... 4F 22 4F 22 4F 22 как?? ето происходит если чтото ксорить на одно и тожже.... любое число ксорь на одно и тожэ и ответ будет циклом.. то одно то другое значение... из етого вывод что новый ключ- получается из предыдущего путем ксора предыдущего ключа на ЧТОТО! ето чтото- во втором байте- константа! т.е. для второго байта одно и тоже 6D...... на 6D 2-й байт ксорится вечно! но невсегда.. очень редко на 6С.. и то на 1 раз..
складывается такое впечатление что работает формула KEY2:=KEY1 xor F(d) , где D - длинна пакета... и при етом работают тока 2 байта... 1-й- всегда а второй- редко и то на 1 ксор отличается (вместо 3D становится 3C)... т.е. F(d)- на 3-й разряд 16- ричного числа- редко перелазит... F(d) работает в основном в пределах 1-го байта..
но раз при повторных однобайтовых пакетах ета F(d) залазит всётки на 2-й байт то вывод- она размером не ограничена.. и с каждым пакетом может быть она и растет даже... но странно .. 1 фиг если 2-й байт от ключей последовательных отксорить то выходит что почти всега 6D и на 1 раз 6С потом снова 6D т.е. функцие F(d) стремится чтоли както к 6D.. (бред неспорю...)....
вы спросите почему я взял формулу именно от D - (длинны пакета) зависящую.. да просто потому что при однобайтовом пакете (2B- исходящем) ключ друг от друга на 1 изменяется... то больше то меньше то по 4 больше то по 4 подряд меньше.. то 8 подряд больше то по 8 подряд меньше.. потом сменяется диапазон.. и снова конструкция повторяется на 1.. т.е. явно видно что при 1-но байтовом пакете ксор на 1 идет.. но с феничками.. вот обратите внимание если есть последовательная логика, то.. при смене диапазона четный ключ в следущий раз преобразуется на +1 а нечетный в минус на -1 ... смотрим логи в етом топе : 86 85 84 91 90 89 88 95 94 93 (ключ меняется при однобайтовом пакете) диапазон начался с 91 - нечетного значит следует ожидать 89 следушего.. что соответствует ксору на 1. ( длинну пакета..). а вот в другом логе видно что если последовательность алгоритма начинается с четного то следущий ключ будет больше на 1... сменить аллгоритм для первого байта ключа- очень просто.. достаточно среди кучи пакетов 2B - исходящих, отправить 1-н 10 байтов на ЮЗ СКИЛЛ... при етом меняется тенденция то на убывание ключ идет то на возрастание... при мониторинге однобайтового пакета (2B)....
а при етом всем при мониторенги 10-ти байтового пакета мы мониторим все 8 байтов ключа... и видим что 2-й байт в ключе друг от друга отличается на ксор 6D. .. и ето об многом говорит... думаем дальше..

бред конечно... нам нужны для решения задачи- МАТЕМАТИКИ!!!!!! а их ужэ и нету в природе все надеются на калькуляторы и т.д. а головой мыслить мало кто может! ПОЕТОму в етой теме тока модеры между собой общаются те- кто стремится.. а все остальные заглядывают сюда в надежде получить халяву на смену шифрации...
да еёе не будет даже когда мы вслух алгоритм озвучим.. рано или поздно... 1 фиг тот кто туг умом несможет весь етот математический бред под себя настроить..
но логику раскусите плиз!!!!! скажите какие логи нужны! я дам!
мне нужен закон по которому КЛЮЧ МЕНЯЕТСЯ!

VORON
28.12.2007, 05:16
<<SKIP>>
но логику раскусите плиз!!!!! скажите какие логи нужны! я дам!
мне нужен закон по которому КЛЮЧ МЕНЯЕТСЯ!
столько накатал, а смысла нет. Тебе не математик нужен а реверсер.


зачем ты ето написал в етот топ??

QaK
28.12.2007, 09:06
скажите какие логи нужны! я дам!
давай попробуем отследить, для начала, когда второй байт ксора с 6D меняется на 6C.Сделай лог сидя юзая рапид шот, чтобы 2 раза был переход с 6D на 6C(хотя там неверно еще ValidatePosition вылезет, но все равно попробуй).

Йоптвоюмать!!! Гмм что-то все-таки вырисовывается =) взял свою разборку(которая подлиннее), решил проверить, как меняются первые 2 байта ксора, интересная весч получилась:

18-F2 0000 3EE3 5487
>69-6D 0000 1E-DC 0000 28009
71-9F 0000 203F 5487 +12
>75-6D 0000 7D-B1 0000 28021
04-F2 0000 5D8E 5487 +26
>99-6D 0000 1E-DC 0000 28057
9D-9F 0000 4352 5487 -44
>6D-6D 0000 7D-B1 0000 28013
F0-F2 0000 3EE3 5487 +12
>79-6D 0000 1E-DC 0000 28025
89-9F 0000 203F 5487 -36
>55-6D 0000 7D-B1 0000 27989
DC-F2 0000 5D8E 5487 +20
>69-6D 0000 1E-DC 0000 28009
B5-9F 0000 4352 5487 +20
>7D-6D 0000 7D-B1 0000 28029
C8-F2 0000 3EE3 5487 -20
>69-6D 0000 1E-DC 0000 28009
A1-9F 0000 203F 5487 -84
>15-6D 0000 7D-B1 0000 27925
B4-F2 0000 5D8E 5487 +100
>79-6D 0000 1E-DC 0000 28025
CD-9F 0000 4352 5487 -12
>6D-6D 0000 7D-B1 0000 28013
A0-F2 0000 3EE3 5487 -20
>59-6D 0000 1E-DC 0000 27993
F9-9F 0000 203F 5487 +28
>75-6D 0000 7D-B1 0000 28021
8C-F2 0000 5D8E 5487 -12
>69-6D 0000 1E-DC 0000 28009
E5-9F 0000 4352 5487 -204
>9D-6C 0000 7D-B1 0000 27805
78-F3 0000 3EE3 5487 +204
>69-6D 0000 1E-DC 0000 28009
11-9E 0000 203F 5487 +12
>75-6D 0000 7D-B1 0000 28021
64-F3 0000 5D8E 5487 -28
>59-6D 0000 1E-DC 0000 27993
3D-9E 0000 4352 5487 +20
>6D-6D 0000 7D-B1 0000 28013
50-F3 0000 3EE3 5487 +12
>79-6D 0000 1E-DC 0000 28025
29-9E 0000 203F 5487 -100
>15-6D 0000 7D-B1 0000 27925
3C-F3 0000 5D8E 5487 +84
>69-6D 0000 1E-DC 0000 28009
55-9E 0000 4352 5487 +20
>7D-6D 0000 7D-B1 0000 28029
28-F3 0000 3EE3 5487 -20
>69-6D 0000 1E-DC 0000 28009
41-9E 0000 203F 5487 -20
>55-6D 0000 7D-B1 0000 27989
14-F3 0000 5D8E 5487

так вот, > обозначен ксор ключа,правый столбик - ХексТуИнт первых 2х байтов ксора,числа со знаком - разница между 2мя десятичными значениями. А теперь фишка: там где 2й байт меняется с 6D на 6C там происходит смена знака и дальше цифры(+\-) идут как зеркальное отображение предыдущего ряда:
до 6C:
(начало лога)+12+26-44+12-36(вот отсюда внимание) ---->
-------------> +20+20-20-84+100-12-20+28-12+204 -------->
(здесь 6С)
(конец лога)-20-20+20+84-100+12+20-28+12-204 <-------
воть такие пирожки с котятами, то есть 6C - это типа смена знака функции на противоположный ... что еще больше говорит в пользу того, что нужен лог с 2мя переходами на 6C. Видимо, когда значение функции переваливает за определенное число (ПРИМЕРНО 200) то приходится менять знак на противоположный и юзать обратную функцию, типа того. Пока все.

Идем дальше, решил взять первый лог(покороче который):

A1-4F 0000 1C-5A 5487
>75-6D 0000 0D-1D 0000 28021
D4-22 0000 11-47 5487 -28
>59-6D 0000 6E-70 0000 27993
8D-4F 0000 7F-37 5487 +20
>6D-6D 0000 0D-1D 0000 28013
E0-22 0000 72-2A 5487 +12
>79-6D 0000 6E-70 0000 28025
99-4F 0000 1C-5A 5487 +28
>95-6C 0000 0D-1D 0000 28053
0C-23 0000 11-47 5487 -44
>69-6D 0000 6E-70 0000 28009
65-4E 0000 7F-37 5487 +20
>7D-6D 0000 0D-1D 0000 28029
18-23 0000 72-2A 5487 -20
>69-6D 0000 6E-70 0000 28009
71-4E 0000 1C-5A 5487 -20
>55-6D 0000 0D-1D 0000 27989
24-23 0000 11-47 5487 +36
>79-6D 0000 6E-70 0000 28025
5D-4E 0000 7F-37 5487

================================================== =======| (тут 6С)
Последовательность:===================(конец)+36-20-20+20-44+28+12+20-28(начало)
походит на часть предыдущей цепочкми:(конец лога)-20-20+20+84-100+12+20-28+12-204 <-------
куски похожи, но где 6С проскакивает 2 числа поменялись +84 на -44 и -100 на +28, значит 6С не обязательно изменяет знак последовательности, а фиг знает что и для чего, хотя раз последовательность походит, можно говорить о том, что используется, одна, конкретная функция всегда.

Хмм еще мысля, посмотрел на логи, примерно понял,что когда в цепочке (+\-) в результате сложения\вычитания второй байт меняется на 6С, то след раз мы берем число не из цепочки, а уравниваем так, чтобы след 2й байт был 6D.Но цепочка все равно постоянная, полюбому, VORON давай баааальшой кусочище лога с 2мя "переходами 6С" ща мы его :x

Хотя не, фигня в последнем абзаце, сначала мы берем число не из цепочки, прибавляем, получаем 6С, потом уравниваем опять до 6D, а вот когда мы это делаем, хз, надо понять...

В общем еще одна мысля есть, как определить зависимость от размера пакета, если таковая есть, пакет Say, сказать в общий чат n'ое количество одинаковых символов, и смотреть как изменяется шифрация, но , я думаю, это уже после того, как сам алгоритм поймем.

З.Ы. Пост дописываю в течении дня, поэтому возможно некоторое смысловое рассогласование :pardon: .

VORON
28.12.2007, 14:50
я думаю так.. что раз KEY2:=KEY1 xor F(d) , то F(d)- должна быть константа для одного итогоже D .. когда мы мониторим 10-ти байтовый пакет то для одного ит тогоже D=10 мы получем разный F(D)=6D,6C .. что противоречит определению функции.. ибо функция должна иметь одно единственное значение для одного значения аргумента.. в связи с чем хочется увидить общий вид того что мы ищем то?? KEY2:=KEY1 xor F(d) - некатит.. а что ж тогда?

QaK
28.12.2007, 17:24
Цепочку с 2мя 6С в студию, надо сначала определиться, циклично ли там все идет, потом напрягу друзей-математиков, они мб выведут функцию.

VORON
29.12.2007, 02:05
QAK , в том то и дело что нужно определиться что нам выводить то?? KEy2:=KEY1 xor F(d) - некатит... потомучто F(d) - должна быть константа для одного и тогоже аргумента... что нам искать то ваще??? общий вид формулы каков??? я думал раньше мы ищем f(d) но ето сам видиш- не так... ибо при одном и томже D F(d) разный выходит...

Добавлено спустя 7 часов 21 минуту 57 секунд:
выкладываю ЛОГ переговора в АСИ с ХКОРОМ! возможно ето поможет нам !
0:08:00: Ktif ye rfr ltkf&
0:08:08: Леша ну как дела?
0:08:19: впринципе готово)
0:08:22: всмысле прога)
0:08:39: но она пока не в очень удобной форме пакеты отображает...
0:09:44: а для моего случая ее применить можно? я не верю.. прога заранее алгоритм имеет у в кажой ситуации алгоритм свой.. я на 90% уверен что ета прога ничего не сделает для моего случая
0:10:15: тут алгоритм пишеш сам)
0:10:19: давай ее протестим для моего случая
0:10:26: давай...
0:10:29: хм
0:10:30: счас кину
0:10:35: давай
0:11:21: блин мне пишут твой клиент неподдерживает передачу...
0:11:43: makssys@inbox.ru (mailto:makssys@inbox.ru)
0:12:15: ftp://xkor.homeip.net/files/l2pdx.rar
0:12:48: пошло
0:14:08: пока качается расскажи как ей пользоваться?
0:14:38: слева пишеш пакеты для дешифровки по порядку, по одному пакету на строчку
0:14:56: внизу алгоритм дешифровки на паскале, и нажимаеш дешифровать
0:15:23: по умолчанию там стандартный алгоритм..
0:15:40: ету прогу в какой момент запускать?
0:15:53: сначала пакетхак или ее?
0:15:59: в момент когда захочеш её пользоваться)
0:16:18: она ничего не перехватывает)
0:16:28: когда уже трафик идет по полной ее можно включить и увидеть трафик?
0:16:28: ты сам в неё всё что надо записываеш)
0:16:45: ты сам в неё трафик пишеш)
0:16:55: а...
0:17:23: т.е. в нее я дам готовый лог!...
0:17:36: угу
0:17:42: но ток одного направления
0:18:03: и ключик начальный сам задаёш
0:18:22: так что пакеты в неё пишеш начиная с первого зашифрованного
0:20:39: леша а нафига прога ваще??? я магу разбирать ключ и експерементировать с ним с помощю самого паетхака отправив пакет на ЮЗ СКИЛ!.. и скриптом с к лючом всё что хачу то и делаю... нафига ваще ета отдельная прога?
0:21:10: тут сам пакеты задаёш...
0:21:21: для нормального исследования она лучше...
0:23:21: хм.. ну я попробую ее на логах выложенных в топе протестить!.. но хз чем она может помоч??? ведь нам надо узнать алгоритм.. монитоить изменение ключа я и без етой проги магу
0:23:52: ну а в ней надо строить алгоритм)
0:24:03: с моментально опробывать)
0:25:41: леша.. я вот к чему склоняюсь подскажи плиз..
0:28:21: при долгом мониторинге одного и тогоже пакета длинной 10 байтов ксор второго байта ключа прыгает с 6D на 6C .. ето означает что функция в формуле KEY2:=KEY1 xor F(d) , где D - длинна пакета - имеет разные значения для одного и тогоже D ( аргумента)... в етом то и проблема
0:28:53: насамом деле вс проще)
0:30:19: просто ключ инкрементиться на длинну пакета, поэтому при длинне пакета 10, каждые 25-26 пакетов будет на единицу меняться и второй байт а из за этого будет меняться его ксор)
0:32:39: леша .. что такое инкремент?? ето знак + сложить???
0:38:46: ты меня не понял... второй байт в ключе получается из 2-го байта в предыдущем ключе путем ксора на 6D .!! почти всегда.. но очень редко становится на 1 раз 6C и потом снова 6D... каков общий вид формулы без противоречий определению.. ?? F(d) - должно иметь всегда тока 1 значение для 1-го аргумента... а мы имеем 2 значения для одного аргумента..
0:39:58: очень редко это раз из 25ти или 26 случаев!
0:40:11: и я тя прекрасно понял!
0:40:27: в отличии от твоего понимания меня и шифрации...
0:42:22: леша я тя понял что 1 раз из 25-26 пакетов длинной 10 байтов.. но что мы ищем то??? я придумал формулу key2:=ke1 xor 6d для второго байта.. но она не всегда верна... а каков общий вид того что мы ищем???
0:43:21: чем то похож на то что по умолчанию в проге...
0:43:23: на что ксорить надо первый ключ чтобы получить второй? в общем виде.. с исползованием f(x)
0:44:02: а(в)
0:44:07: f(d)*
0:46:02: чтобы находить функцию... а не бред какойто... потомучто мы видим четко что для второго байта ксор на 6D идет... но не всегда.. 1 раз 6С поетому формула KEY2:=KEY1 xor F(d)- некатит!
0:47:13: зато катит KEY2:=(KEY1+x) xor F(d)
0:48:09: где x это длинна пакета или величина производная от этой длинны
0:49:00: key2:= (KEY1+f1(d)) xor f2(d)
0:49:13: )
0:50:16: нужно найти функции f1 и f2
0:50:24: таак я понимаю?
0:50:29: угу
0:51:20: во падлы бля.. руки им оторвать за такой алгоритм...
0:51:48: они 100 % ночами не спали думали как юзерам жизнь усложнить
0:51:57: )
0:53:37: леша можно я кусок нашей переговора в топ выложу ? КЮАК интерисуется работать не может толком.. ищет тожэ закономерности...
0:54:00: ок...
0:54:10: общий вид формулы выложу в топ? можно? с твоими фразами..
0:54:15: ок

Добавлено спустя 8 минут 32 секунды:
теперь мы поверим ХКОРУ.. и будем думать как найти Ф1 и Ф2 от значения Д.. чтобы заработало KEY2:=(KEY1+F1(d)) xor F2(d)...

dmitry501
29.12.2007, 03:48
Лучше бы прогу выложили. С исходниками....

=@

VORON
29.12.2007, 05:09
Лучше бы прогу выложили. С исходниками....

=@
зачем ты ето тут написал?

QaK
29.12.2007, 10:24
Лучше бы прогу выложили. С исходниками....
Димко ты б лучше посоветовал что-нить.

Добавлено спустя 27 минут 24 секунды:
что такое инкремент
Инкремент - увеличение, плусадын например =)
Декремент - уменьшение,минусадын =)

Добавлено спустя 6 минут 39 секунд:
VORON, слушай выложи все-таки лог подлинее с юзскилл(желательно тот же рапидшот) сидя в безлюдном месте.

Добавлено спустя 1 час 24 минуты 30 секунд:
QAK , в том то и дело что нужно определиться что нам выводить то??
Нам нужно вывести функцияю, зависящую от предыдущего значения ключа ксора и размера пакета
Обобщенно:
Key2=F(Key1,d);
F может быть и (KEY1+f1(d)) xor f2(d), а может быть еще какая-то. Не помню по какому предмету проходили вывод функции по заданным точкам, так вот там чем больше значений - тем точнее получается вывести формулу, поэтому заклинаю тебя, выложи плз еще длиннющий лог подобный предыдущим.

VORON
29.12.2007, 12:33
будет сделано

QaK
29.12.2007, 12:53
Решил еще раз разобрать цепочки, взял первые 2 байта и ХексТуИнт их

18-F2 0000 3EE3 5487======================61976==================-20
71-9F 0000 203F 5487======================40817==+44============== ===
04-F2 0000 5D8E 5487======================61956==================+ 236
9D-9F 0000 4352 5487======================40861==-20=================
F0-F2 0000 3EE3 5487======================62192===================-20
89-9F 0000 203F 5487======================40841==+44============== ===
DC-F2 0000 5D8E 5487======================62172===================-20
B5-9F 0000 4352 5487======================40885==-20=================
C8-F2 0000 3EE3 5487======================62152===================-20
A1-9F 0000 203F 5487======================40865==+44============== ===
B4-F2 0000 5D8E 5487======================62132===================-20
CD-9F 0000 4352 5487======================40909==+44============== ===
A0-F2 0000 3EE3 5487======================62112===================-20
F9-9F 0000 203F 5487======================40953==-20=================
8C-F2 0000 5D8E 5487======================62092==================+ 236
E5-9F 0000 4352 5487======================40933==-468================
78-F3 0000 3EE3 5487======================62328===================-20
11-9E 0000 203F 5487======================40465==+44============== ===
64-F3 0000 5D8E 5487======================62308===================-20
3D-9E 0000 4352 5487======================40509==-20=================
50-F3 0000 3EE3 5487======================62288===================-20
29-9E 0000 203F 5487======================40489==+44============== ===
3C-F3 0000 5D8E 5487======================62268===================-20
55-9E 0000 4352 5487======================40533==-20=================
28-F3 0000 3EE3 5487======================62248===================-20
41-9E 0000 203F 5487======================40513
14-F3 0000 5D8E 5487======================62228


получается так, что сначала идет одно число, потом другое, потом первое, чуть измененное, потом второе чуть измененное, числа со знаками показывают насколько изменится число(через одну строку), как видим тож меняются в определенной последовательности, но при 6C берется какое-то левое(не из последовательности) число, и дальше в том же духе.

Добавлено спустя 4 минуты 26 секунд:
Первая цепочка:

A1-4F 0000 1C-5A 5487=====================20385=-20================
D4-22 0000 11-47 5487=====================8916==================+12
8D-4F 0000 7F-37 5487=====================20365=+12================
E0-22 0000 72-2A 5487=====================8928==================+44
99-4F 0000 1C-5A 5487=====================20377=-8=================
0C-23 0000 11-47 5487=====================8972==================+12
65-4E 0000 7F-37 5487=====================20069=+12================
18-23 0000 72-2A 5487=====================8984==================+12
71-4E 0000 1C-5A 5487=====================20081=-20================
24-23 0000 11-47 5487=====================8996
5D-4E 0000 7F-37 5487=====================20061

VORON
29.12.2007, 12:55
QAK, ща лог дам но вот про вывод формулы математическими средствами- я тожэ проходил- и склоняюсь к тому что ето бред ваще.. невозможно !!! и никогда нельзя вывести алгоритм вывода формулы! его можно лиш интуативно понять без алгоритма.. несуществует и не будет таково алгоритма для вывода формулы по заданным точкам... ибо задача в етом случае- найти не значения переменых а функции (синус, косинус, + - * / тангенс катангенс) что впринципе равносильно тому что с помощью лопаты сделать новую лопату.. с помощью набора математических действий можно вычислить значения какието- но не сами математические действия.. Простой пример: как вывести формулу синуса по точкам??? незная ваще об синусе неграмма... ну вот непридумали его ваще на етот период например времени.. а точки вот даны... задача получить- SIN(x) но ету функцию никто незнает... новая она... недавно изобрели ее... да ни как..
ща лог дам сек..

QaK
29.12.2007, 12:59
как вывести формулу синуса по точкам
Синус - функция периодическая, при достаточном количестве точек можно догадаться об ее периодичности, и исдоя из этого вывести формулу.

VORON
29.12.2007, 13:25
ЛОГ.. тока я его прям непосредственно из пакетхака выдрал первые 11 байтов- заголовок пакета.. их нам ваще ненужно смотреть.. пекетхак видит и мониторит то что после 11-ти первых байтов...
например: 03B2C9A5A24F6FE03F030025 - пакехак видит тока 25- что соответствует ЕКШН ФЕЙЛД.. всё что нижэ разрядом- заголовок пакета.. ненужно на его смотреть ваще.. далее я думаю понятно где тут входящий а где исходящий трафик.. там где длинна пакета 10 байтов- ето исходящий трафик- ЮЗ СКИЛ.. а 25 и ШОУ МЕСАДЖ- входящие вкрапления..
04C9231B49476FE03F0C00DE0D000015A15587F16E
037FA13391496FE03F0B00641F0000DE35558700
03B2C9A5A24F6FE03F030025
04CCDD5EAB526FE03F0C00C76000003F455587E803
04A71C6BCF536FE03F0C00AA0D000076CC5587856E
04A71C6BCF536FE03F0C00D36000005C285587FC03
040BB30B90546FE03F0C00860D000015A15587A96E
03815B77F3546FE03F0B00641F0000DF35558700
04E6F117B4556FE03F0C00EF6000003F455587C003
044A88B874566FE03F0C00920D000076CC5587BD6E
03C03024D8566FE03F030025
0425C7C498576FE03F0C00FB6000005C285587D403
048A5D6559586FE03F0C006E0C000015A15587416F
04649C717D596FE03F0C00176100003F4555873802
04C932123E5A6FE03F0C007A0C000076CC5587556F
04A3711E625B6FE03F0C00236100005C2855870C02
048FC2F5285C6FE03F0C00560C000015A15587796F
04E346CB465D6FE03F0C003F6100003F4555871002
0359EF36AA5D6FE03F0B00641F0000DE35558700
04CF97A20D5E6FE03F0C00220C000076CC55870D6F
04A9D6AE315F6FE03F0C004B6100005C2855876402
030E6D4FF25F6FE03F030025
040E6D4FF25F6FE03F0C003E0C000015A15587116F
04FC5A844F606FE03F0C00676100003F4555874802
04E8AB5B16616FE03F0C000A0C000076CC5587256F
04C3EA673A626FE03F0C00736100005C2855875C02
04288108FB626FE03F0C00E60C000015A15587C96F
048C17A9BB636FE03F0C008F6100003F455587A002
046756B5DF646FE03F0C00F20C000076CC5587DD6F
04CBEC55A0656FE03F0C009B6100005C285587B402
04A62B62C4666FE03F0C00CE0C000015A15587E16F
040BC20285676FE03F0C00B76100003F4555879802
03E5000FA9686FE03F0B00641F0000DF35558700
04E5000FA9686FE03F0C00DA0C000076CC5587F56F
044A97AF69696FE03F0C00C36100005C285587EC02
0424D6BB8D6A6FE03F0C00B60C000015A15587996F
0324D6BB8D6A6FE03F030025
04102793546B6FE03F0C00DF6100003F455587F002
04FF14C8B16B6FE03F0C00820C000076CC5587AD6F
0464AB68726C6FE03F0C00EB6100005C285587C402
043EEA74966D6FE03F0C009E0C000015A15587B16F
042A3B4C5D6E6FE03F0C00076600003F4555872805
047DBF217B6F6FE03F0C006A0B000076CC55874568
046910F941706FE03F0C00136600005C2855873C05
04444F0566716FE03F0C00460B000015A155876968
0497D3DA83726FE03F0C002F6600003F4555870005
0497D3DA83726FE03F0C00520B000076CC55877D68
030D7C46E7726FE03F0B00641F0000DE35558700
047212E7A7736FE03F0C003B6600005C2855871405
044C51F3CB746FE03F0C002E0B000015A155870168
03C2F95E2F756FE03F030025
04B1E7938C756FE03F0C00576600003F4555877805
048B26A0B0766FE03F0C003A0B000076CC55871568
048B26A0B0766FE03F0C00636600005C2855874C05
046665ACD4776FE03F0C00160B000015A155873968
0441A4B8F8786FE03F0C007F6600003F4555875005
04A53A59B9796FE03F0C00E20B000076CC5587CD68
04807965DD7A6FE03F0C008B6600005C285587A405
03807965DD7A6FE03F0B00641F0000DF35558700
04E40F069E7B6FE03F0C00FE0B000015A15587D168
04BF4E12C27C6FE03F0C00A76600003F4555878805
0335F77D257D6FE03F030025
049A8D1EE67D6FE03F0C00CA0B000076CC5587E568
049A8D1EE67D6FE03F0C00B36600005C2855879C05
0474CC2A0A7F6FE03F0C00A60B000015A155878968
044F0B372E806FE03F0C00CF6600003F455587E005
04B3A1D7EE806FE03F0C00B20B000076CC55879D68
048EE0E312826FE03F0C00DB6600005C285587F405
04F37684D3826FE03F0C008E0B000015A15587A168
04691FF036836FE03F0C00F76600003F455587D805
04CDB590F7836FE03F0C009A0B000076CC5587B568
04A8F49C1B856FE03F0C00036700005C2855872C04
030C8B3DDC856FE03F0B00641F0000DE35558700
048233A93F866FE03F0C00760A000015A155875969
04E7C94900876FE03F0C001F6700003F4555873004
03C2085624886FE03F030025
04C2085624886FE03F0C00420A000076CC55876D69
049C476248896FE03F0C002B6700005C2855870404
049C476248896FE03F0C005E0A000015A155877169
0477866E6C8A6FE03F0C00476700003F4555876804
0451C57A908B6FE03F0C002A0A000076CC55870569
042C0487B48C6FE03F0C00536700005C2855877C04
042C0487B48C6FE03F0C00060A000015A155872969
047F885CD28D6FE03F0C006F6700003F4555874004
046BD933998E6FE03F0C00120A000076CC55873D69
04461840BD8F6FE03F0C007B6700005C2855875404
03AAAEE07D906FE03F0B00641F0000DF35558700
04999C15DB906FE03F0C00EE0A000015A15587C169
0485EDECA1916FE03F0C00976700003F455587B804
03EA838D62926FE03F030025
04602CF9C5926FE03F0C00FA0A000076CC5587D569
044E1A2E23936FE03F0C00A36700005C2855878C04
04B3B0CEE3936FE03F0C00D60A000015A15587F969
048DEFDA07956FE03F0C00BF6700003F4555879004
047940B2CE956FE03F0C00A20A000076CC55878D69
04CDC487EC966FE03F0C00CB6700005C285587E404
04A7039410986FE03F0C00BE0A000015A155879169
031DACFF73986FE03F0B00641F0000DE35558700
0493546BD7986FE03F0C00E76700003F455587C804
048242A034996FE03F0C008A0A000076CC5587A569
045C81AC589A6FE03F0C00F36700005C285587DC04
035C81AC589A6FE03F030025
04C1174D199B6FE03F0C006609000015A15587496A
049C56593D9C6FE03F0C000F6400003F4555872007
04769565619D6FE03F0C007209000076CC55875D6A
04769565619D6FE03F0C001B6400005C2855873407
0451D471859E6FE03F0C004E09000015A15587616A
04B56A12469F6FE03F0C00376400003F4555871807
0490A91E6AA06FE03F0C005A09000076CC5587756A
046BE82A8EA16FE03F0C00436400005C2855876C07
04CF7ECB4EA26FE03F0C003609000015A15587196A
0334156C0FA36FE03F0B00641F0000DF35558700
04AABDD772A36FE03F0C005F6400003F4555877007
04206643D6A36FE03F0C000209000076CC55872D6A
0484FCE396A46FE03F0C006B6400005C2855874407
03FAA44FFAA46FE03F030025
045F3BF0BAA56FE03F0C001E09000015A15587316A
043A7AFCDEA66FE03F0C00876400003F455587A807
049E109D9FA76FE03F0C00EA09000076CC5587C56A
04794FA9C3A86FE03F0C00936400005C285587BC07
04794FA9C3A86FE03F0C00C609000015A15587E96A
04538EB5E7A96FE03F0C00AF6400003F4555878007
042ECDC10BAB6FE03F0C00D209000076CC5587FD6A
04926362CCAB6FE03F0C00BB6400005C2855879407
046DA26EF0AC6FE03F0C00AE09000015A15587816A
03D2380FB1AD6FE03F0B00641F0000DE35558700
0436CFAF71AE6FE03F0C00D76400003F455587F807
049B655032AF6FE03F0C00BA09000076CC5587956A
03110EBC95AF6FE03F030025
0475A45C56B06FE03F0C00E36400005C285587CC07
0450E3687AB16FE03F0C009609000015A15587B96A
0450E3687AB16FE03F0C00FF6400003F455587D007
042B22759EB26FE03F0C006208000076CC55874D6B
048FB8155FB36FE03F0C000B6500005C2855872406
046AF72183B46FE03F0C007E08000015A15587516B
04CE8DC243B56FE03F0C00276500003F4555870806
0344362EA7B56FE03F0B00641F0000DF35558700
04A9CCCE67B66FE03F0C004A08000076CC5587656B
04840BDB8BB76FE03F0C00336500005C2855871C06
03840BDB8BB76FE03F030025
045E4AE7AFB86FE03F0C002608000015A15587096B
045E4AE7AFB86FE03F0C004F6500003F4555876006
043989F3D3B96FE03F0C003208000076CC55871D6B
049D1F9494BA6FE03F0C005B6500005C2855877406
04785EA0B8BB6FE03F0C000E08000015A15587216B
04539DACDCBC6FE03F0C00776500003F4555875806
042DDCB800BE6FE03F0C001A08000076CC5587356B
04081BC524BF6FE03F0C00836500005C285587AC06
046CB165E5BF6FE03F0C00F608000015A15587D96B
03E259D148C06FE03F0B00641F0000DE35558700
0447F07109C16FE03F0C009F6500003F455587B006
04222F7E2DC26FE03F0C00C208000076CC5587ED6B
03222F7E2DC26FE03F030025
0486C51EEEC26FE03F0C00AB6500005C2855878406
0461042B12C46FE03F0C00DE08000015A15587F16B
043B433736C56FE03F0C00C76500003F455587E806
04A0D9D7F6C56FE03F0C00AA08000076CC5587856B
047B18E41AC76FE03F0C00D36500005C285587FC06
04DFAE84DBC76FE03F0C008608000015A15587A96B
04BAED90FFC86FE03F0C00EF6500003F455587C006
04942C9D23CA6FE03F0C009208000076CC5587BD6B
04942C9D23CA6FE03F0C00FB6500005C285587D406
03F9C23DE4CA6FE03F0B00641F0000DF35558700
046F6BA947CB6FE03F0C006E17000015A155874174
044AAAB56BCC6FE03F0C00177A00003F4555873819
03AE40562CCD6FE03F030025
04AE40562CCD6FE03F0C007A17000076CC55875574
04897F6250CE6FE03F0C00237A00005C2855870C19
0463BE6E74CF6FE03F0C005617000015A155877974
0463BE6E74CF6FE03F0C003F7A00003F4555871019
04B7424492D06FE03F0C002217000076CC55870D74
04A3931B59D16FE03F0C004B7A00005C2855876419
047DD2277DD26FE03F0C003E17000015A155871174
0397E6E085D56FE03F0B00641F0000DE35558700
035566E733DB6FE03F030025

QaK
29.12.2007, 13:47
Такс щас сюда буду потихоньку постить
1)Удалил первые 11 байт и вкрапления
2)Выделил ключи.
3)Разбил на группы
4)для первых 2х байт с пометкой > ксор, в собочках десятеричное значение ксора.

F16E 0000 15A1 5587 28401
>19 6D (27929)
E803 0000 3F45 5587 1000
>6D 6D (28013)
856E 0000 76CC 5587 28293
>79 6D (28025)
FC03 0000 5C28 5587 1020
>55 6D (27989)
A96E 0000 15A1 5587 28329
>69 6D (28009)
C003 0000 3F45 5587 960
>7D 6D (28029)
BD6E 0000 76CC 5587 28349
>69 6D (28009)
D403 0000 5C28 5587 980
>95 6C (27797)
416F 0000 15A1 5587 28481
>79 6D (28025)
3802 0000 3F45 5587 568
>6D 6D (28013)
556F 0000 76CC 5587 28501
>59 6D (27993)
0C02 0000 5C28 5587 524
>75 6D (28021)
796F 0000 15A1 5587 28537
>69 6D (28009)
1002 0000 3F45 5587 528
>1D 6D (27933)
0D6F 0000 76CC 5587 28429
>69 6D (28009)
6402 0000 5C28 5587 612
>75 6D (28021)
116F 0000 15A1 5587 28433
>59 6D (27993)
4802 0000 3F45 5587 584
>6D 6D (28013)
256F 0000 76CC 5587 28453
>79 6D (28025)
5C02 0000 5C28 5587 604
>95 6D (28053)
C96F 0000 15A1 5587 28617
>69 6D (28009)
A002 0000 3F45 5587 672
>7D 6D (28029)
DD6F 0000 76CC 5587 28637
>69 6D (28009)
B402 0000 5C28 5587 692
>55 6D (27989)
E16F 0000 15A1 5587 28641
>79 6D (28025)
9802 0000 3F45 5587 664
>6D 6D (28013)
F56F 0000 76CC 5587 28661
>19 6D (27929)
EC02 0000 5C28 5587 748
>75 6D (28021)
996F 0000 15A1 5587 28569
>69 6D (28009)
F002 0000 3F45 5587 752
>5D 6D (27997)
AD6F 0000 76CC 5587 28589
>69 6D (28009)
C402 0000 5C28 5587 708
>75 6D (28021)
B16F 0000 15A1 5587 28593
>99 6A (27289)
2805 0000 3F45 5587 1320
>6D 6D (28013)
4568 0000 76CC 5587 26693
>79 6D (28025)
3C05 0000 5C28 5587 1340
>55 6D (27989)
6968 0000 15A1 5587 26729
>69 6D (28009)
0005 0000 3F45 5587 1280
>7D 6D (28029)
7D68 0000 76CC 5587 26749
>69 6D (28009)
1405 0000 5C28 5587 1300
>15 6D (27925)
0168 0000 15A1 5587 26625
>79 6D (28025)
7805 0000 3F45 5587 1400
>6D 6D (28013)
1568 0000 76CC 5587 26645
>59 6D (27993)
4C05 0000 5C28 5587 1356
>75 6D (28021)
3968 0000 15A1 5587 26681
>69 6D (28009)
5005 0000 3F45 5587 1360
>9D 6D (28061)
CD68 0000 76CC 5587 26829
>69 6D (28009)
A405 0000 5C28 5587 1444
>75 6D (28021)
D168 0000 15A1 5587 26833
>59 6D (27993)
8805 0000 3F45 5587 1416
>6D 6D (28013)
E568 0000 76CC 5587 26853
>79 6D (28025)
9C05 0000 5C28 5587 1436
>15 6D (27925)
8968 0000 15A1 5587 26761
>69 6D (28009)
E005 0000 3F45 5587 1504
>7D 6D (28029)
9D68 0000 76CC 5587 26781
>69 6D (28009)
F405 0000 5C28 5587 1524
>55 6D (27989)
A168 0000 15A1 5587 26785
>79 6D (28025)
D805 0000 3F45 5587 1496
>6D 6D (28013)
B568 0000 76CC 5587 26805
>99 6C (27801)
2C04 0000 5C28 5587 1068
>75 6D (28021)
5969 0000 15A1 5587 26969
>69 6D (28009)
3004 0000 3F45 5587 1072
>5D 6D (27997)
6D69 0000 76CC 5587 26989
>69 6D (28009)
0404 0000 5C28 5587 1028
>75 6D (28021)
7169 0000 15A1 5587 26993
>19 6D (27929)
6804 0000 3F45 5587 1128
>6D 6D (28013)
0569 0000 76CC 5587 26885
>79 6D (28025)
7C04 0000 5C28 5587 1148
>55 6D (27989)
2969 0000 15A1 5587 26921
>69 6D (28009)
4004 0000 3F45 5587 1088
>7D 6D (28029)
3D69 0000 76CC 5587 26941
>69 6D (28009)
5404 0000 5C28 5587 1108
>95 6D (28053)
C169 0000 15A1 5587 27073
>79 6D (28025)
B804 0000 3F45 5587 1208
>6D 6D (28013)
D569 0000 76CC 5587 27093
>59 6D (27993)
8C04 0000 5C28 5587 1164
>75 6D (28021)
F969 0000 15A1 5587 27129
>69 6D (28009)
9004 0000 3F45 5587 1168
>1D 6D (27933)
8D69 0000 76CC 5587 27021
>69 6D (28009)
E404 0000 5C28 5587 1252
>75 6D (28021)
9169 0000 15A1 5587 27025
>59 6D (27993)
C804 0000 3F45 5587 1224
>6D 6D (28013)
A569 0000 76CC 5587 27045
>79 6D (28025)
DC04 0000 5C28 5587 1244
>95 6E (28309)
496A 0000 15A1 5587 27209
>69 6D (28009)
2007 0000 3F45 5587 1824
>7D 6D (28029)
5D6A 0000 76CC 5587 27229
>69 6D (28009)
3407 0000 5C28 5587 1844
>55 6D (27989)
616A 0000 15A1 5587 27233
>79 6D (28025)
1807 0000 3F45 5587 1816
>6D 6D (28013)
756A 0000 76CC 5587 27253
>19 6D (27929)
6C07 0000 5C28 5587 1900
>75 6D (28021)
196A 0000 15A1 5587 27161
>69 6D (28009)
7007 0000 3F45 5587 1904
>5D 6D (27997)
2D6A 0000 76CC 5587 27181
>69 6D (28009)
4407 0000 5C28 5587 1860
>75 6D (28021)
316A 0000 15A1 5587 27185
>99 6D (28057)
A807 0000 3F45 5587 1960
>6D 6D (28013)
C56A 0000 76CC 5587 27333
>79 6D (28025)
BC07 0000 5C28 5587 1980
>55 6D (27989)
E96A 0000 15A1 5587 27369
>69 6D (28009)
8007 0000 3F45 5587 1920
>7D 6D (28029)
FD6A 0000 76CC 5587 27389
>69 6D (28009)
9407 0000 5C28 5587 1940
>15 6D (27925)
816A 0000 15A1 5587 27265
>79 6D (28025)
F807 0000 3F45 5587 2040
>6D 6D (28013)
956A 0000 76CC 5587 27285
>59 6D (27993)
CC07 0000 5C28 5587 1996
>59 6D (27993)
B96A 0000 15A1 5587 27321
>45 6D (27973)
D007 0000 3F45 5587 2000
>9D 6C (27805)
4D6B 0000 76CC 5587 27469
>69 6D (28009)
2406 0000 5C28 5587 1572
>75 6D (28021)
516B 0000 15A1 5587 27473
>59 6D (27993)
0806 0000 3F45 5587 1544
>6D 6D (28013)
656B 0000 76CC 5587 27493
>79 6D (28025)
1C06 0000 5C28 5587 1564
>15 6D (27925)
096B 0000 15A1 5587 27401
>69 6D (28009)
6006 0000 3F45 5587 1632
>7D 6D (28029)
1D6B 0000 76CC 5587 27421
>69 6D (28009)
7406 0000 5C28 5587 1652
>55 6D (27989)
216B 0000 15A1 5587 27425
>79 6D (28025)
5806 0000 3F45 5587 1624
>6D 6D (28013)
356B 0000 76CC 5587 27445
>99 6D (28057)
AC06 0000 5C28 5587 1708
>75 6D (28021)
D96B 0000 15A1 5587 27609
>69 6D (28009)
B006 0000 3F45 5587 1712
>5D 6D (27997)
ED6B 0000 76CC 5587 27629
>69 6D (28009)
8406 0000 5C28 5587 1668
>75 6D (28021)
F16B 0000 15A1 5587 27633
>19 6D (27929)
E806 0000 3F45 5587 1768
>6D 6D (28013)
856B 0000 76CC 5587 27525
>79 6D (28025)
FC06 0000 5C28 5587 1788
>55 6D (27989)
A96B 0000 15A1 5587 27561
>69 6D (28009)
C006 0000 3F45 5587 1728
>7D 6D (28029)
BD6B 0000 76CC 5587 27581
>69 6D (28009)
D406 0000 5C28 5587 1748
>95 72 (29333)
4174 0000 15A1 5587 29761
>79 6D (28025)
3819 0000 3F45 5587 6456
>6D 6D (28013)
5574 0000 76CC 5587 29781
>59 6D (27993)
0C19 0000 5C28 5587 6412
>75 6D (28021)
7974 0000 15A1 5587 29817
>69 6D (28009)
1019 0000 3F45 5587 6416
>41 6D (28009)
0D74 0000 76CC 5587 29709
>69 6D (28009)
6419 0000 5C28 5587 6500
>75 6D (28021)
1174 0000 15A1 5587 1174

VORON
29.12.2007, 14:46
СПАСИБО ТЕБЕ ЗА ТО ЧТО ТЫ МНЕ ПОМАГАЕШ- Я ДУМАЮ ЕСЛИ М РЕШИМ ЕТУ ЗАДАЧУ ТО МИЛИОН ЛАМЕРОВ ПОКОННИКОВ У ПРОГИ ПОЯВИТСЯ...

QaK
29.12.2007, 15:04
СПАСИБО ТЕБЕ ЗА ТО ЧТО ТЫ МНЕ ПОМАГАЕШ
:beer: :friends:
Да всегда пожалуйста =) Ну или почти всегда :D

VORON
29.12.2007, 15:18
КЮАК, я считаю так что есть какаято хрень которая накапливается... от пакета к пакету- копится... и рано или поздно ета хрень изменяет второй байт ключа- нарушает логику алгоритма.. без етой хрени всё было бы просто- ксорить предыдущий ключ на 6d и получим второй байт нового ключа... но так есть накопительная часть то... она когда накопится до 256 то перескакивает на 2-й байт... но потом почемуто возвращается назад... на 6D ... т.е. функция стремится к 6D ... (для второго байта)... я ето у КСКОРА спрашивал... он четко утверждает что инкремент ето обычный на длинну пакета... либо на ее производную.. он предположил что если пакеты 10 байтов то на 25 26 раз проскочит вместо 6D - 6C ... потомучто ета накопительная часть в формкле копится инкрементируется на длинну пакета... и 10*25= 250 т.е. через 25 пакетов 10 байтов следует ожидать скачек на 1 во втором байте... проверь ето! через скока пакетов 10 байтовых происходит смена ксора во втором байте ключа??? если через 25-26 пакетов то. вывод что key2:=(key1+F1(d)) xor f2(d) при етом если мы ето подтвердим, то верно решение: f1(d):= 1* d
т.е. четко инкремент на длинну пакета идет того что мы ксорим на какуюто хрень... на f2(d) ... провербь плиз через скока пакетов появляется ксор на 6С:?????? при условии что исходящие пакеты фиксированной длинны... 10 байтов..

Добавлено спустя 13 минут 10 секунд:
а ваще я считаю так что, решение задачи любой- начинается с момента правильноо определения .. нужно знать что ДАНО? и что найти?... вот ети 2 понятия - они самые главные... ДАНО и НАЙТИ... бывает такое что если в ДАНО- мало данных то при определенном НАЙТИ- задача имеет нескролько решений... нам вот ето не нужно совсем... хотя мы с етим сталкнулись предположив что key2:=key1 xor f(d)... вот формула ХКОРА вродебы подтверждается логами.. она учитывает накопительную часть... KEY2:=(KEY1+F1(D)) XOR F2(D)

QaK
29.12.2007, 16:14
В общем так, лог не до конца отшерстил, но появилась одна проблема и один проблеск.
Хкор был прав, ровно через 25 пакетов выскакивает 6C
Но в след раз выскакивает не 6С, а 6А, что, судя по всему, означает что был не инкремент, а декремент(ИМХО).Воть.
Сидю пока лог обрабатываю. ...

paraped
29.12.2007, 21:24
Во первых, очень интересная тема(прям дух захватывает))), qak спасибо за ссылочку... :wink:

Прочитал все, подумал ))), насамом деле помойму нада забить на то что ксор двух вторых байтов соседних ключей равен 6D, и иногда 6С. На мой взгляд это не причина, это следствие... Постараюсь объяснить чот я имею ввиду:

Давайте еще раз посмотрим на последовательность из поста QaK'a в котором он впервые предложил делать ксор соседних ключей, НО!!! что очень важно, на время забъем на сами рез-ты ксоров и попробуем взглянуть в другом направлении. У нас там была такая после-ть ключей:


18-F2 0000 3EE3 5487

71-9F 0000 203F 5487

04-F2 0000 5D8E 5487

9D-9F 0000 4352 5487

F0-F2 0000 3EE3 5487

89-9F 0000 203F 5487

DC-F2 0000 5D8E 5487

B5-9F 0000 4352 5487

C8-F2 0000 3EE3 5487

A1-9F 0000 203F 5487

B4-F2 0000 5D8E 5487

CD9F 0000 4352 5487

A0-F2 0000 3EE3 5487

F9-9F 0000 203F 5487

8C-F2 0000 5D8E 5487

E5-9F 0000 4352 5487

78-F3 0000 3EE3 5487

11-9E 0000 203F 5487

64-F3 0000 5D8E 5487

3D-9E 0000 4352 5487

50-F3 0000 3EE3 5487

29-9E 0000 203F 5487

3C-F3 0000 5D8E 5487

55-9E 0000 4352 5487

28-F3 0000 3EE3 5487

41-9E 0000 203F 5487

14-F3 0000 5D8E 5487


Приглядевшись можно заметь, что второй байт ключа постоянно чередуется кусками... Вот тут та и вся соль на мой взгляд!
Здесь не один ключ, а два!! используются они по очереди, изменяясь в соответсвии с какойто последовательностью.
Вспомним как нам говорили на физ-ре в школе... На 1-й, 2-й расчитайтесь.... 2-ые три шага вперед... Нада разделить эту последовательность на четные и нечетные члены... то есть в первый список записать 1-й 3-й 5-й 7-й 9-й и т.д. члены, а во второй 2-й 4-й 6-й 8-й 10-й и т.д.:

Нечетные

18-F2 0000 3EE3 5487

04-F2 0000 5D8E 5487

F0-F2 0000 3EE3 5487

DC-F2 0000 5D8E 5487

C8-F2 0000 3EE3 5487

B4-F2 0000 5D8E 5487

A0-F2 0000 3EE3 5487

8C-F2 0000 5D8E 5487

78-F3 0000 3EE3 5487

64-F3 0000 5D8E 5487

50-F3 0000 3EE3 5487

3C-F3 0000 5D8E 5487

28-F3 0000 3EE3 5487

14-F3 0000 5D8E 5487

Четные

71-9F 0000 203F 5487

9D-9F 0000 4352 5487

89-9F 0000 203F 5487

B5-9F 0000 4352 5487

A1-9F 0000 203F 5487

CD-9F 0000 4352 5487

F9-9F 0000 203F 5487

E5-9F 0000 4352 5487

11-9E 0000 203F 5487

3D-9E 0000 4352 5487

29-9E 0000 203F 5487

55-9E 0000 4352 5487

41-9E 0000 203F 5487


Теперь попробуем сделать только первый байт ХексТоИнт , ведь второй же изменяется гораздо реже, и вычислить значения на которые они изменяются(QaK если это верный путь, то ты бал близок, нада было только разделить последовательность на четные и нечетные члены(на два ключа другими словами)):

Вот что получается с нечетными:

18-F2 0000 3EE3 5487 24
-20
04-F2 0000 5D8E 5487 4
-20 (ведь максимальное значение байта в десятичном представлении 256)
F0-F2 0000 3EE3 5487 240
-20
DC-F2 0000 5D8E 5487 220
-20
C8-F2 0000 3EE3 5487 200
-20
B4-F2 0000 5D8E 5487 180
-20
A0-F2 0000 3EE3 5487 160
-20
8C-F2 0000 5D8E 5487 140
-20
78-F3 0000 3EE3 5487 120 (вот здесь второй байт инкрементируется на еденицу, об этом ниже)
-20
64-F3 0000 5D8E 5487 100
-20
50-F3 0000 3EE3 5487 80
-20
3C-F3 0000 5D8E 5487 60
-20
28-F3 0000 3EE3 5487 40
-20
14-F3 0000 5D8E 5487 20


Эххххх, если бы эта цепь была подлиннее можно было бы еще помозговать, а из этой видно лишь одно изменение второго байта "нечетного" ключа(если можно так выразится)...
Главный вопрос у меня,почему второй байт ключа изменился там где 140 переходит в 120, а не там где 4 переходит в 240 как бы "обнуляя" счетчик. И почему он вообще увеличился, ведь первый байт постоянно уменьшается на 20.

Если произвести те же манипуляции с последовательностью "четных" ключей (с вашего позваления ))), то картинка посложнее получается:

71-9F 0000 203F 5487 113
+44
9D-9F 0000 4352 5487 157
-20
89-9F 0000 203F 5487 137
+44
B5-9F 0000 4352 5487 181
-20
A1-9F 0000 203F 5487 161
+44
CD-9F 0000 4352 5487 205
+44
F9-9F 0000 203F 5487 249
-20
E5-9F 0000 4352 5487 229
+38 (????? вот это странно)
11-9E 0000 203F 5487 11 (9F -> 9E, то есть второй байт тут уменьшается на еденицу, не смотря на то что все изменения первого байта в конечном итоге носят характер прибавления. Но тут хотя бы по всей видимости второй байт меняется при обнулении первого)
+50 (???)
3D-9E 0000 4352 5487 61
-20
29-9E 0000 203F 5487 41
+44
55-9E 0000 4352 5487 85
-20
41-9E 0000 203F 5487 65


p.s. а ксор двух вторых байтов соседних ключей равен 6D, это факт... 6С он становится равен тогда, когда у одного из соседних ключей второй байт прибавляется на ед., а у второго еще не успел прибавится.....Опа... я понял почему у "нечетного" ключа второй байт прибавился на ед. при переходе первого с 140 на 120.... Потому что он сменился прям перед тем как сменился второй байт из "четного" ключа, который в свою очередь сменился в тот момент когда проскочил "0" своего первого байта.... ТАААКККССС...

то есть имеем такие свойства действия XOR:

9F xor F2 = 6D
F2 xor 9F = 6D

и если например программа видит что второй байт одного из ключей сменится сейчас на ед., она заблаговременно меняет второй байт второго ключа чтоб рез-тат действия xor оставался 6D, причем если один прибавился на единицу, то другой должен уменьшится для того чтоб рез-тат был 6D:

F2+1 = F3
F3 xor 9F = 6C
9F-1 = 9E
F3 xor 9E = 6D

В случае с 6А один из вторых байтов изменился с 02 на 05 (т.е. +3), поэтому рез-тат xor стал 6А.
Но второй байт другого ключа тут же изменился на сколько? првильно, на -3, и рез-тат опять стал 6D.))

p.s.s. Мне кажется нада забить на рез-таты ксоров, просто нада понимать что имеем дело с комбинацией двух чередующихся ключей которые между собой связаны рядом закономерностей...

(Сорри за такое большое сообщение)

Добавлено спустя 3 часа 52 минуты 19 секунд:
Ребят вы че молчите? Задумались чтоль? )) Отписывайтесь по теме плз..))

VORON
01.01.2008, 03:00
резет!-)) спать спать спать!... -)) голова много неумеет у меня думать.. утром ето всё обдумаю-)) 2 ключа-)).. разных-)) жэсть ваще-)).. но всё возможно!..

Добавлено спустя 1 день 21 час 11 минут 34 секунды:
Мне кажется что использвание 2-х ключей чередующихся - ето бред.. ключ он 1.. вывод что нечетные пакеты увеличиваются на +20 (14хекс) – неподтвердждается другими логами.. я бы оставил ету линию рассуждений ибо она не подтверждается другими логами для тогоже пакета тойже длинны..
Второй байт ключа получается из второго байта предыдущего ключа путёем ксора на 6D.. откуда ета 6D вылазит? Я срузу зранее сомневаюсь что ето константа.. и есть такое вот подозрение что ето не что иное как.. 6D:=A+63 , где А- длинна пакета, 63- второй байт в расшифровке предыдущего пакета. Проверим ща.. долбим пакет 5 байтов (социал екшн) второй байт 02- расшифрован должен быть.. выделяем второй байт ключа ксором 02 на то что приходит.. 2-е байты соседних ключей ксорим друг на друга- получаем 7-) ы.. эврика ёу.. 7:=5+2 (длинна пакета+то что было зашифровано в предыдущем пакете во втором байте) .. но возможно совпадение.. протестим другой пакет с другим социал екшином.. возьмем социальное действие (03 00 00 00) и заюзаем его сидя.. получаем ксор 2-х байтов соседних ключей=8))) ыыыыыыыыыы… 8- нечто иное как (03+5) зашифрованные данные в предыдущем пакете (во втором байте) + длинна пакета.. а теперь генеральный тест на 10 байтовом пакете с использованием скила отличного от (63 00 00 00) .. щас ченить выберу из списка-) .. выбрал скил повер шот= 38 00 00 00 ксор вторых байтов соседних ключей в десятеричной системе 66 -)) что ничто иное как 56 + 10 (56- ето десятеричное 38.. а 10- длинна пакета юз скил) .. думаю далее нам нужно двигаться именно в етом направлении..

Добавлено спустя 2 минуты 37 секунд:
итак мы прешли к тому что Key2:=f(key1,D) - неверна.. но верна Key2:=f(key1,D,X) где D- длинна пакета, а X- расшифрованные данные в предыдущем пакете-)) во жэсть то-))

Добавлено спустя 13 минут:
Вот пару мыслей которые склонили меня к поиску зависимостей от зашифрованных данных в предыдущем пакете: возьмем длинную цепь 10 байтовых пакетов для одного и тогоже скила.. и видим что второй байт ключа получается ксором на 6D при условии что скил юзается (63 00 00 00) берем тотже ЮЗ скил для другово скила.. и видим что второй байт ключа получается путем ксора уже не на 6D а на что то другое.. то жэ самое происходит и с 5-ти байтными пакетами.. т.е. приходим к выводу что KEY2 – не тока от длинны пакета а еще от чегото зависит.. ну впринципе вроде бы нашли от чего -) от данных в предыдущем пакете..

Добавлено спустя 4 часа 49 минут 42 секунды:
хочется думать что ключ состоит из 2-х четырех байтных чисел, которые меняются по определенному закону.. но с тем что я обнаружил для 2-го байта ключа- поспорить- тяжело.. проверено на куче разных логов для пакетов разной длинны и содержимого.. чтобы получить 2-й байт нового ключа нужно второй байт из расшифровки прежнего пакета сложить с длинной етогоже пакета и отксорить на 2-й байт ключа который используется для шифровки етого пакета.. ето правило я никак не магу привентить для первого байта ключа.. такое впечатление что для первого байта совершенно! другой алгоритм.. ничего общего с тем с чем мы сталкнулись для второго байта.. за такие слова XKOR менябы побил- но .. я был бы рад услышать его мнение... как можно опровергнуть то что я обнаружил для второго байта? все логи подтверждают ето.. для первого байта обнаружил лиш то что для пакета любой длинны ключ всегда чередуется четный-нечетный.. причем ето не зависит от того четная длинна пакета или не четная.. проверил на пакете 10 байтов, 5 байтов, 1 байт - ключ для первого байта всегда чередуется четный-нечетный.. какаято небольшая логика видна тока для 1-го байтного пакета.. но и то призрачная такая.. ксор двух соседних ключей (1-го байта) друг на друга дает последовательности состоящие чисел 1 3 7 15 31 63 127 255, все они получаются друг из друга путем смещения на 1 бит влево +1 (либо x2:=x1*2+1).. но ето никак не подтверждается логами для пакетов другой длинны.. для пакетов другой длинны кроме чет-нечет вапще закономерностей пока не вижу..
но зато проверил на пакетах 5 байтов и 10 байтов смену второго байта ключа.. всё говорит об том что есть накопительная часть гдето.. при 5-ти байтных пакетах 2-й байт ключа меняется через 50 пакетов, а при 10 байтных пакетах второй байт меняется через 25 пакетов.. т.е. длинна пакета гдето копится.. и возможно что (бредик такой) что она в ключе отражение прямого не находит.. а копится в мозгах у клиента с сервером.. но при етом влияет на вычисление нового значения ключа.. почему я считаю что прямого отражения в ключе нету у накопительной части (для длин пакетов)? да потомучто на протяжении одного периода смены второго байта ключа (25 пакетов по 10 байтов, либо 50 пакетов по 5 байтов) в первом байте ключ очень часто повторяется..-((

Добавлено спустя 12 минут 26 секунд:
и предположив что первый байт ключа есть какаято функция от длинны и от содержимого предыдущего пакета мы имеем что при одинаковом содержимом предыдущего пакета и одинаковой длинне пакета,- функция имеет то одинаковое то разное значение.. что впринципе противоречит определению функции.. ну ченить придумаем-) с вашей помощью- надеюсь=)

01.01.2008, 03:40
А может та часть пакета которая изменяется перевести в десятичное значение и проанализировать разницу изменения пакетной суммы в десятичном значении.
Может там идет постоянное умножение на конкретное число в десятичном значении с переводом в двоичное или вообще привязано к времени, а время синхронизируется с сервером. Ы это только предположение.

01.01.2008, 03:50
Я думаю при создании алгоритма люди все таки опираются на целые десятичные цифры тем самым получая алгоритм, мы снифя трафик между серверами и клиентами видим машинный код. Хотя формулу можно и там и тут сделать, но так больше шансов на её выуживания и сравнения.

paraped
01.01.2008, 14:02
А может та часть пакета которая изменяется перевести в десятичное значение и проанализировать разницу изменения пакетной суммы в десятичном значении.
Мы уже делали так сто раз..))

Про два ключа я просто постарался передать, какое у меня сложилось впечатление , анализируя последовательность которую ты выложил...)))

P.S. С НОВЫМ ГОДОМ.... на самом деле я щяс не способен думать, болит голова..))

VORON
03.01.2008, 00:23
ДРУЗЬЯ!
я вижу что никто ничего сюда не пишет нового.. хотя многие сказали такую головоломку- интересно разгодать.. видимо зашли в тупик от обилия информации.. на самом деле видно кучу закономерностей в алгоритме изменения ключа.. просто нужно над ними одновременно думать.. не упуская мелкие факты которые мы наблюдали- из виду..
я попробую обобщить наши знания.. и наверное с вашей помощью их буду дополнять.. каждый раз перепечатывая с дополнениями... так проще думать будет..
1. для шифровки и дешифровки- используется ксор на ключ..
2. ключ имеет размерность 8 байтов..
3. ключ меняется каждый раз..
4. второй байт ключа изменяется по закону: key2:=key1 xor (X+D), где Х- второй байт в расшифровке предыдушего пакета, D длинна етого пакета..
5. пунк "4" не выполняется в момент когда ксор соседних ключей меняется с (X+D) на что то другое на 1 раз ... это происходит через каждые (25 пакетов по 10 байт), (50 пакетов по 5 байт), (255 пакетов по 1 байт)..
6. смотря логи для пакетов 1, 5, 10 байтов (четных и также нечетных) мы видим что ключ в первом байте всегда чередуется "чет-нечет"..
7. для 10-ти байтных пакетов справедливо что ключ в своем младшем (правом) разряде первого байта (в 16-тиричном представлении) через 1 изменяется на 4 (что наводит об цифре 14=А+А (10+10) длинна пакета (А- это и есть 10 байтов) (2-ве длинны пакета так как через 1 пакет) ... причем мы с етим сталкиваемся не тока для 10 байтовых пакетов.. в логе данным тут в начале топа, для 1-го байтного пакета- мы видим тоже ето очень часто.
8. для однобайтового пакета ксоры двух рядом стоящих ключей (первого байта ключа- для однобайтового пакета, а выделить 8 байтов ключа никак, поетому тока 1-й байт ключа.. впринципе он нас то и интерисует больше всего)- дают очень интересную последовательность цифер.. 1 3 7 15 31 63 127 255.. ксоры двух соседних ключей дают последовательность состоящих именно из етих цифер.. которые переведя в бинарник дают 1, 11, 111, 1111, 11111, 111111 .. .. ..
9. взяв логи для пакетов 1,5,10 байтов мы видим что второй байт ключа изменит правилу описанному в пункте 4 тока через диапазон пакетов равный 25 пакетов по 10 байтов ( ну т.д. для других длинн)... но при етом на протяжении одного цикла (25 пакетов по 10 байт), (50 пакетов по 5 байт), (255 пакетов по 1 байт) никогда первый байт ключа не повторяется... 255 пакетов однобайтовых- и ключ всегда разный.. ниодного повтора... 255 раз подряд.. но на взгляд- хаос в логе - полный...


а тепеь друзья.. давайте думать.. чтодж нам ети злые админы придумали.. и каждый раз при нахожэдении новой закономерности етот пост будет перепечатываться в конец... от вас поросьба- чтоб поправить ети пункты кторорые уже есть.. на логах проверьте сами себя на разных логах.. простой пример- увидев закономерность в логе что второй байт ключа меняется на ксор 6D... - нестоит об етом даже говорить- ето справедливо тока для кокретного лога.. и не подверждается другими.. но в тоже время для етогоже пакета для другово лога верно будет что= (пункт 4 смотрите).. пунк 4 выполняется для всех логов для любого скила...

жду идей..

05.01.2008, 04:13
Ребят может я не в тему и нах меня, но у меня вопрос: Откуда клиент получает инфу о алгоритме шифровки\дешифровки? может был апдейт и добавили какой нить ДЛЛ в котором хранятся эти функции? Если так то нелегче ли его найти и разобратьса бут легча во много раз.

Shnaider
05.01.2008, 10:56
Ребят может я не в тему и нах меня, но у меня вопрос: Откуда клиент получает инфу о алгоритме шифровки\дешифровки? может был апдейт и добавили какой нить ДЛЛ в котором хранятся эти функции? Если так то нелегче ли его найти и разобратьса бут легча во много раз.
Может я дурак,но думаю так же

05.01.2008, 22:22
В продолжение своей мысли. Почти уверен в том, что шифровка/дешифровка выполняется функцией какой нить внешней библиотеки ибо если было бы иначе то пришлось бы для смены шифрации менять L2.exe. Ворон неужели небыло никакого апдейта? Неужели шифрация сменилась сама собой? Если никаких изменений небыло значит процедура шифрации та же только изменились ключи ( если ПакетХак не может расшифровать значит изменилась сама процедура)! Вот такие мысли. :unknown:

paraped
06.01.2008, 16:07
Ребят может я не в тему и нах меня, но у меня вопрос: Откуда клиент получает инфу о алгоритме шифровки\дешифровки? может был апдейт и добавили какой нить ДЛЛ в котором хранятся эти функции? Если так то нелегче ли его найти и разобратьса бут легча во много раз.

Ребят вот вы часто тут говорите что-то типа "нада найти библиотеку и разобраться в ней"....
А вы хотя бы понимаете что значит разобраться в библиотеке? Или в каком нибудь другом файле уже откомпилированой прогрммы? это на стадии создания программа выглядит как последовательность функций и различных действий с переменными, а после компиляции это машиный код 10101000101011111111101010100010001101000010101111 1001111.... И чтоб в нем разобраться нада знать ассемблер и сидеть сутками у компа, потому что 10 обращений к функциям в дельфи, или в визуал паскаль, это 1000 а может и больше различных действий на машингном уровне.... Кароче это весьма трудоемкая затея, и помойму никто из наз не сможет этого сделать, гораздо легче угать(проследить) алгорит шифрации... Если бы у нас были сорцы этого дела тогда да, но их мы конечно же не где не достанем....

Причем зачастую вдовесок код после компиляции шифруется какимнибудь CryptorExe 2.34(к примеру :))... но даже без шифрации, и например если бы кто нить из нас знал ассемблер, код мы восстановили только частично...

VORON
06.01.2008, 21:36
угу.. "разобраться в ДЛЛ"= ничего не сказать-)
ваще сложненькая задача.. может каму какие логи дать? скажите какие..

Добавлено спустя 10 минут 13 секунд:
Re:
В продолжение своей мысли. Почти уверен в том, что шифровка/дешифровка выполняется функцией какой нить внешней библиотеки ибо если было бы иначе то пришлось бы для смены шифрации менять L2.exe. Ворон неужели небыло никакого апдейта? Неужели шифрация сменилась сама собой? Если никаких изменений небыло значит процедура шифрации та же только изменились ключи ( если ПакетХак не может расшифровать значит изменилась сама процедура)! Вот такие мысли. :unknown:
конечноже был абдейт клиента...

ChiterEPT
06.01.2008, 22:57
угу.. "разобраться в ДЛЛ"= ничего не сказать-)


Согласен ребят я говорю о том о чем мало, что знаю. И действительно тут нужен знаток. Ворон еще один вопрос какие именно файлы были добавлены(изменены).

З.Ы. Вы уж извините если я совсем уж бред несу просто реально помочь хочется челу.

VORON
08.01.2008, 06:41
Ворон еще один вопрос какие именно файлы были добавлены(изменены).
ты мне скажи что ето тебе даст? я незнаю какие.. был патч каталога систем весом 30 мегабайт.. там куча файлов..
екзе был изменен, ИНДЖИН.ДЛЛ был тоже изменен да много всего было нового.. а толку ты че умеещ в машинных кодах разбираться? мы даже незнаем точки входа в ДЛЛ ету.. каким образом вызывать функции из нее.. чтоб в офлайне тестить ее.. забудь ету линию размышлений.. она никчему хорошему не приведет..
подумайте лучше по какому закону ключ меняется..

QaK
09.01.2008, 15:42
Итак я вернулсо. ППц вы маньяки тут накалякали =)
Ипать еще и 1 января сидели :shock: А я воть нехило погулял с 30 по 8 включительно =)
Рад, что prepered с нами =)
По теме, скорее всего второй(четный\нечетный, ну какой-то из них) генерируется из первого. вот такая мысля.

Добавлено спустя 10 минут 32 секунды:
или вообще цикл, раз ключ,сделать что-то с ключом - 2 ключ, сделать что-то(обратное первому чему-то) 1 ключ + учитывать длину пакета, ксор и\или прочую хрень.

Добавлено спустя 3 часа 48 минут 1 секунду:
В общем так, решил посмотреть, как меняются первые байты ксора предыдущего на последущий ключей
получилось, что каждые 8 раз бывает 6D, выписал отсортировав так, чтобы 6D завершал ряд, вот что из этого получилось.Жирным обозначил переходы (6с,6а,72)
79 55 69 7D 69 95 79 6D
59 75 69 1D 69 75 59 6D
79 95 69 7D 69 55 79 6D
19 75 69 5D 69 75 99 6D
79 55 69 7D 69 15 79 6D
59 75 69 9D 69 75 59 6D
79 15 69 7D 69 55 79 6D
99 75 69 5D 69 75 19 6D
79 55 69 7D 69 95 79 6D
59 75 69 1D 69 75 59 6D
79 95 69 7D 69 55 79 6D
19 75 69 5D 69 75 99 6D
79 55 69 7D 69 15 79 6D
59 59 45 9D 69 75 59 6D
79 15 69 7D 69 55 79 6D
99 75 69 5D 69 75 19 6D
79 55 69 7D 69 95 79 6D
59 75 69 41 69 75 59

P.S. Насчет последней строчки посередине 41 - непоняятно ...

Добавлено спустя 17 минут 9 секунд:
Такс, гмм, ахтунг!!! Ворон, слух, ту когда лог выкладывал (который абсолютно без преобразований - самый длинный), ты не мог напутать чего-нибудь? Просто там (где выше я про 41 написал) получается полная х..ня, 0D xor 22 будет не 2F, как положено, а 71 а это не есть гуд проверь плз, если сможешь или напиши, возможна ли очепятка?
З.Ы. Пятая строчка снизу в товем том посте.

x59
09.01.2008, 18:54
Щас надо двигатся из другова направления имхо! По логам вы определили что шифрование - обычный ксор, это много упрощает. Теперь надо найти этот ксор в библиотеке. как это сделать? посматреть чем упакованы все дллки, возможно админы так попытются спрятать алгоритм. Если нет левых беблиотек, то можно предположить что админы в функции шифрования всеголиш поменяли пару операторов (Xor OR AND SHR SHL и т.п). Алгоритмы вроде бы лежат в core.dll.. как бы там нибыло, берем дебагер, загружаем la2.exe и начинаем раставлять бряки, я бы первым делом поставил именно на core.dll. Важным моментом является и наверно самым сложным найти буфер пакетов входящих/исходящих, а дальше уже сматреть что куда идет, первыми функциями должны быть именно де/шифрация. Вот такие мысли

VORON
09.01.2008, 23:50
QAK, 5я строка снизу в логе гласит:
04B7424492D06FE03F0C002217000076CC55870D74
0d xor 22 = 2f
74 xor 17 = 63
невижу опечатки... всё верно вроде..

Добавлено спустя 1 минуту 47 секунд:
x59, мой моск несможет такой подход реализовать на практике..-))

Добавлено спустя 1 час 7 минут 15 секунд:
в этом опечатка, ы..:
цитата от QAK: "0D xor 22 будет не 2F, как положено, а 71 а это не есть гуд"

Добавлено спустя 3 часа 8 минут 3 секунды:
друзья, помагите мысль домыслить.. на куче логах проверено что ключ чередуется чет-нечет (ДЛЯ 1-го байта ключа).. ето справделиво для пакетов любой длинны (четной и нечетной).. и на ето правило не влияет момент перехода в ксоре второго байта.. 1 фиг последовательность чет- нечет ненарушается.. раз так и учитывая то что новый ключ получается из предыдущего с учетом длинны пакета и расшифрованных данных в предыдущем пакете то такую закономерную комбинацию чет-нечет можно получить тока если насильно приравнивать первый бит то к 1 то к 0.. что неизбежно должно привести к необратимости обратного действия.. т.е. имея ключ1 мы можем высчитать ключ2 но ненаоборот..
СОГЛАСНЫ?..
если да то: получить новый ключ из предыдушего можно какими способами?

1. побитово всё смещать влево на 1 бит.. при етом старший бит исчезнет .. и в новом ключе неотразится.. но при етом младий бит станет равным 0 и его можно будет чередовать чет-нечет. прибавляя 1 каждый раз к тому что было.. кстатти ето чередование легко выполнить ксором на 1 в младшем бите.. а ключ2 из ключа1 видно что ксором получается..

2. насильно изменять младший бит на 0 или 1 поочереди приетом теряеется етот первый бит.. что также приводит к необратимости обратного действия..

1-й пунк выглядет более правдоподобней глядя на логи однобайтового пакета.. ксоры соседних ключей друг на друга дают последовательность состоящие из циaер 1 11 111 1111 11111 и т.д. до 11111111.
1-й пунк выглядет еще правдоподобней если предположить что 1 2 3 4 байты ключа- ето одно целое число.. а не отдельные байты выщитываемые разными способами.. потомучто работает правило что ксор соседних ключей, во втором байте, изменится через 25 пакетов по 10 байт, 50 пакетов по 5 байт. и т.д. хотя про такую линию рассуждений ето можно поспорить.. хачу слышать мнение.. поетому поводу ваше..

вопщем мысль такова- что дейтвие получения второго ключа из первого- является необратимым.. с неизбежной потерей хотябы 1-го бита..
мысль верна? или нет?
если нет то какими еще способами можно получить такую вот картину : чет-нечет..?

QaK
10.01.2008, 11:10
2 x59 SHL,SHR - смысла в них мало, циклический сдвиг эквивалентен умножению\делению на 2 , не считая потери младшего\старшего бита (не помню переносятся они при сдвиге или нет)

Добавлено спустя 14 минут 14 секунд:
Слух Ворон, та же фигня ( в смыслк ксор = 71 а не 2F) в 43 и 44 снизу строчках а именно:

0450E3687AB16FE03F0C009609000015A15587B96A
0450E3687AB16FE03F0C00FF6400003F455587D007

Мну смущает то, что во всех 3х случаях ксор одинаковый = 71, ладно бы разный - тогда наверно очепятка, а так ... проверь, пожалуйста очень внимательно, если есть такая возможность. Очен важно знать твой вердикт.

Добавлено спустя 1 час 52 минуты 41 секунду:
В общем так, нашел, что (если считать вышеизложенное очепяткой) ксор предыдущего значения первого байта клюяа на последующий циклично выглядит так (1 группа - Хекс, 2я - Инт, №я - разница между 2мя Интами)

79 55 69 7D 69 95 79 6D== 121 85 105 125 105 149 121 109== 12 36 20 20 20 44 28 12
59 75 69 1D 69 75 59 6D== 89 117 105 29 105 117 89 109== 20 28 12 36 36 12 28 20
79 95 69 7D 69 55 79 6D== 121 149 105 125 105 85 121 109== 12 28 44 20 20 20 36 12
19 75 69 5D 69 75 99 6D== 25 117 105 93 105 117 153 109== 84 92 12 12 12 12 36 44
79 55 69 7D 69 15 79 6D== 121 85 105 125 105 21 121 109== 12 36 20 20 20 84 100 12
59 75 69 9D 69 75 59 6D== 89 117 105 157 105 117 89 109== 20 28 12 52 52 12 28 20
79 15 69 7D 69 55 79 6D== 121 21 105 125 105 85 121 109== 12 100 84 20 20 20 36 12
99 75 69 5D 69 75 19 6D== 153 117 105 93 105 117 25 109== 44 36 12 12 12 12 92 84

Далее вышеприведенный кусок абсолютно повторяется, требуется вывести закономерность :wink:
Усе я пошел работать :crazy:

VORON
12.01.2008, 03:16
тыб не могбы меня носом сунуть где ты получаеш 71???
я скока не применял калькулятор получаю 2f
0450E3687AB16FE03F0C009609000015A15587B96A
0450E3687AB16FE03F0C00FF6400003F455587D007

96 xor b9 = 2f
ff xor d0 = 2f

я непонимаю где ты 71 находиш... об етом я выше 2-мя постами сказал уж...

Добавлено спустя 23 минуты 51 секунду:
откуда ети циферии? непонятно.. просьба уточнять чтоб понять можно было...
конкретно интерисует первый столббец..
79 55 69 7D 69 95 79 6D== 121 85 105 125 105 149 121 109== 12 36 20 20 20 44 28 12
59 75 69 1D 69 75 59 6D== 89 117 105 29 105 117 89 109== 20 28 12 36 36 12 28 20
79 95 69 7D 69 55 79 6D== 121 149 105 125 105 85 121 109== 12 28 44 20 20 20 36 12
19 75 69 5D 69 75 99 6D== 25 117 105 93 105 117 153 109== 84 92 12 12 12 12 36 44
79 55 69 7D 69 15 79 6D== 121 85 105 125 105 21 121 109== 12 36 20 20 20 84 100 12
59 75 69 9D 69 75 59 6D== 89 117 105 157 105 117 89 109== 20 28 12 52 52 12 28 20
79 15 69 7D 69 55 79 6D== 121 21 105 125 105 85 121 109== 12 100 84 20 20 20 36 12
99 75 69 5D 69 75 19 6D== 153 117 105 93 105 117 25 109== 44 36 12 12 12 12 92 84

QaK
12.01.2008, 03:57
В общем так, нашел, что (если считать вышеизложенное очепяткой) ксор предыдущего значения первого байта клюяа на последующий циклично выглядит так (1 группа - Хекс, 2я - Инт, №я - разница между 2мя Интами)

79 55 69 7D 69 95 79 6D== 121 85 105 125 105 149 121 109== 12 36 20 20 20 44 28 12
59 75 69 1D 69 75 59 6D== 89 117 105 29 105 117 89 109== 20 28 12 36 36 12 28 20
79 95 69 7D 69 55 79 6D== 121 149 105 125 105 85 121 109== 12 28 44 20 20 20 36 12
19 75 69 5D 69 75 99 6D== 25 117 105 93 105 117 153 109== 84 92 12 12 12 12 36 44
79 55 69 7D 69 15 79 6D== 121 85 105 125 105 21 121 109== 12 36 20 20 20 84 100 12
59 75 69 9D 69 75 59 6D== 89 117 105 157 105 117 89 109== 20 28 12 52 52 12 28 20
79 15 69 7D 69 55 79 6D== 121 21 105 125 105 85 121 109== 12 100 84 20 20 20 36 12
99 75 69 5D 69 75 19 6D== 153 117 105 93 105 117 25 109== 44 36 12 12 12 12 92 84

Первый "квадратик" - ксор первого байта двух попорядку идущих ключей
то есть у нас ключ 1 и ключ 2
мы берем первый байт ключа 1 и ксорим его на первый байт ключа 2, и т.д (2 на 3, 3 на 4 (ве тот же первый байт))
расположил я так их группами, заканчивающимися на 6D могу просто тремя строчками

79 55 69 7D 69 95 79 6D 59 75 69 1D 69 75 59 6D 79 95 69 7D 69 55 79 6D 19 75 69 5D 69 75 99 6D 79 55 69 7D 69 15 79 6D 59 75 69 9D 69 75 59 6D 79 15 69 7D 69 55 79 6D 99 75 69 5D 69 75 19 6D
====================================
121 85 105 125 105 149 121 109 89 117 105 29 105 117 89 109 121 149 105 125 105 85 121 109 25 117 105 93 105 117 153 109 121 85 105 125 105 21 121 109 89 117 105 157 105 117 89 109 121 21 105 125 105 85 121 109 153 117 105 93 105 117 25 109
====================================
12 36 20 20 20 44 28 12 20 28 12 36 36 12 28 20 12 28 44 20 20 20 36 12 84 92 12 12 12 12 36 44 12 36 20 20 20 84 100 12 20 28 12 52 52 12 28 20 12 100 84 20 20 20 36 12 44 36 12 12 12 12 92 84

Добавлено спустя 2 минуты 12 секунд:
Гмм, проверил - действительно ксор 2F а не 71, а как у мну 71 получалось - хз ... :oops:

VORON
12.01.2008, 05:51
хм действительно интересно.. особенно учитывая тот факт что 6D для второго байта ключа (в ксоре) ето ничто иное как ДЛИНА ПАКЕТА+ЗАШИФРОВАННЫЕ данные.. а что если твою линию рассуждений проверить на другом скиле?
чтоб ксор вторых байтов в ключе довал не 6D а к примеру 3F .. то цикличность будет на 6D для первого байта или 3F?
завтра тестировать буду..

VORON
13.01.2008, 23:04
qak, удивительная весч-).. я начинал с того что выяснил что с помощью галочки "ОБХОД СМЕНЫ КСОР КЛЮЧА= включено" и "НЕДЕШИФРИРОВАТЬ ТРАФИК= выключено" получаю наполовину верно расшифрованные входящие пакеты.. поетому зацепился именно за ету комбинацию галочек.. а вот седня решил поексперементировать-) и стал просматривать логи в недешефрированном первозданном виде.. и удивился логам.. попоже их дам.. но они намного красивей и понятней.. там первый байт- константа ваще (для одного и тогоже пакета).. просто стандартный алгоритм пакетхака запечатывал ее-)) да 2 3 4 байты- тоже константы полученые ксором друг из друга.. вопщем там логи оч интересные чкуть поже покажу-) а хотя вот..
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD

я с етим логом не работал еще решил сначала тебе показать-) но тут всё с виду в 100 раз проще-) ето исходящий трафик пакета 2F 63 00 00 00 00 00 00 00 00 (10 байтов длинна)..
ваще цикличная конструкция полностью.. проблемы возникают только когда трафик из одних и тех жэ пакетов чемнибудь разбодяжить.. тогда цифры другие будут но циклично- также как тут..
вопщем надо немного забыть об том что мы раньше придумали.. ибо стандартный шифр пакетхака- нам всё усложнил.. без него всё проще свиду..

Добавлено спустя 4 минуты 29 секунд:
получается что никаково инкремента на длинну пакета вапще нету.. всё циклично.. ничто никуда не прибавляется..
инкремент создовал ПАКЕТХАК (стандартной шифрациией) .. во как..

Добавлено спустя 15 минут 33 секунды:
но избавившись от икремента мы получили новую запару.. раньше мы могли выделить ключ с легкостью из пакета.. а теперь 9-й байт (1-й байт ключа) ксореный на 1-й байт недает нам ИД пакета.. -((

Добавлено спустя 13 минут 45 секунд:
а однобайтовый пакет- вапще красота при таком раскладе..
D8
D8
D8
D8
D8
D8
D8
D8
..
..
..
до тех пор пока какойто другой исходящий пакет не влезит.. после етого вместо d8 будет что то другое.. но 1 фиг неизменяется- константа-)..

VORON
13.01.2008, 23:35
хм..-) там где в оригинале должен стоять 0- ключем (для ксора) является предыдущий байт.. справедливо для 5 и 10 байтовых пакетов.. (проверено)

VORON
14.01.2008, 01:28
СМОТРИТЕ ЧТО НАРЫЛ!
исходный лог:
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6

пропускаем через скрипт (в l2DPX):
var
k: integer;

begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor key[0];
// IncAsInteger(key, 0, size);
key[0]:=key[0] xor pck[1];
key[1]:=key[1] xor (pck[1]+size);
key[4]:=key[4] xor ($94);
key[5]:=key[5] xor ($ff);
end.

получаем результат:
2F 63 00 00 00 00 00 00 00 00 ; 94 92 00 00 69 88 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; F7 FF 00 00 FD 77 00 00 ; 10
2F 63 00 00 63 6D 00 00 00 00 ; 94 92 00 00 69 88 00 00 ; 10
2F 63 00 00 63 6D 00 00 00 00 ; F7 FF 00 00 FD 77 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; 94 92 00 00 69 88 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; F7 FF 00 00 FD 77 00 00 ; 10
2F 63 00 00 63 6D 00 00 00 00 ; 94 92 00 00 69 88 00 00 ; 10
2F 63 00 00 63 6D 00 00 00 00 ; F7 FF 00 00 FD 77 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; 94 92 00 00 69 88 00 00 ; 10

где 63 и 6D есть ничто иное как данные во втором байте пакета и 63+А=6D.

проверяем на другом скиле:
исходные данные:
0DC9C9C9D6CCCCCCEE12
35B3B3B3B65050504AF4
0DC9C9C9EEB6B6B69468
35B3B3B38E2A2A2A308E
0DC9C9C9D6CCCCCCEE12
35B3B3B3B65050504AF4
0DC9C9C9EEB6B6B69468
35B3B3B38E2A2A2A308E
0DC9C9C9D6CCCCCCEE12
35B3B3B3B65050504AF4
0DC9C9C9EEB6B6B69468
35B3B3B38E2A2A2A308E
0DC9C9C9D6CCCCCCEE12
35B3B3B3B65050504AF4
0DC9C9C9EEB6B6B69468
35B3B3B38E2A2A2A308E
пропускаем через скрипт:
var
k: integer;

begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor key[0];
//IncAsInteger(key, 0, size);
key[0]:=key[0] xor pck[1];
key[1]:=key[1] xor (pck[1]+size);
key[4]:=key[4] xor ($1a);
key[5]:=key[5] xor ($fc);
end.

получаем результат:
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 38 42 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 38 42 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 38 42 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 38 42 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 38 42 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 38 42 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 38 42 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 38 42 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ;

где 38 и 42 - ето как и в предыдущем случае 38- данные во втором байте=ИД скила.. ,а 42=38+А..
ыыыыыыыыыыыыы...
истина гдето рядом-)
в скрипте как вы видите применены 2 константы для получения 4 и 5 байтов ключа.. найдя их- можно будет сказать что задача решена-) ыыы

Добавлено спустя 27 минут 39 секунд:
А ВОТ ВАЩЕ ТЕМА! РАЗРАБОТАНО XKORом!!! ЫЫЫ.. будем тестировать щас на разных логах..
но предварительно:
исходные данные:
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6
BB4A4A4A23ABABAB3FAD
D8444444DAC0C0C037C8
BB4A4A4A40A5A5A531A3
D8444444B9CECECE39C6

пропускаем через скрипт:
var
k: integer;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor key[0];
key[0]:=key[0] xor pck[1];
key[1]:=key[1] xor (pck[1]+size);
key[4]:=key[4] xor key[0];
key[5]:=key[5] xor key[1] xor (pck[1]+size);
end.

получаем результат (коректный полностью):
2F 63 00 00 00 00 00 00 00 00 ; 94 92 00 00 69 88 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; F7 FF 00 00 9E 1A 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; 94 92 00 00 0A E5 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; F7 FF 00 00 FD 77 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; 94 92 00 00 69 88 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; F7 FF 00 00 9E 1A 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; 94 92 00 00 0A E5 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; F7 FF 00 00 FD 77 00 00 ; 10
2F 63 00 00 00 00 00 00 00 00 ; 94 92 00 00 69 88 00 00 ; 10

проверка на другом скиле:
исходный лог:
0DC9C9C9D6CCCCCCEE12
35B3B3B3B65050504AF4
0DC9C9C9EEB6B6B69468
35B3B3B38E2A2A2A308E
0DC9C9C9D6CCCCCCEE12
35B3B3B3B65050504AF4
0DC9C9C9EEB6B6B69468
35B3B3B38E2A2A2A308E
0DC9C9C9D6CCCCCCEE12
35B3B3B3B65050504AF4
0DC9C9C9EEB6B6B69468
35B3B3B38E2A2A2A308E
0DC9C9C9D6CCCCCCEE12
35B3B3B3B65050504AF4
0DC9C9C9EEB6B6B69468
35B3B3B38E2A2A2A308E

пропускаем через скрипт:
var
k: integer;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor key[0];
key[0]:=key[0] xor pck[1];
key[1]:=key[1] xor (pck[1]+size);
key[4]:=key[4] xor key[0];
key[5]:=key[5] xor key[1] xor (pck[1]+size);
end.

получаем результат (полностью корректный):
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 27 58 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 3D A4 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 27 58 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 3D A4 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 27 58 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 3D A4 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 05 E6 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 27 58 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 1A BE 00 00 3D A4 00 00 ; 10
2F 38 00 00 00 00 00 00 00 00 ; 22 FC 00 00 1F 1A 00 00 ; 10

ну как вам???

dmitry501
14.01.2008, 06:27
Как нам?
Отлично.
Пиши newxor.dll

VORON
14.01.2008, 10:24
Димка, как я уже писал (помоему в первом посте) NEWXOR.DLL применяет одинаковый алгоритм для обоих направлений трафа.. а у меня алгоритмы вход-выход- разные.. к входящему трафику я пока не приступал .. ковыряние в етой ДЛЛ ниче не даст.. нужно рассмотреть возможность сам ЕКЗЕ от пакетхака поковырять (я его пока не изучал).. но прежде чем к приступать к дешифровке входящего трафа или ковырянию ЕКЗЕ.. я хачу заняться тестами логов..
меня смущает вот ето:
key[1]:=key[1] xor (pck[1]+size);
и ето
key[5]:=key[5] xor key[1] xor (pck[1]+size);

конкретно вот это:
(pck[1]+size)
котороя при определенных условиях- запросто перевалит за размерность в 1 байт.. и что тогда будет- я пока незнаю.. старший разряд теряется или кудато перескакивать должен..
к томуже все ето хорошо- но мы работали с пактами где 3 4 байты= 0 (в оригинале) нужно потестировать на чемто более приближенном к реальности..
но в любом случае- осталось мелочь-)

NLObP
14.01.2008, 15:01
Подскажите, как вы логи через пакетхак и его скрипты пропускаете?

QaK
14.01.2008, 15:49
Хкор, суко, умный -) Респект :good:
Тупостью занимаетесь ребята, все уже давно отреверсено и алгоритм там не настолько прост, чтобы его понять по результату.
ты криптографию изучал, чтобы так утверждать?

VORON
14.01.2008, 15:55
мы их е через пакетхак пропускаем а через специальную утилиту.. разработанную XKORом специально для подобных задач.. ссылку для скачивания для которой выложено тут непомню на какой страници.. в диалоге по ICQ ...

Добавлено спустя 4 минуты 50 секунд:
ну пока еще задача не решена.. кто может поламайте голову..
исходный лог:
AE 81 81 B0 BE 20 21 10 86 A9 A9 98 96 08 09 38 AE 81 81 B0 BE 20 21 10 86 A9 A9 98 96 08 09 38 AE 81 81 B0 BE 20 21 10 86 A9 A9 A9 A7 0A 0B 0B 9D F5 F5 9A 94 49 48 27 B1 C1 C1 F6 F8 57 56
DC F5 F5 C4 2E A8 A9 98 7C 55 55 64 8E 08 09 38 DC F5 F5 C4 2E A8 A9 98 7C 55 55 64 8E 08 09 38 DC F5 F5 C4 2E A8 A9 98 7C 55 55 55 BF 0A 0B 0B EF 81 81 EE 04 C1 C0 AF 4B 3D 3D 0A E0 57 56
AE 81 81 B0 CC 54 55 64 F2 DD DD EC 90 08 09 38 AE 81 81 B0 CC 54 55 64 F2 DD DD EC 90 08 09 38 AE 81 81 B0 CC 54 55 64 F2 DD DD DD A1 0A 0B 0B 9D F5 F5 9A E6 3D 3C 53 C5 B5 B5 82 FE 57 56
DC F5 F5 C4 5C DC DD EC 08 21 21 10 88 08 09 38 DC F5 F5 C4 5C DC DD EC 08 21 21 10 88 08 09 38 DC F5 F5 C4 5C DC DD EC 08 21 21 21 B9 0A 0B 0B EF 81 81 EE 76 B5 B4 DB 3F 49 49 7E E6 57 56
AE 81 81 B0 BE 20 21 10 86 A9 A9 98 96 08 09 38 AE 81 81 B0 BE 20 21 10 86 A9 A9 98 96 08 09 38 AE 81 81 B0 BE 20 21 10 86 A9 A9 A9 A7 0A 0B 0B 9D F5 F5 9A 94 49 48 27 B1 C1 C1 F6 F8 57 56
DC F6 F6 C4 2E AB AA 98 7C 56 56 64 8E 0B 0A 38 DC F6 F6 C4 2E AB AA 98 7C 56 56 64 8E 0B 0A 38 DC F6 F6 C4 2E AB AA 98 7C 64 64 66 8C 3B 3A 4C A8 DF DF AD 47 9F 9E F0 14 3B 3B 3B D1
89 A5 A5 97 CC 57 56 64 D5 F9 F9 CB 90 0B 0A 38 89 A5 A5 97 CC 57 56 64 D5 F9 F9 CB 90 0B 0A 38 89 A5 A5 97 CC 57 56 64 D5 CB CB C9 92 3B 3A 4C FD 8C 8C FE A5 63 62 0C BD 94 94 94 CF
DC F6 F6 C4 7B F8 F9 CB 2F 05 05 37 88 0B 0A 38 DC F6 F6 C4 7B F8 F9 CB 2F 05 05 37 88 0B 0A 38 DC F6 F6 C4 7B F8 F9 CB 2F 37 37 35 8A 3B 3A 4C A8 DF DF AD 12 CC CD A3 47 68 68 68 D7
89 A5 A5 97 99 04 05 37 86 AA AA 98 96 0B 0A 38 89 A5 A5 97 99 04 05 37 86 AA AA 98 96 0B 0A 38 89 A5 A5 97 99 04 05 37 86 98 98 9A 94 3B 3A 4C FD 8C 8C FE F0 30 31 5F EE C7 C7 C7 C9
DC F6 F6 C4 2E AB AA 98 7C 56 56 64 8E 0B 0A 38 DC F6 F6 C4 2E AB AA 98 7C 56 56 64 8E 0B 0A 38 DC F6 F6 C4 2E AB AA 98 7C 64 64 66 8C 3B 3A 4C A8 DF DF AD 47 9F 9E F0 14 3B 3B 3B D1
9E E3 E3 E3 B8 11 10 10 A1 BF
FD ED ED ED 64 D3 D2 D2 00 73
9E E3 E3 E3 DB 1F 1E 1E AF B1
FD ED ED ED 07 DD DC DC 0E 7D
9E E3 E3 E3 B8 11 10 10 A1 BF

тут приваты сам себе.. 5 пакетов с текстом "111111111" потом 5 пакетов с текстом "222222222" потом 5 пакетов ЮЗ СКИЛ.. ..
остановились на варианте:
var
k: integer;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor key[0];

key[0]:=key[0] xor pck[1] xor (pck[1]+$12);
key[1]:=key[1] xor pck[2] xor (pck[2]+$06);

key[4]:=key[4] xor key[0];
key[5]:=key[5] xor key[1];


end.
но полностью верного результата неполучили пока..

14.01.2008, 18:02
Хкор, суко, умный -) Респект :good:
Тупостью занимаетесь ребята, все уже давно отреверсено и алгоритм там не настолько прост, чтобы его понять по результату.
ты криптографию изучал, чтобы так утверждать?

А ты думаешь откуда появился результат

VORON
14.01.2008, 22:32
QAK, чтож ты.-) помагай-) я думал ты весь день голову ломал и к концу дня напишеш-)
проблема впринципе в чем.. давайте разберемся..
мы имеем что:
1. для однобайтового пакета- лог - константа...
2. для пакета 5 и 10 байтов второй байт ключа вычисляется так: key[1]:=key[1] xor (pck[1]+size); //1- потомучто нумерация байтов с нуля..
3. для пакетов 20+ байтов размерностью так: key[1]:=key[1] xor 2;
4. для пакетов 30+ : key[1]:=key[1] xor ($3);
5. и т.д.
6. для пакетов 60+байтов: key[1]:=key[1] xor ($6);

как бы ето всё обобщить в одну красивую формулу?
выснил что переход (в етом key[1]:=key[1] xor ($6);) с 2 на 3 4 5 6 7.. - происходит при смене размерности с 27 на 29 байтов, с 37 на 39, с 47 на 49 .... соттветственно будет 2 3 4 5.. ..
но для маленьких пакетов работает key[1]:=key[1] xor (pck[1]+size);

QaK
15.01.2008, 23:08
QAK, чтож ты.-) помагай-) я думал ты весь день голову ломал и к концу дня напишеш-)
У мну на работае трабла, начальник чето колупался с прокси серваком - и, сцуко, отрубил мне инет =( Я его весь день пинал - уворачивается гад =) а завтра(то есть уже сегодня) я в коммандировку уезжаю ... так что пока ничем помочь не смогу.
З.Ы. Предыдущий пост вставил с компа начальника, пока он куда-то вышел =)

Добавлено спустя 23 часа 25 минут 17 секунд:
2VORON почитал твой последний пост, попробуй

var somedigit:integer;
if size<20
then somedigit:=size
else somedigit:=(size+1{или +2 как попрет в общем})div 10
key[1]:=key[1] xor (pck[1]+somedigit);

как-нить так ...

VORON
16.01.2008, 00:39
QAK, как на счет етого??? ы-))

var
k: integer;
b,i,a: integer;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size0 then pck[0]:=pck[0] xor key[0];
b:=0;
a:=0;

for k:=1 to size-1 do
begin
b:=b+pck[k];
end;

key[0]:=key[0] xor b;
key[1]:=key[1] xor ((size + b) shr (8));
key[2]:=key[2] xor ((size + b) shr (16));
key[3]:=key[3] xor ((size + b) shr (24));

key[4]:=key[4] xor key[0];
key[5]:=key[5] xor key[1];
key[6]:=key[6] xor key[2];
key[7]:=key[7] xor key[3];


if ((size + b) shr 8 ) = 0 then
key[1]:=key[1] xor ((size + b) shr 0);
end.

тут многое сделал я сам.. но привел все мои беспорядочные мысли к знаменателю никто иной как XKOR!!!!!! можно сказать так что я смотрю логи, изучаю их нахожу закономерность. а XKOR моментально ету закономерность на код перекладывает...
XKOR- вапще ГЕНИЙ! просто ГЕНИЙ!..

Добавлено спустя 6 минут 10 секунд:
мы почти возле цели..
но вопросы остались-))...
которые мы вместе решим-)) надеюсь с вашей помощью..-).. вопрос собственно в том чтобы сделать таково чтоб ИФА- небыло???
недолжно быть ИФА никаково...
любой ИФ в алгоритме шифрации- снижает быстродейтвие сервака- в разы... их недолжно там быть... как от ифа избавиться?
судя по всему когда (size+b) в диапазоне 1-2 байта то вот так вот ка я написал выше.. когда (size+b) - меньше одного байта - то приходится ИФ вставлять.. а когда (size+b) перевалит за FF FF то хз что будет.. и вапще возможно ли ето на практике? но.. от ИФА надо избавляться!..
жду ващей помощи!

Добавлено спустя 10 минут 41 секунду:
вот вам лог из 4-х пакетов содержащих приват сам себе с буквой "п" .. максимальное кол-во символов использовал.. причем почему "п"? спросите вы? да потомучто с пакетом типа "11111" идут нули через 1... для теста малопригодны.. в оригнале пакет выглядит так:
38 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 3F 04 00 00 02 00 00 00 76 00 6F 00 72 00 6F 00 6E 00 37 00 00 00

для дешифровки вышеупомянутый скрипт- работает-)) впрочем ка и для ещевышеизложенного лога с 3-мя разными пакетами по 5 штук..
задача избавиться от ИФА в етом скрипте... чтоб он был- универсален для любой длинны пакета и данных внутри пакет..

01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF FA FE C1 54 07 03 3C 01 54 50 6F FA A9 AD 92 AF C5 C5 C7 56 3A 3A 4C 75 70 70 02 93 90 90 FE C7 9A 9A 9A 0B
80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 32 36 09 24 07 03 3C 80 CF CB F4 D9 FA FE C1 7D 0D 0D 0F 26 3A 3A 4C F4 EB EB 99 B0 C3 C3 AD 15 52 52 52 7B
01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 61 65 5A 4E 07 03 3C 01 54 50 6F 7B 32 36 09 34 5E 5E 5C 4C 3A 3A 4C 75 70 70 02 12 0B 0B 65 5C 01 01 01 11
80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 A9 AD 92 3E 07 03 3C 80 CF CB F4 58 61 65 5A E6 96 96 94 3C 3A 3A 4C F4 EB EB 99 31 58 58 36 8E C9 C9 C9 61

paraped
16.01.2008, 01:06
Всем привет))) Помните меня еще?))
я не отписываюсь, но слежу за темой, и всегда с вами... :D
Если че придет в голову, сразу напишу....

VORON если вопрос стоит как избавится от условного оператора в коде скрипта, то я думаю рациональней всего будет спросить у XKORA, ибо он ГЕНИЙ))

З.Ы. VORON отпишись плз мне в личку, что это за сервер такой мы исследуем..))

VORON
16.01.2008, 01:31
ЦИТАТА: ОТ "paraped"
:
"VORON если вопрос стоит как избавится от условного оператора в коде скрипта, то я думаю рациональней всего будет спросить у XKORA, ибо он ГЕНИЙ))"
(конец цитаты.)

ХКОР- не резиновый.. он не бог.. еслиб он мог всё то шифр был бы сломан 2 месяца назад.. у ХКОР нету времени и жэлания решашать наши проблемы (мои).. именно поетому я завел ету тему чтоб помощь была от людей которые тоже в етом заинтерисованы.. но реальную помощ получаю тока от него (ХКОРа) и вот еще Qak= спс..

я етот топ вычистил (на провах модера) избавившись от 15 сообщений с тем что: "МЫ ЗАНИМАЕМСЯ ХУЙНЁЙ, ЕТО НЕРЕАЛЬНО СДЕЛАТЬ, МЫ ВАПЩЕ НУБЫ, ВСЁ ДАВНЫМ ДАВНО ОТРЕВЕРСЕНО и т.д." (гы кстати поясните что он имел ввиду скозав - "отреверсено"?) , услышав ето ХКОР- сказал: "НУБЫ ОНИ..." ...

просто топ начался с того что мы юзали запечатанный лог с использование стандартного алгоритма.. а нужно было проще.. избавиться от стандартного и думать над исходным текстом.. то что мы стока времени потратили идя по ложному пути- я даже удалять не буду.. пускай те кто реально сам для себя тожэ самое делает видит чужие ошибки.. и не повторяет их.. но тем неменее нужно задачу добить.. и ХКОР тут непричем..

dmitry501
16.01.2008, 12:39
отреверсено - это значит восстановлен исходный алгоритм по готовому машинному коду.
А прогу ту, которой вы пользуетесь никто не выкладывал, об этом я писал уже. И ссылки нету. А уж исходников тем более.

QaK
16.01.2008, 13:01
Так, я ууже забыл, мы пока исходящий траф шифруем? или входящий? :D
И что делает оператор shl,shr - побитный сдвиг влево\вправо на количество бит, указанное справа от этого оператора?

paraped
16.01.2008, 15:40
я етот топ вычистил (на провах модера) избавившись от 15 сообщений с тем что: "МЫ ЗАНИМАЕМСЯ ХУЙНЁЙ, ЕТО НЕРЕАЛЬНО СДЕЛАТЬ, МЫ ВАПЩЕ НУБЫ, ВСЁ ДАВНЫМ ДАВНО ОТРЕВЕРСЕНО и т.д." (гы кстати поясните что он имел ввиду скозав - "отреверсено"?) , услышав ето ХКОР- сказал: "НУБЫ ОНИ..." ...


Да не парься ты... Такие люди всегда есть, им просто больше не чего скачать по теме, а показать себя они хотят...
Мы то все понимаем , что именно то чем мы тут занимаемся и дает рез-тат, и в последствии люди пользуются готовыми ботами и прочей фигней благодаря тем людям, которые что то сидели обсуждали, решали , придумывали и т.д... короче надеюсь ты понял что я иммею ввиду... сорри за оффоп кстате..))


shl Поразрядный левый сдвиг, заменяющий правую часть нулями
shr Поразрядный правый сдвиг, заменяющий левую часть нулями

16.01.2008, 16:21
я етот топ вычистил (на провах модера) избавившись от 15 сообщений с тем что: "МЫ ЗАНИМАЕМСЯ ХУЙНЁЙ, ЕТО НЕРЕАЛЬНО СДЕЛАТЬ,


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

VORON
16.01.2008, 21:31
ну да впринципе.. я стораяюсь именно так и делать чтоб на любом посте можно было присоедениться к нам.. я выдаю ЛОГ + АЛГОРИТМ.. если етот ЛОГ прогнать через АЛГОРИТМ (скрипт) то лог дешифрируется..
вот на етом мы пока остановились:
var
k: integer;
b,i,a: integer;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size0 then pck[0]:=pck[0] xor key[0];
b:=0;
a:=0;

for k:=1 to size-1 do
begin
b:=b+pck[k];
end;

key[0]:=key[0] xor b;
key[1]:=key[1] xor ((size + b) shr (8));
key[2]:=key[2] xor ((size + b) shr (16));
key[3]:=key[3] xor ((size + b) shr (24));

key[4]:=key[4] xor key[0];
key[5]:=key[5] xor key[1];
key[6]:=key[6] xor key[2];
key[7]:=key[7] xor key[3];


if ((size + b) shr 8 ) = 0 then
key[1]:=key[1] xor ((size + b) shr 0);
end.

с помощью етого можно дешифрануть все вышеизложенные логи.. но это лиш частный случай... ибо тут испольщзуется ИФ от которого и нужно избавиться..
QAK, да мы работаем тока с исходящим трафом, с набором галочек (обход смены ксор ключа= включено, недешефрировать трафик=включено)
если ето камуто надо то скажу суть.. используется сумма всех байтов в пакете (b) кроме первого .. началось всё с того чо мы обнаружили что для маленьких пакетов справедливо: key[1]:=key[1] xor (size + pck[1]); я отмониторил сообщение в чат с одним символом и ето подтвердилось.. далее написал в чат 2 символа и вместо етого получил key[1]:=key[1] xor (size + pck[1] + pck[3]); ии проверил на 3-х символах и аказалось : key[1]:=key[1] xor (size + pck[1] + pck[3] + pck[5]); так как я мониторил цифру 1 (у которой код= 31 00) поетому сразу протестировал сумму байтов- и оказалось что ето работает.. на большом пакете " B" я получил равной $672. если разделить ето число побайтово то имеем $6 + $72.. 6- используется в: key[1]:=key[1] xor $6; а $72 исользуется в key[0]:=key[0] xor $72;
ну.. всё бы было хорошо но.. в зависимости от кол-ва байт в етой "B" нужно ету B прикладывать побайтово к байтам ключа начиная с хвоста.. к нулевому байту прикладывать 0-й байт от B .. к первому байту ключа нужно применять 2-й байт от B... а если 3-й байт в B=0 то key[1]:=key[1] xor ((size + b) shr (16)); но если 3-й байт b- значимый то будет подругому.. незнаю я если честно что будет.. вот токачто подумал про: возмозможно у етой b- отбрасывается первый (младший) байт вапще.. а то что останется- прикладывается побайтово... начиная с первого байта.. вопщем я в мыслях немного запутался.. помагите доделать.. работая в диапазаоне b= (ff- ffff) мы имеем:
key[0]:=key[0] xor b;
key[1]:=key[1] xor ((size + b) shr (8));
key[2]:=key[2] xor ((size + b) shr (16));
key[3]:=key[3] xor ((size + b) shr (24));

работая в диапазоне b= (0-ff) имеем:
key[0]:=key[0] xor b;
key[1]:=key[1] xor (size + b);
key[2]:=key[2] xor ((size + b) shr (16));
key[3]:=key[3] xor ((size + b) shr (24));

именно по етой причине мы ИФ и применяем.. а если диапазон станет b=(ff ff - ff ff ff) то хз что будет.. но я проверил и наблюдал что 3-й байт ключа тоже менянется- правда очень редко и то тока на 1... т.е. на практике ето рано или поздно произойдет и скрипт должен быть к етому готов.. но я непредставляю что должно произойти чтоб 3-й байт изменился.. с вашей помощью надеюсь добить головоломку... ИФОВ быть недолжно..

Добавлено спустя 6 минут 27 секунд:
ДИМКО, СПЕЦИАЛЬНО ДЛЯ ТЕХ КТО ДО СИХ ПОР НЕПОНЯЛ ГДЕ СКАТЬ ПРОГУ ДЛЯ ПОДБОРА АЛГОРИТМА:
(цитата из первой странице етого топа):
0:08:00: Ktif ye rfr ltkf&
0:08:08: Леша ну как дела?
0:08:19: впринципе готово)
0:08:22: всмысле прога)
0:08:39: но она пока не в очень удобной форме пакеты отображает...
0:09:44: а для моего случая ее применить можно? я не верю.. прога заранее алгоритм имеет у в кажой ситуации алгоритм свой.. я на 90% уверен что ета прога ничего не сделает для моего случая
0:10:15: тут алгоритм пишеш сам)
0:10:19: давай ее протестим для моего случая
0:10:26: давай...
0:10:29: хм
0:10:30: счас кину
0:10:35: давай
0:11:21: блин мне пишут твой клиент неподдерживает передачу...
0:11:43: makssys@inbox.ru (mailto:makssys@inbox.ru)
0:12:15: ftp://xkor.homeip.net/files/l2pdx.rar
0:12:48: пошло
0:14:08: пока качается расскажи как ей пользоваться?
0:14:38: слева пишеш пакеты для дешифровки по порядку, по одному пакету на строчку
0:14:56: внизу алгоритм дешифровки на паскале, и нажимаеш дешифровать
0:15:23: по умолчанию там стандартный алгоритм..
0:15:40: ету прогу в какой момент запускать?
0:15:53: сначала пакетхак или ее?
0:15:59: в момент когда захочеш её пользоваться)
0:16:18: она ничего не перехватывает)
0:16:28: когда уже трафик идет по полной ее можно включить и увидеть трафик?
0:16:28: ты сам в неё всё что надо записываеш)
0:16:45: ты сам в неё трафик пишеш)
0:16:55: а...
0:17:23: т.е. в нее я дам готовый лог!...
0:17:36: угу
0:17:42: но ток одного направления
0:18:03: и ключик начальный сам задаёш
0:18:22: так что пакеты в неё пишеш начиная с первого зашифрованного
0:20:39: леша а нафига прога ваще??? я магу разбирать ключ и експерементировать с ним с помощю самого паетхака отправив пакет на ЮЗ СКИЛ!.. и скриптом с к лючом всё что хачу то и делаю... нафига ваще ета отдельная прога?
0:21:10: тут сам пакеты задаёш...
0:21:21: для нормального исследования она лучше...
0:23:21: хм.. ну я попробую ее на логах выложенных в топе протестить!.. но хз чем она может помоч??? ведь нам надо узнать алгоритм.. монитоить изменение ключа я и без етой проги магу
0:23:52: ну а в ней надо строить алгоритм)
0:24:03: с моментально опробывать)
(конец цитаты)

16.01.2008, 22:12
Я могу вам чемто помоч ?

16.01.2008, 22:15
Ребята переносите топик в закрытую тему, а то над вами уже весь программерский бомонд смеется

VORON
16.01.2008, 22:31
_) а нам ли не пох на него?

Добавлено спустя 2 минуты 42 секунды:
траф почти сломан.. осталось диапазон ffff-ff ff ff рассмотреть , а они пускай смеются... мне лично пофиг на бомонд.. а то что я камуто радость доставляю, заставляя улыбаться,- так ето хорошо...

Добавлено спустя 5 минут 6 секунд:
а ты я так понимаю никто иной как представитель програмерсково бомонда??

paraped
17.01.2008, 02:19
Ребята переносите топик в закрытую тему, а то над вами уже весь программерский бомонд смеется

Че? :lol:
Сдается мне ты один из тех кто потом такую смехоту юзает..))

VORON мож нам реально эту тему сделать типа только для своих?

xkor
17.01.2008, 04:10
Ребята переносите топик в закрытую тему, а то над вами уже весь программерский бомонд смеется
а что ваш "бомонд" недопрограммеров тут вообще забыл?
VORON мож нам реально эту тему сделать типа только для своих?
впринцепе могу сделать подраздел с ограниченным доступом если хотите), ток кто будет выбирать достойных?)

VORON
17.01.2008, 04:40
paraped , ммм.. не думаю что ето хорошая идея.. посматри как етот топ бьет рекорды по посещаемости! с 24 декобря 1000+ просмотров! людей ета проблема очень сильно интересует.. етот топ должен стать- практическим руководдством для тех кто хочет сломать шифр... мы все очень сильно заинтересованы в посещаемости ресурса.. хотя отнюдь не материально а просто душевно.. создовая нужные и полезные темы- мы находим единомышленников.. смо собой среди них будут те которые нас просто так- нелюбят... говоря про то что "над нами весь! бомонд смеется" ето будет всегда.. равно как и удаление подобных постов.. щас дня 3-4 пройдет.. и почищу топ... чтоб флуда небыло.. а тем кто пинимает участие в топе- и помагает не словами а делом- респект!

QaK
17.01.2008, 17:07
VORON, по сути чем тебя ИФ не устраивает? Все равно должно быть условие проверки, сколькиразрядное чивло получается, если больше 8ми разрядов - то сдвинуть его ... ну или как-нить по-другому, или при таком раскладе твой комп тормозить будет? Думаю, не очень ...
Есть подозрения что в
key[2]:=key[2] xor ((size + b) shr (16));
и
key[3]:=key[3] xor ((size + b) shr (24));
бывает переполнение и происходит сдвиг, соответственно на 16 и 24 разряда ... надо проверить (на всякий случай)

VORON
18.01.2008, 05:32
QAK, тормозить будет не мой комп а сервант... наша задача полностью продублировать алгоритм сервера..
одну и туже задачу- можно решить разными способами.. напиример:
задача получить ответ=4
ето можно сделать разными методами..
2+2=4
3+1=4
16 корень квадратный= 4
и т.д...
нам нужно найти алгоритм получения- очень простой...
бональный
ИФЫ- привествуются лиш для тестирования и подбора алгоритма..
в конечной версии скрипта недолжно быть никаких ИФОВ..
ИФ- по быстродействию примерно как 100+ обычных сложений вычисляется
уесли ИФ применить для шифровки пакета на сервере- то пипец будет.. сервант просто повиснет...
алгоритм шифровки- простой должен быть- красивый и простой...
без всяуих ифов
посмотрите лог скрипта.. от отого с чего начали и чем закончимли... и и постарайтесь его усовершенствовать- математически..

Добавлено спустя 5 минут 36 секунд:
меня смущает факт что 3-й 7-й байты ключа становятся 00 и 01... как ето возможнгно вапще????
а порой наоборот 3-й=01 а 7-й=00..
еслли наш скрипт рабьотает то как ето возможно???
key[5]:=key[5] xor key[1];
да никак!
просто мы чегото не учитываем

Добавлено спустя 11 минут 23 секунды:
я мониторил- факт:

var
k: integer;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size0 then pck[0]:=pck[0] xor key[0];
key[0]:=key[0] xor pck[1];
key[1]:=key[1] xor (pck[1]+size);
key[4]:=key[4] xor key[0];
key[5]:=key[5] xor key[1] xor (pck[1]+size);
end.
end.

обратите внимание на:
key[5]:=key[5] xor key[1] xor (pck[1]+size);


просто когда пакет какойто пределенный то надо сдвигать на ноль.. (вернее на много там..)
ыот меня интерисует когда применять то 1 то другой агоритм? чем пакет от пакета должен отличчаться?

Добавлено спустя 56 минут 15 секунд:
подскажу..подскажу..
вот например имеем скрипт - тот что я дал..:
var
k: integer;
b,i,a: integer;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size0 then pck[0]:=pck[0] xor key[0];
b:=0;
a:=0;

for k:=1 to size-1 do
begin
b:=b+pck[k];
end;

key[0]:=key[0] xor b;
key[1]:=key[1] xor ((size + b) shr (8));
key[2]:=key[2] xor ((size + b) shr (16));
key[3]:=key[3] xor ((size + b) shr (24));

key[4]:=key[4] xor key[0];
key[5]:=key[5] xor key[1];
key[6]:=key[6] xor key[2];
key[7]:=key[7] xor key[3];


if ((size + b) shr 8 ) = 0 then
key[1]:=key[1] xor ((size + b) shr 0);
end.

оратите внимание на :
key[5]:=key[5] xor key[1];
кей5- следствие от кей1...

а посматрите другой лог и скрипт:
var
k: integer;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor key[0];
key[0]:=key[0] xor pck[1];
key[1]:=key[1] xor (pck[1]+size);
key[4]:=key[4] xor key[0];
key[5]:=key[5] xor key[1] xor (pck[1]+size);
end.
end.
для маленьких пакетов етот скрипт- заработает- нормально...
обратите внимание на:
key[5]:=key[5] xor key[1] xor (pck[1]+size);

вопщем от кол-ва байт нужно применять скрипты разные..
я надеюсь с ващей помощью всё решу

Добавлено спустя 7 минут 42 секунды:
меня парит то что для какойто длинны пакета мы использем зависимость:
кей5 от кей1...
а если длинна пакета изменится то наодорот..
сначала кей6 а потом кей1.. я ето уже вам выдал скриптами выщще..- обратите внимание на мой пост со скриптом- как такое возможно? я не ищу оправдания в подтверждение того что скрипт- верный.. я исчу наоборот.. людей которые мне всё объяснят почему именно так а не подругому...

QaK
18.01.2008, 10:22
QAK, тормозить будет не мой комп а сервант... наша задача полностью продублировать алгоритм сервера..
одну и туже задачу- можно решить разными способами.. напиример:
задача получить ответ=4
ето можно сделать разными методами..
2+2=4
3+1=4
16 корень квадратный= 4
и т.д...
нам нужно найти алгоритм получения- очень простой...
бональный
ИФЫ- привествуются лиш для тестирования и подбора алгоритма..
в конечной версии скрипта недолжно быть никаких ИФОВ..
ИФ- по быстродействию примерно как 100+ обычных сложений вычисляется
уесли ИФ применить для шифровки пакета на сервере- то пипец будет.. сервант просто повиснет...
алгоритм шифровки- простой должен быть- красивый и простой...
без всяуих ифов
посмотрите лог скрипта.. от отого с чего начали и чем закончимли... и и постарайтесь его усовершенствовать- математически..
Слух, Ворон, а тебе не пофиг сколько у тебя ИФов будет выполняться, сам же сказал, что 4 можно получить несколькими способами, суть в том, отличается ли алгоритм с ИФом, от алгоритма сервачного, если совсем не отличается - не проще ли болт забить не него?

Добавлено спустя 4 минуты 49 секунд:
меня смущает факт что 3-й 7-й байты ключа становятся 00 и 01... как ето возможнгно вапще????
а порой наоборот 3-й=01 а 7-й=00..
Ммм, а чего тебя смущает? Это не укладывается в общую концепцию, расшифровывается неправильно? Или что, что именно тебя смущает поясни плз .... и почему это невозможно?

Добавлено спустя 23 минуты 45 секунд:
по поводу Key[1] могу предложить вариант(не проверял)
key[1]:=key[1] xor ((size + b) shr (8)) xor (ord(((size + b) shr 8 ) = 0)*((size + b) shr 0));
или
key[1]:=key[1] xor ((size + b) shr (ord(((size + b) shr 8 ) 0)*8));
как-то так =)

Добавлено спустя 7 минут 44 секунды:
еще как вариант (для увеличения быстродействия) завевсти еще переменную, в которой будет храниться значение size+b =)

Добавлено спустя 18 минут 49 секунд:
если разделить ето число побайтово то имеем $6 + $72..
как это ты так поделил "побайтово", если делить побайтово то будет
02 А0(Hex) или
2 160(Dec) или
00000010 10100000(Bin)
поясни как ты делил "побайтово" ....

xkor
18.01.2008, 11:43
как это ты так поделил "побайтово", если делить побайтово то будет
02 А0(Hex) или
2 160(Dec) или
00000010 10100000(Bin)
поясни как ты делил "побайтово" ....
вообщето он на байты раскладывал число $672 а не 672 так что он всё верно разложил...

VORON
18.01.2008, 18:19
Ммм, а чего тебя смущает? Это не укладывается в общую концепцию, расшифровывается неправильно? Или что, что именно тебя смущает поясни плз .... и почему это невозможно?



если: key[5]:=key[5] xor key[1];
а 1-й байт ключа почти всегда =0 то невозможно чтоб кей5 стал=1
а если кей1 станет рано или поздно =1 то.. кей5 станет меняться циклом 0 1 0 1 0 1...
наш скрипт неучитывает етого...

Добавлено спустя 12 минут 59 секунд:
и проблема в применениии в нем ИФА..
когда ИФ исчезнет то проблема решится сама собой.. наш скрипт работает в диапазоне 1-2 байта без ифа...
в диапазоне 0-FF нужен иф... а в диапазоне ff ff - ff ff ff хз вапще что будет...
какой лог дать чтоб отмониторить смену 3-го байта в ключе???

QaK
19.01.2008, 09:35
вообщето он на байты раскладывал число $672 а не 672 так что он всё верно разложил...
Яфно =) ступил малость =)

Добавлено спустя 6 минут 13 секунд:
Я вроде накалякал без ифа....

dmitry501
20.01.2008, 08:38
Что ж вам if так не нравится то?
Вполне нормальная инструкция.
На уровне маш. кодов исполняется очень быстро :)

VORON
23.01.2008, 20:11
Что ж вам if так не нравится то?
Вполне нормальная инструкция.
На уровне маш. кодов исполняется очень быстро :)
Да, Димко.. я долго исследовал и соглашусь с тобой.. без ифов там никак..
кстатти очень удобно для подобных задач использовать скрипт для подбора алгоритма и мониторинга необходимых переменных..
я например накидал вот такой:

var
frm:Tform;
memo:Tmemo;
pac:string; //расшифрованный пакет в HEX формате
D1,d2,d3,d4,d5,d6,d7,d8:integer; //2 разряда 1-го байта.. используются для перевода стринг в HEX
b1,b2,b3,b4:integer;
i:integer; // вспомогательная
size:integer; //размер пакета
keyClientIN: array [0..7] of byte; //8 байтов ключа
keyClientOUT: array [0..7] of byte;
keyServerIN: array [0..7] of byte;
keyServerOUT: array [0..7] of byte;
paket:string;

StartKeyCatch:boolean; //указатель на то что начальный ключ отловлен
//////////////////
k: integer;
b,a: integer;
//////////////////
stroka:string;
keyHEX:string;
sizeHEX:string;
BHEX:string;

const
hexdigit = '0123456789ABCDEF';




procedure Init; //Вызывается при включении скрипта
begin
frm := TForm.Create(nil);
frm.Caption := 'Chat';
frm.BorderStyle := bsSizeable;
frm.Position := poScreenCenter;
frm.align:=alBottom;
frm.Width:=700;
frm.Height:=200;
frm.FormStyle:=FsStayOnTop;
frm.Show;

memo :=TMemo.create(nil);
memo.parent:=frm;
memo.align:=alClient;
memo.WordWrap:=false;
memo.ScrollBars:=ssBoth;

StartKeyCatch := false;

end;

procedure Free; //Вызывается при выключении скрипта
begin
memo.free;
frm.Free;
end;

//основная часть скрипта
//вызывается при приходе каждого пакета если скрипт включен
begin
//*****************ИНИЦИАЛИЗИРУЕМ НАЧАЛЬНЫЙ КЛЮЧ ПРИ СТАРТЕ СКРИПТА*******************
//используем действие (сесть/всать) после запуска скрипта
if FromClient and StartKeyCatch = false then
begin
if length(pck) = 10 then
if (ord(pck[1]) xor $45) = (ord(pck[8]) xor ord(pck[9])) then
if (ord(pck[1]) xor ord(pck[2])) = (ord(pck[9]) xor ord(pck[10])) then
begin
keyClientIN[0]:= ord(pck[1]) xor $45;
keyClientIN[1]:= ord(pck[1]) xor ord(pck[2]);
keyClientIN[2]:= ord(pck[2]) xor ord(pck[3]);
keyClientIN[3]:= ord(pck[3]) xor ord(pck[4]);

keyClientIN[4]:= ord(pck[4]) xor ord(pck[5]);
keyClientIN[5]:= ord(pck[5]) xor ord(pck[6]);
keyClientIN[6]:= ord(pck[6]) xor ord(pck[7]);
keyClientIN[7]:= ord(pck[7]) xor ord(pck[8]);

StartKeyCatch:= true;
// memo.Lines.Add(inttostr(keyClientIN[0])+'+'+inttostr(keyClientIN[1])+' '+inttostr(keyClientIN[2])+' '+inttostr(keyClientIN[3])+' '+inttostr(keyClientIN[4])+' '+inttostr(keyClientIN[5])+' '+inttostr(keyClientIN[6])+' '+inttostr(keyClientIN[7]));
end;
end;


if FromClient and StartKeyCatch = true then
begin
//применение алгиритма фифрации к пакету.. для получения из PCK - PAKET
size:=length(pck);
paket:=pck;

//дешифрируем текущий пакет с использованием уже имеющегося ключа
for k:=size-1 downto 1 do
paket[k+1]:=chr(ORD(pck[k+1]) xor keyClientIN[k and 7] xor ord(pck[k-1+1]));
if size<>0 then paket[0+1]:=CHR(ord(pck[0+1]) xor keyClientIN[0]);


b:=0;
a:=0;
//вычисляем новый ключ
//подсчет суммы всех байтов в пакете кроме первого
for k:=1 to size-1 do
begin
b:=b+ord(paket[k+1]);
a:=0;
if (size + b) > $ff then a:=1;
if (size + b) > $ffff then a:=2;
end;

//учет частного случая
if size<>1 then
begin

keyClientIN[0]:=keyClientIN[0] xor b;
if a=0 then keyClientIN[1]:=keyClientIN[1] xor (b+size);
if a=1 then keyClientIN[1]:=keyClientIN[1] xor (b shr 8);
keyClientIN[2]:=keyClientIN[2];
keyClientIN[3]:=keyClientIN[3];


keyClientIN[4]:=keyClientIN[4] xor keyClientIN[0];
keyClientIN[5]:=keyClientIN[5] xor keyClientIN[1];
keyClientIN[6]:=keyClientIN[6] xor keyClientIN[2];
keyClientIN[7]:=keyClientIN[7] xor keyClientIN[3];

keyClientIN[5]:=keyClientIN[5] xor ((size + b) shr (a*8));
keyClientIN[5]:=keyClientIN[5] xor ((size + b) shr (8));
end;

//визуализация лога на форме
pac:='';
for i:=1 to size do
begin
d1:=ord(paket[i]) shr 4;
d2:=ord(paket[i]) - (d1 shl 4);

pac := pac + hexdigit[(d1 and $F)+1];
pac := pac + hexdigit[(d2 and $F)+1];
pac:= pac + ' ';
end;

keyHEX:='';
for i:=0 to 7 do
begin
d1:=keyClientIN[i] shr 4;
d2:=keyClientIN[i] - (d1 shl 4);

keyHEX:= keyHEX + hexdigit[(d1 and $F)+1];
keyHEX:= keyHEX + hexdigit[(d2 and $F)+1];
keyHEX:= keyHEX + ' ';
end;

sizeHEX:='';
d1:=size-((size shr 4) shl 4);
d2:=(size shr 4)-((size shr 4) shr 4 shl 4);
d3:=(size shr 8)-((size shr 8) shr 4 shl 4);
d4:=(size shr 12)-((size shr 12) shr 4 shl 4);

sizeHEX:=sizeHEX + hexdigit[(d4 and $F)+1];
sizeHEX:=sizeHEX + hexdigit[(d3 and $F)+1];
sizeHEX:=sizeHEX + hexdigit[(d2 and $F)+1];
sizeHEX:=sizeHEX + hexdigit[(d1 and $F)+1];

bHEX:='';
d1:=b-((b shr 4) shl 4);
d2:=(b shr 4)-((b shr 4) shr 4 shl 4);
d3:=(b shr 8)-((b shr 8) shr 4 shl 4);
d4:=(b shr 12)-((b shr 12) shr 4 shl 4);
d5:=(b shr 16)-((b shr 16) shr 4 shl 4);
d6:=(b shr 18)-((b shr 18) shr 4 shl 4);
d7:=(b shr 22)-((b shr 22) shr 4 shl 4);
d8:=(b shr 26)-((b shr 26) shr 4 shl 4);

bHEX:=bHEX + hexdigit[(d8 and $F)+1];
bHEX:=bHEX + hexdigit[(d7 and $F)+1];
bHEX:=bHEX + hexdigit[(d6 and $F)+1];
bHEX:=bHEX + hexdigit[(d5 and $F)+1];
bHEX:=bHEX + hexdigit[(d4 and $F)+1];
bHEX:=bHEX + hexdigit[(d3 and $F)+1];
bHEX:=bHEX + hexdigit[(d2 and $F)+1];
bHEX:=bHEX + hexdigit[(d1 and $F)+1];



stroka:=pac+';;'+keyHEX+';;'+ bhex+';;'+sizehex+';;'+inttostr( ((size + b) shr (8))-((b) shr (8)) );

memo.Lines.Add(stroka);

end;
end.


на форму в МЕМО- пишется лог исходящих пакетов в HEX (расшифрованных) и плюс еще необходимые переменные мониторятся такие как длинна пакета, ключ текущий и т.д.

Добавлено спустя 2 часа 57 минут 24 секунды:
немного поколдовав с алгоритмом- магу сказать что ИСХОДЯЩИЙ ТРАФ- СЛОМАН!-))

QaK
23.01.2008, 22:07
ИСХОДЯЩИЙ ТРАФ- СЛОМАН!-))
ну,грац,что я могу сказать, давай входящий теперь =)

VORON
23.01.2008, 23:55
я хачу сначала исходящий трафик затестировать в деле-) для сдачи манора применить его-) там входящий мне не нужен-) входящий чуть пожэ сделаю я думаю там ничего сложного не будет.. щас надо сделать 2 скрипта. 1 чтоб распаковывал а другой- запаковывал.. и в серединке размещу скрипт на сдачу манора-) протестирую в деле то что програмил больше месяца-)

Добавлено спустя 8 минут 22 секунды:
как прочту топ с начала - с чего всё начиналось.. аж страшно становится-)

QaK
24.01.2008, 08:57
я хачу сначала исходящий трафик затестировать в деле-)
Ты нашел, откуда начальный ключ выдирать?

VORON
24.01.2008, 13:49
я хачу сначала исходящий трафик затестировать в деле-)
Ты нашел, откуда начальный ключ выдирать?

обрати внимание на скрипт выше.. его можно стартонуть в произвольном месте.. он сам ключ найдет и вычислит из пакета (СЕСТЬ/ВСТАТЬ) и после етого тока начинает алгоритм применять.. скрипт етот пакет по сигнатуре- определяет..

//*****************ИНИЦИАЛИЗИРУЕМ НАЧАЛЬНЫЙ КЛЮЧ ПРИ СТАРТЕ СКРИПТА*******************
//используем действие (сесть/всать) после запуска скрипта
if FromClient and StartKeyCatch = false then
begin
if length(pck) = 10 then
if (ord(pck[1]) xor $45) = (ord(pck[8]) xor ord(pck[9])) then
if (ord(pck[1]) xor ord(pck[2])) = (ord(pck[9]) xor ord(pck[10])) then
begin
keyClientIN[0]:= ord(pck[1]) xor $45;
keyClientIN[1]:= ord(pck[1]) xor ord(pck[2]);
keyClientIN[2]:= ord(pck[2]) xor ord(pck[3]);
keyClientIN[3]:= ord(pck[3]) xor ord(pck[4]);

keyClientIN[4]:= ord(pck[4]) xor ord(pck[5]);
keyClientIN[5]:= ord(pck[5]) xor ord(pck[6]);
keyClientIN[6]:= ord(pck[6]) xor ord(pck[7]);
keyClientIN[7]:= ord(pck[7]) xor ord(pck[8]);

StartKeyCatch:= true;
end;
end;



Добавлено спустя 58 минут 40 секунд:
меня интерисует другой вопрос..
допустим имеем 2 скрипта: 1 вверху- дешефрирует, 2- внизу- запаковывает обратно переменную PCK.. в середине помещаю скриптик любой, например скрипт который отправит серваку- пакет на СОЦ ДЕЙСТВИЕ.. я так понимаю что етот пакет небудет обрабатываться другими скриптами.. он сразу попадает в движок пакетхака и отправляется.. и по скриптам не проходит.. поетому как скоректировать ключ в скрипте который запаковывает- трафик, с учетом етого пакета?
расскажите етот момент кто знает? возможноли вапще реализовать то что я хачу- скриптами? или без ковыряния исходников пакетхака- никак?

NLObP
24.01.2008, 19:49
На сколько помню, пакетхак исполняет скрипты по очереди, сверху вниз из списка. Попробуй первым расшифровщик, вторым, который что-то делает, а следующий скрипт зашифровщик. Скрипты можно двигать в списке. Друг другу будет передаваться PCK, вот его и изменяй в первом и втором скрипте в третьем создавай и отсылай BUF, PCK скорее всего надо убивать.

xkor
24.01.2008, 21:49
если промежуточный скрипт будет сам что то отсылать не через pck то это небудет шифроваться последним скриптом...
но я заканчиваю версию пакетхака в котором можно будет делать newxor.dll при условии разной шифрации на приём и отправку, так что с её помощью можно будет реализовать)

QaK
25.01.2008, 08:51
VORON, могу посоветовать сделать так:
напиши 2 процедуры зашифровать и расшифровать,для каждой свой ключ, но вначале, при инициализации, ключ одинаковый - сохраняешь его и для зашифровки, и для расшифровки.
Потом примерно так:
If (FromClient) and (ConnectName='Хз кто') then
begin
Rasshifrovatvsenaxx(pck,keyClientIN);
<сюда стандартный обработчик, типа case pck[1] of>
Zashifrovatvsenaxx(pck,keyClientOut);
end;

и для пакетов, самостоятельно отправляемых тобой на сервер перед отправкой вызываешь
buf:=<суперчитерскийпакетнапримернаманор>;
Zashifrovatvsenaxx(buf,keyClientOut);
SendToServerEx('Хз кто');

Попробуй так =)

VORON
25.01.2008, 11:36
QAK, ну впринципе да.. я про ето думал.. т.е. можно реализовать в пределах одного скрипта.. туда запихнуть: сам скрипт который нужен+расшифровку+зашифровку.. но чета у меня не стоит на такой подход.. пока ХКОР- доделывает новый пакетхак у меня есть время на взлом входящего трафика.. поетому- когда я закончу с ним то как раз новый пакетхак будет готов (наверно) и тогда проблема отпадет сама собой..
QAK, а знаеш в чем самый смак ломануть шифр на серваке, а не тупо подобрать себе другой сервак без шифровки? в том что на серваке без шифрации ты 1 из 1000 скриптоводов и особо ничем не выделяешся из толпы.. у всех есть хиллеры- боты, все сдают манор скриптом (и его сдать скриптом тяжело) .. а вот на зашифрованном серваке я 1 такой буду-) и весь манор мой будет-) и ХИЛЛЕРЫ тока у меня в ПВП будут-) .. это даст огромное преимущество перед другими..

QaK
25.01.2008, 11:56
но чета у меня не стоит на такой подход..
mdaa =) Мощная фраза =) Ты лучше исходящи пока погоняй, на предмет правильности расшифровки, или давай входящий мачить=) Можно ведь модуль написать с 2мя процедурами, и просто подключать его =) лентяй епть =)

VORON
25.01.2008, 12:51
QAK, ну скажем так я его уже нагонялся.. за 3-5 часов мониторинга лога- ключ ниразу не сбился.. т.е. алгоритм учитывает всё что возможно.. QAK, зачем изобретать велосипед? ХКОР- МУЖИК! он сказал- скоро сделает , значет скоро сделает!.. подправим ДЛЛку и вуаля.. ну че к входящему приступаем?-)))

QaK
25.01.2008, 13:05
ну че к входящему приступаем?-)))
Панеслася =)

VORON
25.01.2008, 13:17
ну что мы имеем со входящим? то что первые 4 байта ключа- успешно генерируются стандартным алгоритмом.. ща скриптик накидаю.. а для 4-х байтов последних- сделаю xor на 0.. чтоб посмареть как они там вапще меняются..

xkor
26.01.2008, 11:46
ну чтож, мы с вороном наконец таки добили всё это вчера), теперь у него есть пакетхак и newxor.dll позволяющие нормально мониторить пакеты и дешифровать/шифровать их на его серве)

VORON
26.01.2008, 14:43
ХКОР-)) респект!-)) теперь за мной 2 ШЕ и ПП бегают-))
входящий трафик сломать оказлось слишком просто.. так просто что выкладывать даж нехачу.. любой кто сам его начнет исследовать сделает ето за 5 минут..
впринципе в в топе можно ствить точку.. вопрос решен на 100%.. на дня ХКОР выложит новый пакетхак в котором применяются 4 независимых алгоритма.. 2 для клиента и 2 для сервера.. подправив там ДЛЛ (исходники для которой даны будут) пакетхак успешно будет работать на шифрованном серваке.. задача человека который ето будет делать предварительно узнать алгоритм смены ХОР ключа.. исследовать трафик.. отыскать закономерности.. необходимый для етих целей софт (l2DPX) и скрипт для пакетхака даны в етом топе.. было бы неплохо еслиб етот топ ктонить продолжит развивать на другом примере.. доведя его логическово завершения..
имя сервака думаю нестоит выкладывать.. админы прочитав что их сервак сломан- сразу сменят шифр..

27.01.2008, 00:10
Как все сложно получилось пришлось переделывать все. Так будет каждый раз ?

VORON
29.01.2008, 06:57
Как все сложно получилось пришлось переделывать все. Так будет каждый раз ?
а то!.. и не такое будет!

Добавлено спустя 2 часа 23 минуты 1 секунду:
QAK,слух я еще раз отвечу на твой пост.. ты спрашивал "ты нашел как начальный ключ получать?" .. на тот момент я еще (вернее ХКОР) к ДЛЛ не приступал.. я тестировал скрипт.. а скрипт как я выше сказал можно в произвольный момент стартонуть и он начнет дешифровку сам.. с любого места.. сам ключ вычислит из пакета (сесть/встать).. а вот когда ХКОР- приступил к изменению ДЛЛ то начались проблемы... нужно было при старте (заходе в игру) найти етот ключ.. и там мы не располагаем пакетиком удобным который каждый раз 1 и тотжэ (сесть/встать).. там первые пакеты- рандом.. обращать впринципе надо внимание тока на 4 первых пакета .. т.е. когда ты выбираеш сервер- и жмеш- "ОК" то то логин сервер соединяет тебя с гейм сервером... когда ты видиш на екране выбор персонажа для загрузки- ето уже гейм сервер работает.. к етому моменту отправляется 2 и приходит 2 пакета...
1-й пакет- исходящий он даже на шифрованном серванте не шифруется- он передается серверу без шифровки- типа инициализации соединения.. 2-й пакет: ответ сервера на етот пакет- пакет на инициализацию скриптографии (шифра).. пакет всегда 1 и тотже заполненый нулями и единицами в ХЕКСЕ но с 2 по 6 байты заполнен каждый раз (при новом логине) рандом байтами.. в етих байтах (4 байта с 2 по 6) есть начальные данные для вычисления начального ключа- для обеих алгоритмов , входящего и также исходящего.. 3-й пакет- исходящий в нем запрос на выбор персонажа для определенного логина.. а 4-й пакет- ответ сервера на визуализацию (для текушего акаунта текуший персонаж такойто).. етот 4-й пакет очень похож на пакет ЮЗЕР ИНФО.. чтоюы можно было визуализировать на екране перса которого выбираеш- в етом пакете он полностью описывается.. шмот, хп,мп, расса, класс, лвл и т.д. ..
у всех будет так что 1 и 2 пакеты- не шифруются.. так как исходные данные для вычисления начального ключа присылаются сервером во 2-м пакете..
начиная с 3-го пакета- исходящего и 4-го входящего данные уже зашифрованы.. с применением начального ключа...
у меня получилось так что ключ начальный совпадает для двух алгоритмов- и входящего и исходящего.. 3 и 4 пакеты- шифруются одним и темже ключем..а дальше ключ изменяется уже разными алгоритмами..
задача человека- в етом месте понять как из 2-го (входящего) пакета (в котором присылаются 4 байта исходных данных- типа условия задачи) получить 8 байтов ключа входящего и исходящего.. ну вот в моем случае ключ (начальный) входящий и исходящий- совпал.. 1 и тотже.. поетому задача немного сократилась..нужно было получить из 4-х байтов (исходных) 8 байтов ключа (начального) ..
отловили 1 лог.. методом подбора подобрали ключ для дешифровки 4-го пакета и 3-го тоже.. так как там используются ЛОГИН-НЕЙМ (в 3-м исходящем) и ЧАР НЕЙМ (в 4-м входящем) зная то что должно там быть (имя моего персонажа и логин нейм в юникоде), т.е. зная пакет- как он должен выглядеть- мы можем ключ вычислить.. (по имени персонажа) .. аналогично тому как я уже описывал что выяснил что используется обычный ксор на ключ для шифровки данных в пакете.. на етом етапе мы выяснили что ключ начальный- совпал для 3 и 4 пакета (исходящего и входящего).. вот дальше сложней было..
я приведу пример:
ДАНО:
3B C6 2D 02
НАЙТИ:
b9 55 00 00 37 43 00 00
задача была вывести закономерность как из исходных данных которые приходят во втором пакете (входящий) 4 байта найти 8 байтов ключа (начального).. формулу вывести.. и с виду логики нет никакой.. закономерности не просматривается.. но есть несколько методов математических которые возможно приведут к успеху (не факт) ... первое- что подумалось- используется ксор чегото на что то.. так как всё что выше было решено применяло ксоринг.. но манипуляция с числами некчему не привела... поетому был выбран такой еще 1 метод очень скользкий и трудоемкий.. отмониторить таких пар: ДАНО-НАЙТИ очень много.. и посматреть на них с верху.. особенно на те пары в которых повторятся значения.. ну какието числа повторятся.. и в результате (лог не полный, логов было больше намного, трудоемко, каждый раз заного логиниться с нуля..) было получены пары (ДАНО- НАЙТИ):
1************************
3B C6 2D 02
b9 55 00 00 37 43 00 00
//2 xor 43= 41 //2D xor 1A=37
2************************
F1 A5 6E 77
73 36 00 00 74 36 00 00
//77 xor 36 =41 //6E xor 1A = 74
3************************
F4 FF 13 48
76 6c 00 00 09 09 00 00
//48 xor 9 =41 // 13 xor 1A= 09
4************************
90 BA 2C 12
12 29 00 00 36 53 00 00
//12 xor 53= 41 //2C xor 1A= 36
5************************
0D A0 E3 42
8f 33 00 00 f9 03 00 00
//42 xor 3= 41 //e3 xor 1a= f9
6************************
E5 D5 3C 44
67 46 00 00 26 05 00 00
//44 xor 5=41 //3C xor 1a= 26
7************************
6A 99 F2 77
e8 0a 00 00 e8 36 00 00
//77 xor 36=41 // f2 xor 1a= e8
8************************
78 C6 E8 34
fa 55 00 00 f2 75 00 00
//75 xor 34=41 //e8 xor 1f= f2
************************
теперь алгоритм получения начального ключа- стал понятен.. и КОР- его за 5 сек в ДЛЛ переложил.. и пакетхак заработал на шифрованном сервере-)) нефиг делать-)
обрати внимание на первый и последний лог.. во втором байте исходные даннные совпали с резултатом.. ето сразу наводит на мыслдь... если честно я мониторил такие вот пары значений до тех пор пока не попался повтор 77 в 4-м байте условия приводит к результату 36 в шестом байте ключа... это повтор.. для одних и техже исходных данных получили одинаковый результат.. дальше просто подумали и всё понятно стало.. каждый байт в ключе получается путем ксора исходных данных на константу, для каждого порядкового байта в исходных байтах своя.. а 3-4 и 7-8 байты в ключе всегда =0

xkor
30.01.2008, 01:47
и КОР- его за 5 сек в ДЛЛ переложил.. и пакетхак заработал на шифрованном сервере-)) нефиг делать-)
угу.., за 5 сек.., да я пока пакетхак доделал чтоб он мог разные алгоритмы на входящий и исходящий траф юзать и довёл до ума длл тебе на тест 7 раз посылал))), и ещё пока твой скрипт дооптимизровал чтоб он нормально и быстро в длл работал...

Добавлено спустя 1 минуту 48 секунд:
ЗЫ смотря на итоговый алгоритм невольно думаю, и чегож админы нанюхались чтоб такое порадить.., куча ифов, ксоры туда сюда.., бррр жуть...

30.01.2008, 19:47
Какой это сервер ?
И почему я задаю этот вопрос в пятый раз а вы удаляете его ??

xkor
30.01.2008, 20:51
Какой это сервер ?
И почему я задаю этот вопрос в пятый раз а вы удаляете его ??
потому что это секрет)

30.01.2008, 23:31
Какой это сервер ?
И почему я задаю этот вопрос в пятый раз а вы удаляете его ??
потому что это секрет)

Тогда все это бесполезное занятие

ChiterEPT
31.01.2008, 00:37
Тогда все это бесполезное занятие
Бесполезное занятие? :shock: :shock: :shock: Если ты скажешь Ворону в лицо, что все его мучения это "бесполезное занятие" он тебя :evil: %)
Целое руководство по дешифровке он тут накатал, а ты говоришь....
Хотя конечно, если ты расчитывал что тебе расскажут что это за серв и подарят те newxkor.dll с готовыми алгоритмами, то для тебя это "бесполезное занятие"

xkor
31.01.2008, 03:09
newxkor.dll
я конечно польщён но этот файл называется newxor.dll ))) ибо меняет алгоритм шифрации XOR)

ddi82
01.02.2008, 12:37
Народ вижу вы тут отлично разбираетесь, разломали алгоритм, может и мне поможете, 2 месяц ломаю голову, на моем севере, XOR ключ герерируется полностью, на основании стандартно присылаемого в Init пакете, практически расшифровал, осталась одна часть, козалось бы она легкая, но я пока так и ломаю над ней голову:
час нового ключа, четко генерируется от 1 байта входящего пакета, я уже на 20 раз проверил, чтобы не было в других байтах до и после этого пакета, данная часть ключа всегда совершенно четко относится к всеголишь одному байту
вот собранные мною данные:
байт = часть ключа
18 = AB CF 8E F9
17 = 05 B3 96 0D
16 = 19 46 99 9D
15 = 94 B1 FE 72
14 = 2C 16 DD E1
13 = 0E 30 4D 5E
12 = AA 3C D8 32
11 = 31 C3 C5 BB
10 = 11 AC 0C 54
0F = FB A3 C4 08
0E = 5F E5 3F 94
0D = 2A 41 CC 6E
0C = D2 AD 13 A6
0B = 04 FF 73 5D
0A = 30 48 3E D7
09 = 87 EF EB EF
08 = 77 D4 02 EB
07 = 31 B9 8A 93
06 = 65 27 DD 3F
05 = C0 90 52 51
04 = 78 8E D1 97
03 = BA 8D E1 DC
02 = 36 27 9C 10
01 = 9D 89 39 0A
00 = DD E7 80 BE

сколько не пытался, закономерности никакой так и не нашел, пока решение данной проблемы обошол частично, просто все известные части собрал в масив и в зависимости от "входящего байта" подставляю нужный элемент из масива

QaK
01.02.2008, 13:21
А чем тебя твой вариант не устраивает? массив небольшой, значений немного? Может это именно так и реализованно?

ddi82
01.02.2008, 14:12
Как это небольшой? :)
это всего значения от $00 до $18 я привел....
а их $FF т.е. 255 должно быть :((
я досихпор даже половину не собрал, чуть больше сотни сейчас у меня, бот вылетает - лезу смотрю лог пакетов, вычисляю новый ключ :shock:

xkor
01.02.2008, 15:21
а их $FF т.е. 255 должно быть :((
я досихпор даже половину не собрал, чуть больше сотни сейчас у меня, бот вылетает - лезу смотрю лог пакетов, вычисляю новый ключ :shock:
ну помойму не сложно сделать небольшой скриптик который будет вычислять ключ по пакету и запинать для какого он байта, и те останется всеголиш произвести несколько сотен заходов в игру))))
ещё можно сделать скрипт заменяющий пакет инициализации ключа от сервера на то что те надо и на основе ответа клиента вычисляющий реальный ключ после чего опять посылающий клиенту пакет инициализации (уже с новым значением, но на этот раз этот пакет уже придётся зашифровать ключем который мы тока что получили) и опять принимающий ответ и вычисляющий новый ключ и так по кругу пока всю таблицу не составиш)

VORON
10.02.2008, 02:20
Товарищи- ПРОГЕРЫ,ЮЗЕРЫ (нестандартного ПО),ЛАМЕРЫ, ВМЗешники.. седня мысль пришла- задумайтесь.. есть ДЛЛ- которая трафик дешифрирует и шифрует в любых направлениях.. оч удобно и классно.. само собой для некоторых это станет- товаром- купли/продажи под какойто сервак чтоб заточего было.. и тут вот возникает проблема.. в ету ДЛЛ- (готовую откомпиленую) можно засунуть код очень не приятный для юзера..
например:
ситуация 1: если от сервера получен пакет с текстом в чат и текст в нем 9878765676567 то.. заменить пактет на что то... типа вылет с критической ошибкой..
ситуация 2: (извращенный способ) заводим заранее чара на серваке с фиксированным именем (заранее прописанным в ДЛЛ проданной).. и как тока юзер- пытается етому чару отослать ПМ-сообщение то заменяем пакет на другой... на какой?? хм-)) ну на любой-)
развести чаром на ПМ сообщение- нефиг делать..
вопщем.. появились новые возможности у проги- появились новые проблемы.. раздеть до гола могут- за пару сек...
ЮЗЕРАМ и ВМЗЕШНИКАМ- нестоит покупать ДЛЛ у непроверенных людей которых вы незнаете..
обращайтесь к тем кто всё время с вами-)) ДОБРЫЙ ХКОР-) и его доблестная свита-)

12.02.2008, 13:55
Прочитал всю тему от первого поста до последнего, могу сказать что читал и захлёбывался от удовольствия видя реальную мысль с коментами =) Улыбают юзеры которые хотят всё и сразу, читая эту тему для себя сделал вывод богата русская душа=) и как всегда русских тянет на халявненькое, ну в принципе дляэтого и содавалась тема.
P.S. респект и уважуха вам, за то что оставили тему открытой и дали глянуть на свои расчёты
P.P.S. Инфа бесценна
P.P.P.S. сам прогу не юзал но собираюсь =) возникает вопрос например для того что бы выучить скил не из своей профы нужно подойти к нужному по рассе тренеру и открыть диалоговое окно и тупо активировать пакет на изучение скила с нужным ID?
P.P.P.P.S. сори за флуд :P

14.02.2008, 17:11
Voron, привет.
Респект за топик - полный! 8)
Хоть кто-то действительно ковыряется а не отписывается - да вы лохи, ваша проблема решена! и т.д.
Возможно не хватает опыта, возможно со стороны это блуждание в темной комнате - смешно, но результат то есть!
Пока читал, никак не мог въехать, че у вас такая белиберда получается с шифрованием пакетов, собирался уже дочитать и написать чтоб с настройками самого пакетхака помучались, ан сами разобрались :good:
Сам юзал l2phx.
Вопрос - (про название сервака не спрашиваю), скажите какая защита стоит - ГГ, антибот, la2guard c RSA? че там.
Потом - я щас просто копаю с самого начала (хотя если ваш вариант подходит к моему случаю - то моя проблема решена)
Еще скажи, какую связку использовал - клиент+пакетхак(и писал скрипты для управления) или бот+пакетхак(тада точно не мой случай %) )
Хотелось бы пообщаться на тему шифрования пакетов для л2. Может ктонить из вас разбирал процедуру входа на логин сервер (информация имеется, но необходимы уточнения применительно к моему случаю, чтобы собрать все в кучу)

Жду ответа.

P.S. ссылки на фтп не пашут - посмотреть не удалось.
Естессно хотелось бы попробовать ваше творение))

12.03.2008, 14:06
не смотря на положительный результат поиска алгоритма шифрования Вороном, сам процес остается довольно нетривиальным...
вот кто может найти логику
есть оригинальный пакет
2F 29 05 00 00 01 00 00 00 00
клиент его последовательно выдает
0B 9C 8F B3 80 81 86 9F 1C 8D
ED E2 FD D9 3E 37 14 65 FA E3
5F 18 F3 CF 0C 3D 32 FB E8 89
81 4E 01 15 6A 13 60 E1 66 FF
D3 C4 A7 2B D8 39 1E 97 F4 C5
F5 6A 55 91 D6 2F EC 9D 12 5B
E7 C0 8B C7 E4 75 4A 73 40 41
69 76 D9 4D 82 8B B8 99 FE F7
FB 0C BF A3 30 F1 B6 8F CC FD
DD 92 AD 49 6E 27 C4 D5 2A D3
0F 88 23 BF BC AD 62 EB 98 F9
F1 7E B1 85 9A 03 10 51 96 EF
83 74 D7 1B 88 A9 4E 87 A4 35
25 1A 05 01 06 1F 9C 0D 42 4B
57 70 BB B7 94 E5 7A 63 F0 B1
59 66 89 BD B2 7B 68 09 2E E7
AB BC EF 93 E0 61 E6 7F 7C 6D
21 6E 61 F5 CA F3 C0 C1 C6 DF
73 E4 07 0B 38 19 7E 77 54 A5
15 0A B5 71 36 0F 4C 7D 72 3B
07 E0 EB A7 44 55 AA 53 A0 21

Возможно конечно тут какой пропуск или лишнее вкропление...

QaK
12.03.2008, 14:19
DoomKopf, ты зачем шифт(или контрол) зажал при юзаньи скилла?
Конкретизируй, что за ло у тебя, это ты сидишь/стоишь, зажав кнопку юзанья скилла, или как? между этими пакетами есть какие-то вкрапленя, или нет, стоит ли галка не дешифровать трафик, или какие еще галки стоят/не стоят. Конкретней изъясняй ситуацию.

12.03.2008, 14:53
С4 656 трафик недешефрировался обход ксор ключа не включен
сидящий гном сидел с зажатым спойлом 1 лвл шифты контролы и альты не зажаты
PS вожможно не правильно вывел исходный пакет...

QaK
12.03.2008, 14:59
вожможно не правильно вывел исходный пакет...
скорее всего, сделай так, сядь в безлюдом месте без мобов/нпц и плееров, очисти лог пакетхака, включи запоминание пакетов, зажми спойл, секунд на 10-15, после этого отключай запоминание пакетов и сохраняй лог в файл, и сюда аттач. З.Ы. галку дешифровать и обход смены хкор ключа убрать.

VORON
22.03.2008, 07:41
не смотря на положительный результат поиска алгоритма шифрования Вороном, сам процес остается довольно нетривиальным...
вот кто может найти логику
есть оригинальный пакет
2F 29 05 00 00 01 00 00 00 00
клиент его последовательно выдает
0B 9C 8F B3 80 81 86 9F 1C 8D
ED E2 FD D9 3E 37 14 65 FA E3
5F 18 F3 CF 0C 3D 32 FB E8 89
81 4E 01 15 6A 13 60 E1 66 FF
D3 C4 A7 2B D8 39 1E 97 F4 C5
F5 6A 55 91 D6 2F EC 9D 12 5B
E7 C0 8B C7 E4 75 4A 73 40 41
69 76 D9 4D 82 8B B8 99 FE F7
FB 0C BF A3 30 F1 B6 8F CC FD
DD 92 AD 49 6E 27 C4 D5 2A D3
0F 88 23 BF BC AD 62 EB 98 F9
F1 7E B1 85 9A 03 10 51 96 EF
83 74 D7 1B 88 A9 4E 87 A4 35
25 1A 05 01 06 1F 9C 0D 42 4B
57 70 BB B7 94 E5 7A 63 F0 B1
59 66 89 BD B2 7B 68 09 2E E7
AB BC EF 93 E0 61 E6 7F 7C 6D
21 6E 61 F5 CA F3 C0 C1 C6 DF
73 E4 07 0B 38 19 7E 77 54 A5
15 0A B5 71 36 0F 4C 7D 72 3B
07 E0 EB A7 44 55 AA 53 A0 21

Возможно конечно тут какой пропуск или лишнее вкропление...
думаю если ты понял вапще суть того что изложено в етом топе то ты понял что ключ для шифровки/дешифровки пакета вычисляется из предыдущего пакета.. причем раздельно для входящего и исходящего трафика- независимо- если ты сам сказал что тут вкрапления возможны- то сори- всё теряет смысл...
вкраплений быть не должно.. и покет в оригинале сделай чтоб 8 нулей подряд было.. как ето сделать? в топе уже всё обмусолено 100 раз.. у тебя пакет мало нулей содержит исходный.. мало того.. задачу надо ставить начиная с того- ИСХОДЯЩИЙ ТРАФ ИЛИ ВХОДЯЩИЙ?.. вопщем если ты читал тему- то постановка задачи начинается с лога.. причем без всяких вкраплений.. с указанием вход/выход (для клиента).. и чтоб в исходнов виде тестируеый пакет имел 8-10 и больше нулей подряд... нули дают нам шанс отловить ключ.. я нехачу объяснять то что в етом топе уже написано- не поленись прочти еще раз..

Polymorph
23.04.2008, 19:37
попал в такой вот тупик:
при анализе дешифрованного пакетхаком (пх) трафика в зависимости от установки флага не дешифровать трафик, хвосты пакетов могут изменятся от запроса к запросу или оставатся постоянными во всех пакетах.

2voron, если читаешь это сообщение, оставь в личку свой номер аськи, есть желание задать пару вопросов по теме

Добавлено через 23 часа 44 минуты
Вот ещё отловил небольшой кусок трафика.
Без дешифразии и обхода ксор ключа.

Исх: 00EA0200000907545603090B01070254545607000255560051 00535704075508540107015300565556010605045103085108 51560454065508020951560153065504530056565301090209 01515451095556090304070555040655040609045101080806 05520604010754030652550655555101020454035554015751 55055205540751515507025353005205520701540003050508 0605050603000D08010709035103075309510607540A505602 52040555510253000854045256060209000803535601050055 060856040D0607520607040A06010454040005020454000952 53050401040505015251520D065108095453000D0102035453 0105030856540702540B06DC4F614F
Вх: 00014E56D297CC12448F3905F61802C0C6E8CD9C172253C17C 6A158D279D914CCACBBA476A0B6DB260086A7C8E6AC7864DF4 21AEC622C6B3B0979B2120218AB295C73081325DA5183AFAD4 4075792281D4E9E34D229DED43B895711E52219D142E102E2E 9114237F19EFC318349EE1B3A0C3E9B8784BABD03AB41B7EF7 59BE2F2A165C17A6E22CEB892F886BE056287347948EED196D 61F8938D24B016975168CFF4678BDB22091D95C9DC0BC777C2 1EABB89D7BC5082BA05F7ED414ED3EA7BEC6C881008419428F DEB76C84FA9BF66505DE7E8B138F040F90028E0AB519C6ABDC 3022B470DC02A1B2BA5DE6EC8CAA574F7CE68ED870DEE06273 3EDC23197833A680337C6712D0B0AA6270E54C5534472B0763 BB394C3F30350D94676BB03EA3C919341A065D5314809AA988 5F65739C7EE96B4BF34767D5BF6858058E8D00108DBDCBA63C 59B37168059A60F059F67622F51689E7EBA4B7B945E36DB59A 601C748D9B4FDD1DDC95A0F93C4ACFA76BB78901817C6E2D63 362CCF20B37DEAF3D63B397AFE2A7986A7145D80BFFE6B5819 10125676DBE43C59C98E5D9B1CB6E5F5764572EC5E77F499FE 157F6285AB4C6108C7B482896D2F6D98B6B189A55CCAEC234C CD3F8BA74C2606E6FCE33A1145F8B1E3B31422F218AFEEDBBF D7F89EB8730EF31E4D1107949AE0F2F9ED05345526AC171546 39C038126C97A05C4EF4BF990D9C
Исх: FDF08C16C148E54CB3B01CAE33A45BF6A1DDD20850D0346B68 5D9999385465
Вх: C03BF11D717D3A638FBC946AF6B70987512DBEE4A77A6385BB 1633C043C92DFEB9148F6661FFC4B930A745E76B949B1052C8 F157927666031EAD494E1EDC8E0D05965F879E2AB9A214CA46 928A274C513EE8F6FC612A2126D6D05BE2EDEFE43FD49A723B B1E6CBE76033A864FCC75D589E8271D4B2B5987CBFD97AA371 028438672F414F9D81028E6033A864FCC75D589E8271D4B2B5 987CBFD97AA371028438672F414F9D81028ECF7B5C1248B2EB 93C2426DAF17DA696A0BC4F57A1920E9B56DF186102D777262 A83194F5D57FC1D695253ECA49F22B2518E901CC3D9AB13547 D1D791CBFFBED48EE8F1D5DC1A5AF3A2A125725BB113DFCC58 928B4251DBDC78C6C5C95EC1CF803462987206E1CFBCB465FC C17C6456211FAA7A81EBCDFD73A4F098AF252B6A851ACB2E5A BD7C5E816F6B070FEB528229FE8139BFBCD8ACBF09BC621F14 FFD624
Исх: ACDEF899EC8BB9D1D8F5 (XX XOR 2D)
Вх: D4409B4FC2788B3F89
Вх: B5 (25 XOR 90)
Исх: ACDEF899EC8BB9D1C2EF (XX XOR 2D)
Исх: ACDEF899EC8BB9D1CCE1 (XX XOR 2D)
Вх: D4409B4FC2788B3F9F +16
Исх: ACDEF899EC8BB9D1F6DB (XX XOR 2D)
Исх: ACDEF899EC8BB9D1E0CD (XX XOR 2D)
Вх: BC (25 XOR 99) +9
Исх: ACDEF899EC8BB9D1EAC7 (XX XOR 2D)
Исх: ACDEF899EC8BB9D194B9 (XX XOR 2D)
Исх: ACDEF899EC8BB9D19EB3 (XX XOR 2D)
Исх: ACDEF899EC8BB9D188A5 (XX XOR 2D)
Исх: ACDEF899EC8BB9D1B29F (XX XOR 2D)
Исх: ACDEF899EC8BB9D1BC91 (XX XOR 2D)
Исх: ACDEF899EC8BB9D1A68B (XX XOR 2D)
Вх: D4409B4FC2788B3FA5 +6 (каждый 4й раз идёт + 16)
Исх: ACDEF899EC8BB9D1507D (XX XOR 2D)
Вх: B7 (25 XOR 92) -7
Исх: ACDEF899EC8BB9D15A77 (XX XOR 2D)
Исх: ACDEF899EC8BB9D14469 (XX XOR 2D)
Исх: ACDEF899EC8BB9D14E63 (XX XOR 2D)
Исх: ACDEF899EC8BB9D17855 (XX XOR 2D)
Вх: D4409B4FC2788B3FAB +6
Исх: ACDEF899EC8BB9D1624F (XX XOR 2D)
Исх: ACDEF899EC8BB9D16C41 (XX XOR 2D)
Вх: BE (25 XOR 9B) +9
Исх: ACDEF899EC8BB9D1163B (XX XOR 2D)
Исх: ACDEF899EC8BB9D1002D (XX XOR 2D)
Исх: ACDEF899EC8BB9D10A27 (XX XOR 2D)
Исх: ACDEF899EC8BB9D13419 (XX XOR 2D)
Исх: ACDEF899EC8BB9D13E13 (XX XOR 2D)
Исх: ACDEF899EC8BB9D12805 (XX XOR 2D)
Исх: ACDEF899EC8BB9D1D2FC (XX XOR 2E) СМЕНА !!!
Вх: D4409B4FC2788B3FB1 +6
Исх: ACDEF899EC8BB9D1DCF2 (XX XOR 2E)
Исх: ACDEF899EC8BB9D1C6E8 (XX XOR 2E)
Вх: C9 (25 XOR EC) +51
Исх: ACDEF899EC8BB9D1F0DE (XX XOR 2E)
Исх: ACDEF899EC8BB9D1FAD4 (XX XOR 2E)
Исх: ACDEF899EC8BB9D1E4CA (XX XOR 2E)
Исх: ACDEF899EC8BB9D1EEC0 (XX XOR 2E)
Исх: ACDEF899EC8BB9D198B6 (XX XOR 2E)
Исх: ACDEF899EC8BB9D182AC (XX XOR 2E)
Исх: ACDEF899EC8BB9D18CA2 (XX XOR 2E)
Вх: D4409B4FC2788B3FC7 +16
Исх: ACDEF899EC8BB9D1B698 (XX XOR 2E)
Вх: C0 (25 XOR E5) -7
Исх: ACDEF899EC8BB9D1A08E (XX XOR 2E)
Исх: ACDEF899EC8BB9D1AA84 (XX XOR 2E)
Исх: ACDEF899EC8BB9D1547A (XX XOR 2E)
Исх: ACDEF899EC8BB9D15E70 (XX XOR 2E)
Исх: ACDEF899EC8BB9D14866 (XX XOR 2E)
Исх: ACDEF899EC8BB9D1725C (XX XOR 2E)
Вх: D4409B4FC2788B3FCD +6
Исх: ACDEF899EC8BB9D17C52 (XX XOR 2E)
Вх: CB (25 XOR EE) +9
Исх: ACDEF899EC8BB9D16648 (XX XOR 2E)
Исх: ACDEF899EC8BB9D1103E (XX XOR 2E)
Исх: ACDEF899EC8BB9D11A34 (XX XOR 2E)
Исх: ACDEF899EC8BB9D1042A (XX XOR 2E)
Исх: ACDEF899EC8BB9D10E20 (XX XOR 2E)
Исх: ACDEF899EC8BB9D13816 (XX XOR 2E)
Исх: ACDEF899EC8BB9D1220C (XX XOR 2E)
Исх: ACDEF899EC8BB9D12C02 (XX XOR 2E)
Исх: ACDEF899EC8BB9D1D6F9 (XX XOR 2F) СМЕНА !!! (2Е -- 26 раз)
Исх: ACDEF899EC8BB9D1C0EF (XX XOR 2F) 9F 5B 17 D3 9F 5B 17 D39 F 5B 17 D3 9(!)
Вх: D4409B4FC2788B3FD3 +6
Исх: ACDEF899EC8BB9D1CAE5 (XX XOR 2F)
Исх: ACDEF899EC8BB9D1F4DB (XX XOR 2F)
Вх: C2 (25 XOR E7) -7
Исх: ACDEF899EC8BB9D1FED1 (XX XOR 2F)
Исх: ACDEF899EC8BB9D1E8C7 (XX XOR 2F)
Исх: ACDEF899EC8BB9D192BD (XX XOR 2F)
Исх: ACDEF899EC8BB9D19CB3 (XX XOR 2F)
Исх: ACDEF899EC8BB9D186A9 (XX XOR 2F)
Исх: ACDEF899EC8BB9D1B09F (XX XOR 2F)
Исх: ACDEF899EC8BB9D1BA95 (XX XOR 2F)
Вх: D4409B4FC2788B3FD9 +6
Исх: ACDEF899EC8BB9D1A48B (XX XOR 2F)
Исх: ACDEF899EC8BB9D1AE81 (XX XOR 2F)
Вх: CD (25 XOR E8) +1
Исх: ACDEF899EC8BB9D15877 (XX XOR 2F)
Исх: ACDEF899EC8BB9D1426D (XX XOR 2F)
Исх: ACDEF899EC8BB9D14C63 (XX XOR 2F)
Исх: ACDEF899EC8BB9D17659 (XX XOR 2F)
Исх: ACDEF899EC8BB9D1604F (XX XOR 2F)
Исх: ACDEF899EC8BB9D16A45 (XX XOR 2F)
Исх: ACDEF899EC8BB9D1143B (XX XOR 2F)
Исх: ACDEF899EC8BB9D11E31 (XX XOR 2F)
Вх: D4409B4FC2788B3FEF +16
Исх: ACDEF899EC8BB9D10827 (XX XOR 2F)
Вх: C4 (25 XOR E1) -7
Исх: ACDEF899EC8BB9D1321D (XX XOR 2F)
Исх: ACDEF899EC8BB9D13C13 (XX XOR 2F)
Исх: ACDEF899EC8BB9D12609 (XX XOR 2F)
Вх: D4409B4FC2788B3FF5 +6
Исх: ACDEF899EC8BB9D1D0E0 (XX XOR 30) СМЕНА !!! (2F -- 25 раз)
Исх: ACDEF899EC8BB9D1DAEA (XX XOR 30)
Вх: CF (25 XOR EA) +9
Исх: ACDEF899EC8BB9D1C4F4 (XX XOR 30) (F4 xor 0A) => FE xor 30 => CE
Исх: ACDEF899EC8BB9D1CEFE (XX XOR 30) (FE xor 36) => C8 xor 30 => F8
Исх: ACDEF899EC8BB9D1F8C8 (XX XOR 30) (C8 xor 1A) => D2 xor 30 => E2
Исх: ACDEF899EC8BB9D1E2D2 (XX XOR 30) (D2 xor 0E) => DC xor 30 => EC
Исх: ACDEF899EC8BB9D1ECDC (XX XOR 30) (DC XOR 7A) => A6 xor 30 => 96
Исх: ACDEF899EC8BB9D196A6 (XX XOR 30) (A6 xor 16) => B0 xor 30 => 80
Исх: ACDEF899EC8BB9D180B0 (XX XOR 30) (B0 xor 0A) => BA xor 30 => 8A
Исх: ACDEF899EC8BB9D18ABA (XX XOR 30) (BA xor 8E) => 84 xor 30 => B4
Исх: ACDEF899EC8BB9D1B484 (XX XOR 30) (84 xor 0A) => 8E xor 30 => BE
Исх: ACDEF899EC8BB9D1BE8E (XX XOR 30) (8E xor 26) => 98 xor 30 => A8
Вх: D4409B4FC2788B3FFB +6
Исх: ACDEF899EC8BB9D1A898 (XX XOR 30) (98 XOR FA) => 62 xor 30 => 52
Вх: C6 (25 XOR E3) -7
Исх: ACDEF899EC8BB9D15262 (XX XOR 30) (62 xor 0A) => 6C xor 30 => 5C
Исх: ACDEF899EC8BB9D15C6C (XX XOR 30)
Исх: ACDEF899EC8BB9D14676 (XX XOR 30)
Исх: ACDEF899EC8BB9D17040 (XX XOR 30)
Исх: ACDEF899EC8BB9D17A4A (XX XOR 30)
Исх: ACDEF899EC8BB9D16454 (XX XOR 30)
Исх: ACDEF899EC8BB9D16E5E (XX XOR 30)
Вх: D4409B4FC2788B3F01 +6
Исх: ACDEF899EC8BB9D11828 (XX XOR 30)
Вх: C1 (25 XOR E4) +1
Исх: ACDEF899EC8BB9D10232 (XX XOR 30)
Исх: ACDEF899EC8BB9D10C3C (XX XOR 30)
Исх: ACDEF899EC8BB9D13606 (XX XOR 30)
Исх: ACDEF899EC8BB9D12010 (XX XOR 30)
Исх: ACDEF899EC8BB9D12A1A (XX XOR 30)
Исх: ACDEF899EC8BB9D1D4E5 (XX XOR 31) СМЕНА !!! (30 -- 26 раз)
Исх: ACDEF899EC8BB9D1DEEF (XX XOR 31)
Вх: D4409B4FC2788B3F17 +16
Исх: ACDEF899EC8BB9D1C8F9 (XX XOR 31)
Исх: ACDEF899EC8BB9D1F2C3 (XX XOR 31)
Вх: C8 (25 XOR ED) +9
Исх: ACDEF899EC8BB9D1FCCD (XX XOR 31)
Исх: ACDEF899EC8BB9D1E6D7 (XX XOR 31)
Исх: ACDEF899EC8BB9D190A1 (XX XOR 31)
Исх: ACDEF899EC8BB9D19AAB (XX XOR 31)
Исх: ACDEF899EC8BB9D184B5 (XX XOR 31)
Исх: ACDEF899EC8BB9D18EBF (XX XOR 31)
Вх: D4409B4FC2788B3F1D +6
Исх: ACDEF899EC8BB9D1B889 (XX XOR 31)
Исх: ACDEF899EC8BB9D1A293 (XX XOR 31)
Исх: ACDEF899EC8BB9D1AC9D (XX XOR 31)
Вх: C3 (25 XOR E6) -7
Исх: ACDEF899EC8BB9D15667 (XX XOR 31)
Исх: ACDEF899EC8BB9D14071 (XX XOR 31)
Исх: ACDEF899EC8BB9D14A7B (XX XOR 31)
Исх: ACDEF899EC8BB9D17445 (XX XOR 31)
Исх: ACDEF899EC8BB9D17E4F (XX XOR 31)
Исх: ACDEF899EC8BB9D16859 (XX XOR 31)
Вх: D4409B4FC2788B3F23 +6
Исх: ACDEF899EC8BB9D11223 (XX XOR 31)
Вх: CA (25 XOR EF) +9
Исх: ACDEF899EC8BB9D11C2D (XX XOR 31)
Исх: ACDEF899EC8BB9D10637 (XX XOR 31)
Исх: ACDEF899EC8BB9D13001 (XX XOR 31)
Исх: ACDEF899EC8BB9D13A0B (XX XOR 31)
Исх: ACDEF899EC8BB9D12415 (XX XOR 31)
Исх: ACDEF899EC8BB9D12E1F (XX XOR 31)
Исх: ACDEF899EC8BB9D1D8EA (XX XOR 32) СМЕНА !!! (31 -- 26 раз)
Исх: ACDEF899EC8BB9D1C2F0 (XX XOR 32)
Вх: D4409B4FC2788B3F29 +6
Исх: ACDEF899EC8BB9D1CCFE (XX XOR 32)
Вх: C5 (25 XOR E0) -F
Исх: ACDEF899EC8BB9D1F6C4 (XX XOR 32)
Исх: ACDEF899EC8BB9D1E0D2 (XX XOR 32)
Исх: ACDEF899EC8BB9D1EAD8 (XX XOR 32)
Исх: ACDEF899EC8BB9D194A6 (XX XOR 32)
Вх: D4409B4FC2788B3F3F +16
Исх: ACDEF899EC8BB9D19EAC (XX XOR 32)
Вх: CC (25 XOR E9) +9
Исх: ACDEF899EC8BB9D188BA (XX XOR 32)
Исх: ACDEF899EC8BB9D1B280 (XX XOR 32)
Исх: ACDEF899EC8BB9D1BC8E (XX XOR 32)
Исх: ACDEF899EC8BB9D1A694 (XX XOR 32)
Исх: ACDEF899EC8BB9D15062 (XX XOR 32)
Исх: ACDEF899EC8BB9D15A68 (XX XOR 32)
Исх: ACDEF899EC8BB9D14476 (XX XOR 32)
Исх: ACDEF899EC8BB9D14E7C (XX XOR 32)
Вх: D4409B4FC2788B3F45 +6
Исх: ACDEF899EC8BB9D1784A (XX XOR 32)
Вх: C7 (25 XOR E2) -7
Исх: ACDEF899EC8BB9D16250 (XX XOR 32)
Исх: ACDEF899EC8BB9D16C5E (XX XOR 32)
Исх: ACDEF899EC8BB9D11624 (XX XOR 32)
Вх: D4409B4FC2788B3F4B +6
Вх: CE (25 XOR EB) +9

F1 BD 79 35 F1 BD 79 35 F1 BD 79 35 F1 -2D - последовательность "хваста" генерируемого пакета
C2 8E 4A 06 C2 8E 4A 06 C2 8E 4A 06 C2 -2E
9F 5B 17 D3 9F 5B 17 D3 9F 5B 17 D3 9(F) -2F
0A 4E 82 C6 0A 4E 82 C6 0A 4E 82 C6 0A -30
5F 93 D7 1B 5F 93 D7 1B 5F 93 D7 1B 5F -31
A0 E4 28 6C A0 E4 28 6C A0 E4 28 6C A0 -32


4E 56 D2 97 CC 12 44 8F - xor ключ
D4 40 9B 4F C2 78 8B 3F 45 - пакет в зашифрованом виде
64 1F 00 00 00 00 00 00 00 - пакет в расшифрованом виде

Кое-какие мысли в голову идут, но пока только о генерации шифрованых пакетов. Расшифровать имеющиеся пакеты к должному виду не выходит.

Добавлено через 7 минут
"хвост" пакета дополняется значением из тех последовательностей что внизу лога. причём начинатся "дополнение" чожет с любого символа последовательности, и идти как влево так и вправо.
эти последовательности (1, 3, 5) и (2, 4) аналогичны между собой, но чередование в них идёт разное, но всегда по порядку и циклически. причём для 2f нехватает одного символа для завершения.
видимо функция берёт символы по мере необходимости и может перескочить на новую в любой момент (по запросу или по каким либо условиям).

ASSA
25.04.2008, 07:09
Посмотрите плиз кто знает
http://coderx.ru/showthread.php?t=267

VORON
28.04.2008, 13:37
предлагаю изменить способ общения.. набор цифр лога мало инфы в себе несет...
по возможности- нужен лог без дешифровки+ дешифровка к нему + жэлательно каждому пакету ключ указывать..
т.е. табличка из 3-х колонок.. в первом столбце- пакет отловленый во втром дешифровка к нему, в третьем- ключ для того чтобы из первого столбца получить второй..
из етих данных нужно думать как ключ меняется от пакета к покету..

Polymorph
28.04.2008, 16:06
Тогда вдогонку своему посту выше - архив:
http://slil.ru/25737435
В нём лог ПХ без дешираации и без обхода смены ксор ключа + xls документ с таблицей как предложил VORON

Заметка: Если отловить ПХ пакет на селф баф (вампирик например), и потом без изменений послать такой же - сервер его скушает и выполнит баф. Но если после клон-пакета попытатся в игре куда нибуть побежать: чар бежит в самые разные стороны. т.е. сервер продолжает дешифровать, думая что предидущий пакет (клон-пакет) был зашифрован правильно. И как следствие - если хотя бы 1 пакет будет зашифрован не верно, все остальные от клиента будут для сервера хоть и верными, но нести не правильную инфу. В итоге если ПХ клезет хоть одним пакетом, то всё общение клиент-сервер будет не верным, в итоге, клиент должен сдисконнектнутся. И вылетит ПХ. Омг, чёж делать то.

ASSA
29.04.2008, 20:26
Перед вводом новой защиты был апдейт, и длл-ки заменили.
Я вообще понимаю что дешифрование/шифрование идет в длл.
Но я не хотел бы заморачиваться и там копаться, хотя можно было бы если с кем то на пару хотябы. Я вообще хотел использовать дешифратор на делфи или на л2пх, так как известно что при входе на ГС я получаю криптини с ключем, потом этот ключ используется для шифрации входящего трафа и меняется на длинну пакета(вроде или типа чето в етом духе) и исходящего с таким же изменением. то есть у нас уже 2 ключа, но для разных трафов. Поэтому нада дергать ключ на стадии логина и включать скрипт, чтоб он иммитировал изменения ключа(и серв них не просек). Вот чтоб я сделал еслиб был супер програмером=)))

Поправьте если вы знаете больше=)

nezabudkin
28.05.2008, 12:36
Уважаемый xkor, прошу у тебя помощи!
Недавно, на моем самом любимом игровом серве сделали обновление до С6 и поставили шифрование трафика. Сервер, видимо, в основе своей остался PTS С4, но с самописными добавками. Причем за последние 2 недели, админы дважды меняли алгоритм шифрования!!! Сначало вообще пакетхак все нормально дешифровывал. После первого обновления защиты пакетхак стал частично дешифровывать входящий трафик, и полную чепуху писать в исходящем. Но что интересно, метод дешифрации трафика от клиента совпал с Вороновским, его скриптик, выложенный в этом топике помог дешифровывать трафик от клиента, причем даже менять ничего в скрипте не понадобилось!!! Но после второго обновления защиты все стало гораздо хуже. Пакетхак может работать только в срытом режиме!!!, иначе клиент вываливается с критом, все ботопроги других производителей вообще перестали работать, соответственно ботов на сервере я тоже не вижу, это конечно приятно). Так вот, за последний месяц я перерыл кучу инфы по шифрованию гейм-сервера линейки, вдоль и поперек перечитал этот топик. И понял, что у меня на серве ,в общем то, используется алгоритм xor-шифрования взятый от C4, и немного подправленный. Теперь Вороновский вариант дешифрации мне не подходит, а вот алгоритм залошенный в newxor.dll очень даже годится! Во всяком случае, я почти расшифровал трафик от сервера! Трафиком от клиента еще пока не занимался, но с виду там используется такой же метод шифрования что и от сервера.

Так вот, что хочу узнать то, я занялся правкой newxor.dll, с делфи я хорошо дружу. Но в чужом коде тяжело разбираться... xkor, не мог бы ты прокоментировать, в какой последовательности в этой библиотеке вызываются функции, какие параметры им передаются, описать схему хранения данных (какие переменные за что отвечают).

Если у меня получится дешифровать трафик, то я выложу в этом топике мой вариант исходников для newxor.dll, возможно это многим поможет...

Byrger
29.05.2008, 11:03
Вообщем у нас клиент с сервером работают по 1111 протоколу и идёт шифрование пакетов... пакеты от К>ГС шифруются только Xor`ом, он ГС>к идут с доп шифрованием...
Собственно мне на днях подфортило с КруптИнит и он пришёл такого вида- 00 01 19 23 00 00 47 59 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
И все пакеты касшифровывались на ура! Без единого недочёта как от ГС>К так и от К>ГС тоесть доп шифрование находится в этом же КруптИнит.... А ключ пакет хак определили как 0х2319

Но атем я сделал релогин и мне пришёл КруптИнит в таком виде...
00 A5 06 E9 E5 F5 01 8F 26 36 C1 DF 2F 66 70 CB 8F 3F B4 D4 E4 F4 F4 15 25 35
Пакет хак определил ключ как 0хF5E5E906
И при этом он расшифровывал абсолютно неправильно пакеты как от сервера так и от клиетна...значит у нас ключ както по другому выглядит...Где-то в нулях загвоздка...
Вот пример криво дешифрованного пакета от клиента D5 F7 E0 F5 B1 A7 26 36 00 00 норм его вил это-2F 20 05 00 00 00 00 00 00 00

А вот пакет от сервера в котором я написал в белом чате qwerty чаром с ником BINGOOO
B0 06 A9 F3 ED 80 11 71 57 3B 77 EA 95 BA B5 4B 2F 3D 10 FE A7 8C 10 70 56 4D 76 0D 94 4C B4 9B 2E 4C 11 98 A4 82 13
(к сожелению не знаю в расшифрованном как будет)

PanAm
29.05.2008, 13:55
Byrger
В нормальном КриптИни по идее первые два байта 00 01, у тебя в первом случае так и есть, а во втором пакете 00 A5, или тут пакет уже зашифрован - а значит ты умолчал, что был еще 1 пакет перед ним, или хз )))

Byrger
29.05.2008, 18:57
Дело в том, что на сервере идёт доп шифрование, пакеты от клиента к серверу зашифрованы ХОРом, а от сервера ХОРом и поверх доп шифрование....Хмм... на шифровка начинается после Крупт инит...
Может ты не прав? иногда он даж на 00 BB начинается...

А так по теме: почему Пакет хак не смог расшифровать?

alexsl
01.06.2008, 08:53
привет всем,
в общем на серв поставили с недавних пор штфрацию, попробывал разобратся но есть пару вопросиков которые не могу решить.
на основе инфы с данной ветки, с трафиком от серва вроде все ок, здесь вопросов нет (вот процедурка на всякий случай, ключик выдерал из ответа сервера на юзанье скила в сидячем положении, как было предложено выше):

var
i,k,j: integer;
begin
i:=size;
for j:=0 to i div 8 do
begin
for k:=7 downto 0 do
begin
pck[k+(j*8)]:=pck[k+(j*8)] xor key[k];
// вот тут на серве дополнительное шифрование
if j>=8 then
pck[k+(j*8)]:=pck[k+(j*8)] xor key[k] xor key[k];
end;
end;
end.


но вот в отправке пакетов от клиента, немогу въехать как меняются первые 2 байта ключа.

юзал сидя скилл релакс в разные промежутки времени
обход смены хор ключа - вкл
не дешифровать трафик - выкл


46 44 07 00 E4 5F DC 5E 69 A6
B6 44 07 00 E4 5F DC 5E 99 A6
84 44 07 00 E4 5F DC 5E AB A6
B8 44 07 00 E4 5F DC 5E 97 A6
D4 44 07 00 E4 5F DC 5E FB A6
C0 44 07 00 E4 5F DC 5E EF A6
C4 47 07 00 E4 5F DC 5E EB A5
D8 47 07 00 E4 5F DC 5E F7 A5
B4 47 07 00 E4 5F DC 5E 9B A5
80 47 07 00 E4 5F DC 5E AF A5
B6 47 07 00 E4 5F DC 5E 99 A5
46 48 07 00 E4 5F DC 5E 69 AA
98 49 07 00 E4 5F DC 5E B7 AB
37 4C 07 00 E4 5F DC 5E 18 AE
27 4C 07 00 E4 5F DC 5E 08 AE
57 4C 07 00 E4 5F DC 5E 78 AE
37 4C 07 00 E4 5F DC 5E 18 AE


после прогонки через:


var
k,j: integer;
begin
key[0]:=pck[8];
key[1]:=pck[9];
key[2]:=pck[2];
key[3]:=pck[3];
key[4]:=pck[4];
key[5]:=pck[5];
key[6]:=pck[6];
key[7]:=pck[7];

for j:=0 to size div 8 do
begin
for k:=7 downto 0 do
begin
pck[k+(j*8)]:=pck[k+(j*8)] xor key[k];
// этот кусок наверно не нужен. еще не проверял. но и так работает
if j>=8 then
pck[k+(j*8)]:=pck[k+(j*8)] xor key[k] xor key[k];
end;
end;
end.


получаем:


2F E2 00 00 00 00 00 00 00 00 ; 69 A6 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; 99 A6 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; AB A6 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; 97 A6 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; FB A6 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; EF A6 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; EB A5 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; F7 A5 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; 9B A5 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; AF A5 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; 99 A5 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; 69 AA 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; B7 AB 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; 18 AE 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; 08 AE 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; 78 AE 07 00 E4 5F DC 5E ; 10
2F E2 00 00 00 00 00 00 00 00 ; 18 AE 07 00 E4 5F DC 5E ; 10


с 3 по 8 байты ключа вроде бы константы.

может какие нибудь идейки есть? в какую сторону копать?

ко времени может быть привязка? хотя как сервер может знать об времени отправления пакета, или в заголовке пакета есть время отправки?

зыы: при включенной опции "не дешифровать траффик" - на глаз цикличность и какие либо неизменные части не наблюдаются.
зыыы: в шифровани и дешифровке "не в зуб ногой" всю инфу подчерпнул из данной ветки.

Добавлено через 12 часов 57 минут
гыг, наступаю на одни и тежи грабли.
вот тежи пакеты (сидя юзаю релакс) в незашифрованном виде (сохранил из пх в текстовый файл. вроде как сохраняет не в шифрованном виде, убрав вкрапления)

039C54BE5329F5E03F030025
03460CC50974F5E03F030025
032EC146588FF5E03F030025
03F0C3CBBFBEF5E03F030025
035C8837A7E1F5E03F030025
03111547E4F6F5E03F030025
03057703060EF6E03F030025
0396FC62C92FF6E03F030025
03E510C02F6AF6E03F030025
03FD42672293F6E03F030025
033FD25769A0F6E03F030025
032A322625B4F6E03F030025
032696D0ACCEF6E03F030025
036BDF0456E7F6E03F030025
03308DD62A0FF7E03F030025
0346053ABB2CF7E03F030025
03B2C9A5A24FF7E03F030025
034A97AF6969F7E03F030025
03269FF6E488F7E03F030025
035F3BF0BAA5F7E03F030025
03101DB38AC2F7E03F030025
03D5CA845FEAF7E03F030025
0364A597B513F8E03F030025
0340ADDE3033F8E03F030025
03C1117C5C42F8E03F030025
032871577461F8E03F030025
03EE0F325476F8E03F030025
030F35D0B78FF8E03F030025
03BBCEE883B4F8E03F030025
03EE05528ACDF8E03F030025
034E1D839EF4F8E03F030025

вроде идеальные данные для расшифровки.
вот дальше возникает куча вопросов, допустим взял ключик который приходит от серва CryptInit F0 E8 B3 BF им декодирую потом с получившимся пакетом произвожу танцы с бубном? или сразу надо плясать?
т.е. с какого бока подступится?

Grinch
01.06.2008, 09:12
alexsl, зачем такая конспирация, что за сервер?

alexsl
01.06.2008, 11:43
Grinch, в общем не секрет, обычный региональный маленький сервак, каких наверно не одна тысяча, серв по естестенным причинам не упоменаю.
но а теперь по существу,
в стандартной(?) шифрации присутствует:
....
IncAsInteger(key, 0, size);
....
видимо из за этого эти 2 байта и изменяются, взникает вопрос,
при создании алгоритма они(разработчики шифрации)
могли выкинуть этот кусок из кода (т.е. переписывают полностью модуль шифрации)? или зашифрованный пакет шифруют еще раз.
зы: в общем запутался :( нид хелп ми

VORON
01.06.2008, 19:36
Grinch, в общем не секрет, обычный региональный маленький сервак, каких наверно не одна тысяча, серв по естестенным причинам не упоменаю.
но а теперь по существу,
в стандартной(?) шифрации присутствует:
....
IncAsInteger(key, 0, size);
....
видимо из за этого эти 2 байта и изменяются, взникает вопрос,
при создании алгоритма они(разработчики шифрации)
могли выкинуть этот кусок из кода (т.е. переписывают полностью модуль шифрации)? или зашифрованный пакет шифруют еще раз.
зы: в общем запутался :( нид хелп ми

они обычно полностью переписывают процедуру шифрования.. я не видел чтобы на стандартную шифрацию сверху новую накладывали.. хотя ето возможно но очень не економично к быстродействию..

Добавлено через 5 минут
цитата:

key[0]:=pck[8];
key[1]:=pck[9];
key[2]:=pck[2];
key[3]:=pck[3];
key[4]:=pck[4];
key[5]:=pck[5];
key[6]:=pck[6];
key[7]:=pck[7];

прикольно у них моск работает-)

alexsl
01.06.2008, 20:25
:D на это внимание не обращай, это ключик был, тестил то на пакете скилла.

key[0]:=pck[8];
key[1]:=pck[9];
key[2]:=pck[2];
key[3]:=pck[3];
key[4]:=pck[4];
key[5]:=pck[5];
key[6]:=pck[6];
key[7]:=pck[7];

в общем ковырял, ковырял, и пришел к этому:

//скилл
7E 94 00 00 B8 2A CD 1A 51 76
60 94 00 00 B8 2A CD 1A 4F 76
6A 94 00 00 B8 2A CD 1A 45 76
1C 94 00 00 B8 2A CD 1A 33 76
06 94 00 00 B8 2A CD 1A 29 76
08 94 00 00 B8 2A CD 1A 27 76
// нет пинг
B5 74 80 42 F0 00 CD 1A 1D EF 05 00 B8
//скилл
27 94 00 00 B8 2A CD 1A 08 76
29 94 00 00 B8 2A CD 1A 06 76
D3 97 00 00 B8 2A CD 1A FC 75
C5 97 00 00 B8 2A CD 1A EA 75
// сам себе в приват 1111111111111111
69 44 00 31 B8 1B CD 2B 51 44 00 31 B8 1B CD 2B 51 44 00 31 B8 1B CD 2B 51 44 00 31 B8 1B CD 2B 51 44 00 31 B8 1B CD 2B 51 44 00 31 B8 1B CD 23 51 75 00 02 B8 2A CD 79 51 07 00 61 B8 59 CD 72 51 1D 00 65 B8 4B CD 7E 51 75 00
3C 43 00 31 B8 1B CD 2B 04 43 00 31 B8 1B CD 2B 04 43 00 31 B8 1B CD 2B 04 43 00 31 B8 1B CD 2B 04 43 00 31 B8 1B CD 2B 04 43 00 31 B8 1B CD 2B 04 43 00 31 B8 1B CD 2B 04 43 00 31 B8 1B CD 1A 04 70 00 00 B8 49 CD 68 04 13 00 73 B8 42 CD 72 04 17 00 61 B8 4E CD 1A 04

пропустил с ключиком "51 76 00 00 B8 2A CD 1A" через:
(ключик взял из пакета юзскилл)

var
i,k,j: integer;
begin
key[0]:=pck[8]; //
key[1]:=pck[9]; // как вооще прикрутить к ключу, понемаю, что так не должно быть

for k:=size-1 downto 0 do
pck[k]:=pck[k] xor key[k and 7];
end.

получилось:

2F E2 00 00 00 00 00 00 00 00 ; 51 76 00 00 B8 2A CD 1A ; 10
2F E2 00 00 00 00 00 00 00 00 ; 4F 76 00 00 B8 2A CD 1A ; 10
2F E2 00 00 00 00 00 00 00 00 ; 45 76 00 00 B8 2A CD 1A ; 10
2F E2 00 00 00 00 00 00 00 00 ; 33 76 00 00 B8 2A CD 1A ; 10
2F E2 00 00 00 00 00 00 00 00 ; 29 76 00 00 B8 2A CD 1A ; 10
2F E2 00 00 00 00 00 00 00 00 ; 27 76 00 00 B8 2A CD 1A ; 10
A8 9B 80 42 48 2A 00 00 00 00 05 00 00 ; 1D EF 00 00 B8 2A CD 1A ; 13
2F E2 00 00 00 00 00 00 00 00 ; 08 76 00 00 B8 2A CD 1A ; 10
2F E2 00 00 00 00 00 00 00 00 ; 06 76 00 00 B8 2A CD 1A ; 10
2F E2 00 00 00 00 00 00 00 00 ; FC 75 00 00 B8 2A CD 1A ; 10
2F E2 00 00 00 00 00 00 00 00 ; EA 75 00 00 B8 2A CD 1A ; 10
38 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 39 00 31 00 02 00 00 00 63 00 43 00 61 00 73 00 68 00 59 00 65 00 61 00 64 00 31 00 ; 51 44 00 00 B8 2A CD 1A ; 75
38 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 31 00 00 00 31 00 31 00 00 00 33 00 00 00 63 00 72 00 50 00 73 00 68 00 68 00 54 00 61 00 64 00 00 00 ; 04 43 00 00 B8 2A CD 1A ; 89

тут интересны выделенные моменты. ксор 2го байт и ключа key[1] дает нужный результат - 31(75 xor 44), а вот реализовать в процедурке не знаю как.
VORON - посмотри своим зорким взглядом, че посоветуеш?

VORON
01.06.2008, 21:03
обход смены хор ключа - вкл
не дешифровать трафик - выкл
думаю что лучше ОБХОД СМЕНЫ КСОР КЛЮЧА- погасить
НЕДЕШЕФРИРОВАТЬ ТРАФИК- включить
так как в логе получится белеберда- то ето хорошо..
просто в l2DPX примени стандартный алгоритм который там по дефолту вбит.. и он заменит СТАНДАРТНЫЙ алгоритм и приведет лог к виду который ты видиш с галочкой выключеной.. а дальше етот стандартный алгоритм либо править нада либо дополнять чемто..
вопщем работать надо с логом который вапще никак не искажен пакетхаком- применением стандартной шифрацией.. ето лиш усложняет всё..
может какие нибудь идейки есть? в какую сторону копать?
недогоняю зачем если дешифранулось всё- кульно?

зыы: при включенной опции "не дешифровать траффик" - на глаз цикличность и какие либо неизменные части не наблюдаются.
цикличность- при условии что лог пакета ведется без вкраплений- говорит о том что новый ключ получается ксором предыдущего ключа на данные которые берутся из расшифровки предыдущего пакета либо из длинны пакета- т.е. константы.. так как мониторится 1 тотже пакет без вкраплений то исходные данные для вычисления нового ключа- константы.. они не меняются.. поетому цикл.. ето хорошо.. етот цикл нарушится если проскочет нетпинг или любой другой пакет - отличный от тестируемого.. их надо стораться исключать..
гыг, наступаю на одни и тежи грабли.
вот тежи пакеты (сидя юзаю релакс) в незашифрованном виде (сохранил из пх в текстовый файл. вроде как сохраняет не в шифрованном виде, убрав вкрапления)
думаю так что мало пищи для мозга..
я бы например выложил бы такой вот лог (чтоб всем думалось проще и ненапрягало думать):

39 B3 14 23 59 E9 E8 0B 1D AF--16 b2 a7 37 7a b0 01 e3--2F 38 00 00 00 00 00 00 00 00
7D 86 04 34 E6 28 15 BB E9 2A--52 C3 82 30 D2 CE 3D AE--2F 38 00 00 00 00 00 00 00 00
EA 1D 2E E0 2A CF 6D 4C 89 46--C5 CF 33 CE CA E5 A2 21--2F 38 00 00 00 00 00 00 00 00
17 ED 35 AE 6E C3 C0 2D 15 D7--38 C2 D8 9B C0 AD 03 ED--2F 38 00 00 00 00 00 00 00 00
3E 00 B8 DF 6E 8F 81 A2 B3 B5--11 06 B8 67 B1 E1 0E 23--2F 38 00 00 00 00 00 00 00 00
D8 A0 D0 E7 09 2F CB E2 15 55--F7 40 70 37 EE 26 E4 29--2F 38 00 00 00 00 00 00 00 00
29 50 04 1F 81 93 A2 3E 38 79--06 41 54 1B 9E 12 31 9C--2F 38 00 00 00 00 00 00 00 00
CF 34 6B FD 8F B6 44 A8 48 8B--E0 C3 5F 96 72 39 F2 EC--2F 38 00 00 00 00 00 00 00 00
CB B3 7D CA 12 72 42 C6 22 62--E4 40 CE B7 D8 60 30 84--2F 38 00 00 00 00 00 00 00 00
91 F5 F0 C0 AE 38 75 A8 16 4A--BE 5C 05 30 6E 96 4D DD--2F 38 00 00 00 00 00 00 00 00
EB 1A 6D 15 1D 68 EC E9 2D E4--C4 C9 77 78 08 75 84 05--2F 38 00 00 00 00 00 00 00 00
9E 2A B3 7D EA 61 4C E3 52 DE--B1 8C 99 CE 97 8B 2D AF--2F 38 00 00 00 00 00 00 00 00
7C DF C9 50 54 5C BC AA F9 62--53 9B 16 99 04 08 E0 16--2F 38 00 00 00 00 00 00 00 00
14 24 D1 11 36 82 D0 29 12 1A--3B 08 F5 C0 27 B4 52 F9--2F 38 00 00 00 00 00 00 00 00
C6 D5 28 1D C1 CD 79 E6 0F 24--E9 2B FD 35 DC 0C B4 9F--2F 38 00 00 00 00 00 00 00 00
81 44 87 50 B0 AA 72 01 AF 52--AE FD C3 D7 E0 1A D8 73--2F 38 00 00 00 00 00 00 00 00
FF 9A 6B F7 90 B9 1E E2 32 6F--D0 5D F1 9C 67 29 A7 FC--2F 38 00 00 00 00 00 00 00 00
3C 09 FC F4 85 55 E4 A1 B2 BF--13 0D F5 08 71 D0 B1 45--2F 38 00 00 00 00 00 00 00 00
85 75 3E 60 29 E3 3C 10 BA 72--AA C8 4B 5E 49 CA DF 2C--2F 38 00 00 00 00 00 00 00 00
AF EC 5F C7 81 C4 B9 AA 2A 51--80 7B B3 98 46 45 7D 13--2F 38 00 00 00 00 00 00 00 00
14 2B 7C A1 14 B0 28 B4 8F 88--3B 07 57 DD B5 A4 98 9C--2F 38 00 00 00 00 00 00 00 00
E3 43 B1 DE 75 2A 14 82 4E D6--CC 98 F2 6F AB 5F 3E 96--2F 38 00 00 00 00 00 00 00 00
BD 50 F5 D4 69 78 C3 A0 32 E7--92 D5 A5 21 BD 11 BB 63--2F 38 00 00 00 00 00 00 00 00
B6 E8 57 9F 30 EB C6 1E 87 E1--99 66 BF C8 AF DB 2D D8--2F 38 00 00 00 00 00 00 00 00

с пояснениями к логу:
1- трафик исходящий
2- сидя на попе в безлюдном месте юзаю скил с ид $38
3- в оригинале пакет исходящий должен выглядеть так:2F 38 00 00 00 00 00 00 00 00
4- НЕ ДЕШЕФРИРОВАТЬ ТРАФИК= ВКЛЮЧЕНО
5- во второй колонке указан ключ для того чтобы из перехваченого пакета в первой колонке получить 3-ю колонку
6- закон изменения ключа мне неясен.. помагите кто может-)))))0
(я серьезно неделю голову ломаю додуматься немагу оч сложная ситуация)

Добавлено через 19 минут
var
i,k,j: integer;
begin
key[0]:=pck[8]; //
key[1]:=pck[9]; // как вооще прикрутить к ключу, понемаю, что так не должно быть

for k:=size-1 downto 0 do
pck[k]:=pck[k] xor key[k and 7];
end.
слух..100 пудов админы там умники-) меня добивает ето:

key[0]:=pck[8]; //
key[1]:=pck[9]; // как вооще прикрутить к ключу, понемаю, что так не должно быть

ыыыы-) каму пива?-)

New_Гость
03.06.2008, 16:45
хм.... а моно создать отдельную темку с подобраными ключиками с разным сервакам?

Breadfan
04.06.2008, 11:57
Да тут не ключи надо подбирать, а сам алгоритм шифрования

Добавлено через 16 часов 36 минут
А вот я тут(:

шифрование отключено, обход XOR ключа отключен

скил 2F 5B 00 00 00 00 00 00 00 00

шифрованные пакеты:

3C 4F 87 6C 96 FB B0 25 36 1E -->36 1E 87 6C 96 FB B0 25-->2F 5B 00 00 00 00 00 00 00 00
E4 CA 8D 12 00 BF 93 B3 78 0D -->78 0D 8D 12 00 BF 93 B3
0B B3 C9 F7 F0 9A 05 B2 96 75 -->96 75 C9 F7 F0 9A 05 B2
C3 99 ED E6 17 70 17 8D 61 60 -->61 60 ED E6 17 70 17 8D
C7 AE E8 6E 1B 22 60 40 A8 9A -->A8 9A E8 6E 1B 22 60 40
A0 8F 28 E6 6F 64 87 56 D9 AD -->D9 AD 28 E6 6F 64 87 56
EF 31 D9 48 E4 16 4D 58 98 1D -->98 1D D9 48 E4 16 4D 58
BE 70 35 58 F0 7A B9 09 98 0D -->98 0D 35 58 F0 7A B9 09
B3 39 E5 5B 07 D0 2D 01 9D 4C -->9D 4C E5 5B 07 D0 2D 01
7E C1 82 4D C6 7D 7A 3E 6F 8B -->6F 8B 82 4D C6 7D 7A 3E
92 B8 22 F1 90 17 D9 E2 5F 2E -->5F 2E 22 F1 90 17 D9 E2
FD 29 38 2F D0 6B D4 D4 06 89 -->06 89 38 2F D0 6B D4 D4
41 7C CC 77 1B C3 1B 04 6A 0C -->6A 0C CC 77 1B C3 1B 04
F2 4D 00 85 D3 27 D6 A5 78 9C -->78 9C 00 85 D3 27 D6 A5
48 8D 1F 12 6B 1F A6 BA DD 43 -->DD 43 1F 12 6B 1F A6 BA
F9 CC C0 AE 31 6F 9A 0E D8 B6 -->D8 B6 C0 AE 31 6F 9A 0E
78 2E 55 17 D7 A9 22 7B 2C 21 -->2C 21 55 17 D7 A9 22 7B
B0 6A 52 C8 56 12 1C EB 74 F5 -->74 F5 52 C8 56 12 1C EB
FE FC EF B1 21 01 F0 CE 1F 46 -->1F 46 EF B1 21 01 F0 CE
7D 21 CD 2E 6F 41 EF E7 B5 B2 -->B5 B2 CD 2E 6F 41 EF E7

Вкраплений нет, сколько раз юзал скил столько и пакетов...Подскажите направление рытья, а то сам не вижу (

Пакет на разрыв пати выглядит (как в случае Ворона) однотипно (к примеру куча пакетов DB), до посылки другого пакета ...Имеется предположение что алгоритмы шифровки схожи...но все же не одинаковы)

1- трафик исходящий
2- сидя на попе в безлюдном месте юзаю скил с ид $5B
3- в оригинале пакет исходящий должен выглядеть так:2F 38 00 00 00 00 00 00 00 00
4- НЕ ДЕШЕФРИРОВАТЬ ТРАФИК= ВКЛЮЧЕНО
5- во второй колонке указан ключ для того чтобы из перехваченого пакета в первой колонке получить 3-ю колонку
6- закон изменения ключа мне неясен.. помагите кто может-)))))0
(я серьезно неделю голову ломаю додуматься немагу оч сложная ситуация)
:)

alexsl
04.06.2008, 17:11
возмжно это тебе поможет.
ИМХО первый байт пакета на вскидку (при условии если брать ключик из самого пакета):
....
3C 4F 87 6C 96 FB B0 25 36 1E
....
предположительно этот пакет содержит ключик 36 1E 87 6C 96 FB B0 25
тогда эта формула истинна для всех пакетов:
pck[0]:=pck[0] xor key[0] xor key[7];
получим 2F

зыы: кстати, повод для размышления, в моем случае 1 байт ключа увелич-ся на размер пакета.
(key[0]:=key[0]+size)

alexsl
06.06.2008, 07:58
привет,
танцы с бубном по тихой приносят результат _но_ ...
ИМХО требуется сдвигать ключ, но у муну не получается.
знающие люди подскажите как это дело реализовать?
пробывал так:

old := Key[0];
old := old or (Key[1] shl $08);
old := old or (Key[2] shl $10);
old := old or (Key[3] shl $18);

old := old+size;

Key[0] := old;
Key[1] := (old shr $08);
Key[2] := (old shr $10);
Key[3] := (old shr $18);


но не получается :confused:

данные для расшифровки (юзаю скил, и пишу в чат 111111111)


A6 71 7B 7B 32 AF 8B 1A 93 A6
BC 6B 61 61 28 B5 91 00 93 A6
B2 65 6F 6F 26 BB 9F 0E 93 A6
9F 9B 91 A0 E9 45 61 C1 66 62 68 59 10 BC 98 38 9F 9B 91 A0 E9 45 61 C1 66 62 68 59 10 BC 98 38 9F 9B 91 A0 E9 45 61 C1 66 62 68 59 10 BC 98 38 9F 9B 91 A0 E9 45 61 C1 66 62 68 59 10 BC 98 09 AE 9B 91 91 D8
C3 14 1E 1E 57 CA EE 7F 93 A6
D9 0E 04 04 4D D0 F4 65 93 A6
38 3F 35 04 4D E1 C5 65 65 62 68 59 10 BC 98 38 38 3F 35 04 4D E1 C5 65 65 62 68 59 10 BC 98 38 38 3F 35 04 4D E1 C5 65 65 62 68 59 10 BC 98 38 38 3F 35 35 7C E1 C5 54 54
01 06 0C 3D 74 D8 FC 5C 65 62 68 59 10 BC 98 38 01 06 0C 3D 74 D8 FC 5C 65 62 68 59 10 BC 98 38 01 06 0C 3D 74 D8 FC 5C 65 62 68 59 10 BC 98 38 01 06 0C 0C 45 D8 FC 6D 54
4A 4D 47 76 3F 93 B7 17 65 62 68 59 10 BC 98 38 4A 4D 47 76 3F 93 B7 17 65 62 68 59 10 BC 98 38 4A 4D 47 76 3F 93 B7 17 65 62 68 59 10 BC 98 38 4A 4D 47 47 0E 93 B7 26 54
93 94 9E AF E6 4A 6E CE 65 62 68 59 10 BC 98 38 93 94 9E AF E6 4A 6E CE 65 62 68 59 10 BC 98 38 93 94 9E AF E6 4A 6E FF 54 62 68 68 21


вот выходные данные, вроде все красиво


// скилл
2F E2 00 00 00 00 00 00 00 00 ; 93 35 0A 00 49 9D 24 91 ; 10
2F E2 00 00 00 00 00 00 00 00 ; 9D 35 0A 00 49 9D 24 91 ; 10
2F E2 00 00 00 00 00 00 00 00 ; A7 35 0A 00 49 9D 24 91 ; 10
// сау2
38 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 00 00 00 00 00 00 ; EC 35 0A 00 49 9D 24 91 ; 69
// скилл
2F E2 00 00 00 00 00 00 00 00 ; F6 35 0A 00 49 9D 24 91 ; 10
2F E2 00 00 00 00 00 00 00 00 ; 00 35 0A 00 49 9D 24 91 ; 10
// вот тут происходит сдвиг ключика (значение должно быть 31 а не 32)
// сай2 !!!
38 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 00 00 00 00 00 00 ; 39 35 0A 00 49 9D 24 91 ; 57
38 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 00 00 00 00 00 00 ; 72 35 0A 00 49 9D 24 91 ; 57
38 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 00 00 00 00 00 00 ; AB 35 0A 00 49 9D 24 91 ; 57
38 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 31 00 32 00 31 00 31 00 00 00 03 00 00 00 ; D8 35 0A 00 49 9D 24 91 ; 45


а это , сам код:


var
old,temp,temp2,i: integer;
begin
temp:= 0;
for i:= 0 to size-1 do
begin
temp2:= pck[i] and $ff;
pck[i]:= temp2 xor (Key[i and 7]and $ff) xor temp;
temp:=temp2;
end;
old := Key[0];

// имхо тут надо реализовать сдвиг ключа
// принимают участие 4 первых байта ключа

// old := old or (Key[1] shl $08); // данный метод работает не так как ожидалось
// old := old or (Key[2] shl $10);
// old := old or (Key[3] shl $18);

old := old+size;

Key[0] := old;
// Key[1] := (old shr $08);
// Key[2] := (old shr $10);
// Key[3] := (old shr $18);

end.


зы: или это вообще не сдвиг ключа?

Breadfan
06.06.2008, 13:37
Кстати, цикличность в моем случае появится при условии что ключ - 16 байт, а похоже так оно и есть

alexsl
06.06.2008, 14:24
Кстати, цикличность в моем случае появится при условии что ключ - 16 байт, а похоже так оно и есть
не думаю, алгоритм шифрации по идее не должны кординально менять (т.к. возможны глюки), посмотри как реализовано по умолчанию.

кстати вот кусок "стандартной" шифрации, подробно описано.
Автор: TechnoWiz@rd


Пакеты сервера авторизации шифруются по алгоритму Blowfish. Стандартный ключ по умолчанию в 4-х хрониках:
5F 3B 35 2E 5D 39 34 2D 33 31 3D 3D 2D 25 78 54 21 5E 5B 24. К концу ключа прибавляется символ с кодом 0. В Interlude тип шифрования был изменен - пакет
Init содержит динамический Blowfish ключ случайно генерируемый для каждого клиента. Этот пакет сначала шифруется по алгоритму XOR(ключ генерируется
случайным образом и помещается в конце пакета), а потом шифруется по алгоритму Blowfish, статическим ключом. По умолчанию статический ключ -
6B 60 CB 5B 82 CE 90 B1 CC 2B 6C 55 6C 6C 6C 6C. Все последующие пакеты будут шифроваться динамическим Blowfish ключом. Пакет LoginRequest дополнительно
шифруется по алгоритму RSA. Ключ состоит из следующих частей: B = 1024, E = 65537, N = передается в пакете Init. Вместе эти 3 части составляют целый RSA
ключ. Байты N в пакете зашифрованы функцией:

void scrambleMod( char *n )
{
typedef unsigned char byte;
int i;

for( i=0; i<4; i++ ) {
byte temp = n[0x00 + i];
n[0x00 + i] = n[0x4d + i];
n[0x4d + i] = temp;
};

// step 2 xor first 0x40 bytes with last 0x40 bytes
for( i=0; i<0x40; i++ ) {
n[i] = (byte)(n[i] ^ n[0x40 + i]);
};

// step 3 xor bytes 0x0d-0x10 with bytes 0x34-0x38
for( i=0; i<4; i++ ) {
n[0x0d + i] = (byte)(n[0x0d + i] ^ n[0x34 + i]);
};

// step 4 xor last 0x40 bytes with first 0x40 bytes
for( i=0; i<0x40; i++ ) {
n[0x40 + i] = (byte)(n[0x40 + i] ^ n[i]);
};
};


Для расшифровки можно воспользоваться следующей функцией:

void unscrambleMod( char *n )
{
typedef unsigned char byte;
int i;

// step 4 xor last 0x40 bytes with first 0x40 bytes
for( i=0; i<0x40; i++ ) {
n[0x40 + i] = (byte)(n[0x40 + i] ^ n[i]);
};

// step 3 xor bytes 0x0d-0x10 with bytes 0x34-0x38
for( i=0; i<4; i++ ) {
n[0x0d + i] = (byte)(n[0x0d + i] ^ n[0x34 + i]);
};

// step 2 xor first 0x40 bytes with last 0x40 bytes
for( i=0; i<0x40; i++ ) {
n[i] = (byte)(n[i] ^ n[0x40 + i]);
};

for( i=0; i<4; i++ ) {
byte temp = n[0x00 + i];
n[0x00 + i] = n[0x4d + i];
n[0x4d + i] = temp;
};
};


Также есть сервера использующие старый протокол авторизации(ревизия 785a) который не шифрует пакет Init, а остальные шифрует Blowfish
ключом длинной 21 байт. При этом пакет LoginRequest шифруется только по алгоритму Blowfish, без дополнительного шифрования RSA.
Для шифрования пакетов гейм сервера используется алгоритм XOR. Ключ XOR генерируется случайно и передается клиенту в пакете CryptInit. Функции
шифрования и дешифрации приведены ниже:

/* Декодирует данные */
void decrypt( unsigned char *data, unsigned int len, unsigned char *Key )
{

int temp = 0;

for( unsigned int i = 0; i < len; ++i ) {
int temp2 = data[i] & 0xff;
data[i] = (temp2 ^ (Key[i & 15] & 0xff) ^ temp);
temp = temp2;
};



int old = Key[8] & 0xff;
old |= (Key[9] << 0x08) & 0xff00;
old |= (Key[10] << 0x10) & 0xff0000;
old |= (Key[11] << 0x18) & 0xff000000;

old += len;

Key[8] = old &0xff;
Key[9] = (old >> 0x08) & 0xff;
Key[10] = (old >> 0x10) & 0xff;
Key[11] = (old >> 0x18) & 0xff;
};

/* Кодирует данные */
void encrypt( unsigned char *data, unsigned int len, unsigned char *Key )
{
int temp = 0;

for( unsigned int i = 0; i < len; i++) {
int temp2 = data[i] & 0xff;
data[i] = (temp2 ^ (Key[i & 15] & 0xff) ^ temp);
temp = data[i];
};

int old = Key[8] & 0xff;
old |= (Key[9] << 0x08) & 0xff00;
old |= (Key[10] << 0x10) & 0xff0000;
old |= (Key[11] << 0x18) & 0xff000000;

old += len;

Key[8] = old &0xff;
Key[9] = (old >> 0x08) & 0xff;
Key[10] = (old >> 0x10) & 0xff;
Key[11] = (old >> 0x18) & 0xff;
};


С каждым кодированным/декодированным пакетом ключ изменяется на длину пакета


имхо, после этого момента

int old = Key[8] & 0xff;
old |= (Key[9] << 0x08) & 0xff00;
old |= (Key[10] << 0x10) & 0xff0000;
old |= (Key[11] << 0x18) & 0xff000000;

old += len;

Key[8] = old &0xff;
Key[9] = (old >> 0x08) & 0xff;
Key[10] = (old >> 0x10) & 0xff;
Key[11] = (old >> 0x18) & 0xff;

и добавляются какието махинации с ключами.
удачи

nezabudkin
06.06.2008, 14:51
После ряда обновлений, получил злобно зашифрованный трафик. Че делать ваще не знаю...

И так:

CryptInit: 00 01 C2 F5 11 18 01 00 00 00 01 00 00 00
тут все стандартно, ключик 4-х байтный C2 F5 11 18, естественно при каждом новом сеансе ключик меняется.

ксорим его на константу 82 93 1A 41
и получаем начальный ключик вида x1 x2 00 00 x3 x4 00 00
где
x1 = C2 xor 82
x2 = F5 xor 93
x3 = 11 xor 1A
x4 = 18 xor 41

Начальный ключик верен для обоих направлений.

А вот дальше алгоритмы совершенно разные.
Вот пример трафика от клиента к серверу (зажимаю кнопку сесть/встать)


80 22 1C 39 6A 30 11 A2 C5 22 == C5 22 1C 39 6A 30 11 A2 == 45 00 00 00 00 00 00 00 00 00 -- 1
BB 03 AB 36 6B 39 7A 6A FE 03 == FE 03 AB 36 6B 39 7A 6A == 45 00 00 00 00 00 00 00 00 00 -- 2
1A 5C B0 A9 20 D4 8C 98 5F 5C == 5F 5C B0 A9 20 D4 8C 98 == 45 00 00 00 00 00 00 00 00 00 -- 3
A1 F4 2E D1 D0 F6 46 96 E4 F4 == E4 F4 2E D1 D0 F6 46 96 == 45 00 00 00 00 00 00 00 00 00 -- 4
EC 4C 3E D6 41 CA CB 41 A9 4C == A9 4C 3E D6 41 CA CB 41 == 45 00 00 00 00 00 00 00 00 00 -- 5
C9 C0 FC 66 3F 7D 8A F2 8C C0 == 8C C0 FC 66 3F 7D 8A F2 == 45 00 00 00 00 00 00 00 00 00 -- 6
4A BB A7 70 35 C5 D3 B1 0F BB == 0F BB A7 70 35 C5 D3 B1 == 45 00 00 00 00 00 00 00 00 00 -- 7
A0 46 DE 4A 6C 15 C5 62 E5 46 == E5 46 DE 4A 6C 15 C5 62 == 45 00 00 00 00 00 00 00 00 00 -- 8
EA 5F 4B E2 11 98 DE EF AF 5F == AF 5F 4B E2 11 98 DE EF == 45 00 00 00 00 00 00 00 00 00 -- 9
0D 63 D9 C3 B7 B7 4D 4A 48 63 == 48 63 D9 C3 B7 B7 4D 4A == 45 00 00 00 00 00 00 00 00 00 -- 10
55 A9 44 35 85 80 62 11 10 A9 == 10 A9 44 35 85 80 62 11 == 45 00 00 00 00 00 00 00 00 00 -- 11
3E 5C DB 10 F0 30 CC DC 7B 5C == 7B 5C DB 10 F0 30 CC DC == 45 00 00 00 00 00 00 00 00 00 -- 12
B4 0C 22 EA 3E 4D B5 56 F1 0C == F1 0C 22 EA 3E 4D B5 56 == 45 00 00 00 00 00 00 00 00 00 -- 13
49 E7 DC B1 4D 67 22 3F 0C E7 == 0C E7 DC B1 4D 67 22 3F == 45 00 00 00 00 00 00 00 00 00 -- 14
B2 14 4B FF A7 5B D4 1F F7 14 == F7 14 4B FF A7 5B D4 1F == 45 00 00 00 00 00 00 00 00 00 -- 15
3C 81 85 27 54 1A BC 01 79 81 == 79 81 85 27 54 1A BC 01 == 45 00 00 00 00 00 00 00 00 00 -- 16
3A 2B 87 69 A7 D8 85 FC 7F 2B == 7F 2B 87 69 A7 D8 85 FC == 45 00 00 00 00 00 00 00 00 00 -- 17
25 3D 44 38 E7 6D A0 10 60 3D == 60 3D 44 38 E7 6D A0 10 == 45 00 00 00 00 00 00 00 00 00 -- 18
37 84 FB 6B 5D 8D CF B1 72 84 == 72 84 FB 6B 5D 8D CF B1 == 45 00 00 00 00 00 00 00 00 00 -- 19
94 3A BE D8 33 18 14 31 D1 3A == D1 3A BE D8 33 18 14 31 == 45 00 00 00 00 00 00 00 00 00 -- 20
2B 05 96 09 08 E3 8F 52 6E 05 == 6E 05 96 09 08 E3 8F 52 == 45 00 00 00 00 00 00 00 00 00 -- 21
0D 88 5A A1 F3 4C F9 14 48 88 == 48 88 5A A1 F3 4C F9 14 == 45 00 00 00 00 00 00 00 00 00 -- 22
38 3B 0F A3 76 34 AF C2 7D 3B == 7D 3B 0F A3 76 34 AF C2 == 45 00 00 00 00 00 00 00 00 00 -- 23
E5 F7 1B D7 29 68 AD F4 A0 F7 == A0 F7 1B D7 29 68 AD F4 == 45 00 00 00 00 00 00 00 00 00 -- 24
92 FA B1 82 6A 5C 25 63 D7 FA == D7 FA B1 82 6A 5C 25 63 == 45 00 00 00 00 00 00 00 00 00 -- 25
64 13 C2 7D 6C D1 EF 5C 21 13 == 21 13 C2 7D 6C D1 EF 5C == 45 00 00 00 00 00 00 00 00 00 -- 26
D5 61 CC 39 21 CB 0F F2 90 61 == 90 61 CC 39 21 CB 0F F2 == 45 00 00 00 00 00 00 00 00 00 -- 27
1C 29 55 96 53 C6 B6 55 59 29 == 59 29 55 96 53 C6 B6 55 == 45 00 00 00 00 00 00 00 00 00 -- 28
59 84 16 30 F1 AB DF D5 1C 84 == 1C 84 16 30 F1 AB DF D5 == 45 00 00 00 00 00 00 00 00 00 -- 29
50 2E BC 04 9C 44 1E DC 15 2E == 15 2E BC 04 9C 44 1E DC == 45 00 00 00 00 00 00 00 00 00 -- 30
3A 5F D5 1C DD 8D 9B 4A 7F 5F == 7F 5F D5 1C DD 8D 9B 4A == 45 00 00 00 00 00 00 00 00 00 -- 31
27 BA C8 6D 19 2B B2 93 62 BA == 62 BA C8 6D 19 2B B2 93 == 45 00 00 00 00 00 00 00 00 00 -- 32
52 FA DB BC B1 61 45 28 17 FA == 17 FA DB BC B1 61 45 28 == 45 00 00 00 00 00 00 00 00 00 -- 33
BF 10 FF C3 A1 65 DC F7 FA 10 == FA 10 FF C3 A1 65 DC F7 == 45 00 00 00 00 00 00 00 00 00 -- 34
73 3D E1 6F 35 7A 39 7A 36 3D == 36 3D E1 6F 35 7A 39 7A == 45 00 00 00 00 00 00 00 00 00 -- 35
DE 02 2E 4B C6 12 8F C8 9B 02 == 9B 02 2E 4B C6 12 8F C8 == 45 00 00 00 00 00 00 00 00 00 -- 36
A1 E1 59 C6 AB 8C CC 66 E4 E1 == E4 E1 59 C6 AB 8C CC 66 == 45 00 00 00 00 00 00 00 00 00 -- 37
81 38 19 1A BB AF EC 19 C4 38 == C4 38 19 1A BB AF EC 19 == 45 00 00 00 00 00 00 00 00 00 -- 38
B6 40 5F CB B7 A2 92 20 F3 40 == F3 40 5F CB B7 A2 92 20 == 45 00 00 00 00 00 00 00 00 00 -- 39
88 B9 BF E1 CA 60 B7 1F CD B9 == CD B9 BF E1 CA 60 B7 1F == 45 00 00 00 00 00 00 00 00 00 -- 40
CD 80 D1 1C AC 1A 15 6A 88 80 == 88 80 D1 1C AC 1A 15 6A == 45 00 00 00 00 00 00 00 00 00 -- 41
55 7A 7D 34 51 19 7F D8 10 7A == 10 7A 7D 34 51 19 7F D8 == 45 00 00 00 00 00 00 00 00 00 -- 42
30 70 DA 87 FA 65 45 A7 75 70 == 75 70 DA 87 FA 65 45 A7 == 45 00 00 00 00 00 00 00 00 00 -- 43
92 24 C1 F2 4D D7 A4 E8 D7 24 == D7 24 C1 F2 4D D7 A4 E8 == 45 00 00 00 00 00 00 00 00 00 -- 44
43 DE F1 08 F2 D9 E5 DB 06 DE == 06 DE F1 08 F2 D9 E5 DB == 45 00 00 00 00 00 00 00 00 00 -- 45
6E B5 3F 47 63 F8 CE 7D 2B B5 == 2B B5 3F 47 63 F8 CE 7D == 45 00 00 00 00 00 00 00 00 00 -- 46
14 4C 47 70 FC BD BE 49 51 4C == 51 4C 47 70 FC BD BE 49 == 45 00 00 00 00 00 00 00 00 00 -- 47
22 BF F2 56 06 79 A3 80 67 BF == 67 BF F2 56 06 79 A3 80 == 45 00 00 00 00 00 00 00 00 00 -- 48
88 22 1C 4E 7A F0 44 72 CD 22 == CD 22 1C 4E 7A F0 44 72 == 45 00 00 00 00 00 00 00 00 00 -- 49
4F 68 38 EF 96 B7 3D 04 0A 68 == 0A 68 38 EF 96 B7 3D 04 == 45 00 00 00 00 00 00 00 00 00 -- 50
C9 3A 05 49 79 9F 4F E1 8C 3A == 8C 3A 05 49 79 9F 4F E1 == 45 00 00 00 00 00 00 00 00 00 -- 51
CD CF D6 B4 DC 2C 59 FD 88 CF == 88 CF D6 B4 DC 2C 59 FD == 45 00 00 00 00 00 00 00 00 00 -- 52
2B E8 A7 37 AB F0 01 E3 6E E8 == 6E E8 A7 37 AB F0 01 E3 == 45 00 00 00 00 00 00 00 00 00 -- 53
94 A5 95 24 F8 B2 2A BA D1 A5 == D1 A5 95 24 F8 B2 2A BA == 45 00 00 00 00 00 00 00 00 00 -- 54
F8 95 33 CE 1B A5 A2 21 BD 95 == BD 95 33 CE 1B A5 A2 21 == 45 00 00 00 00 00 00 00 00 00 -- 55
FE A4 CF 8F EA D1 14 F9 BB A4 == BB A4 CF 8F EA D1 14 F9 == 45 00 00 00 00 00 00 00 00 00 -- 56
2C 5C B8 67 60 A1 0E 23 69 5C == 69 5C B8 67 60 A1 0E 23 == 45 00 00 00 00 00 00 00 00 00 -- 57
31 26 67 23 C4 5A F3 3D 74 26 == 74 26 67 23 C4 5A F3 3D == 45 00 00 00 00 00 00 00 00 00 -- 58
3B 1B 54 1B 4F 52 31 9C 7E 1B == 7E 1B 54 1B 4F 52 31 9C == 45 00 00 00 00 00 00 00 00 00 -- 59
26 A5 48 82 58 45 E5 F8 63 A5 == 63 A5 48 82 58 45 E5 F8 == 45 00 00 00 00 00 00 00 00 00 -- 60
D9 1A CE B7 09 20 30 84 9C 1A == 9C 1A CE B7 09 20 30 84 == 45 00 00 00 00 00 00 00 00 00 -- 61
78 3A 12 24 44 EA 5A C9 3D 3A == 3D 3A 12 24 44 EA 5A C9 == 45 00 00 00 00 00 00 00 00 00 -- 62
F9 93 77 78 D9 35 84 05 BC 93 == BC 93 77 78 D9 35 84 05 == 45 00 00 00 00 00 00 00 00 00 -- 63
77 EA 8E DA BD F7 3A BB 32 EA == 32 EA 8E DA BD F7 3A BB == 45 00 00 00 00 00 00 00 00 00 -- 64
6E C1 16 99 D5 48 E0 16 2B C1 == 2B C1 16 99 D5 48 E0 16 == 45 00 00 00 00 00 00 00 00 00 -- 65
FD 6E E2 D4 0D C8 45 ED B8 6E == B8 6E E2 D4 0D C8 45 ED == 45 00 00 00 00 00 00 00 00 00 -- 66
D4 71 FD 35 0D 4C B4 9F 91 71 == 91 71 FD 35 0D 4C B4 9F == 45 00 00 00 00 00 00 00 00 00 -- 67
68 9B D4 C3 CA 66 CF 67 2D 9B == 2D 9B D4 C3 CA 66 CF 67 == 45 00 00 00 00 00 00 00 00 00 -- 68


1. Столбцы: пакет == ключ == дешифрованный пакет -- порядковый номер пакета
2. Вкраплений нет, как тока появляется вкрапление, порядковый номер станет = 0.
3. С пакета уже снята часть шифрации алгоритмом (я изменил newxor.dll):

procedure TXorCodingOut.DecryptGP(var Data; const Size: Word);
var
k:integer;
pck:array[0..$4FFF] of Byte absolute Data;
begin
for k:=size-1 downto 1 do pck[k]:=pck[k] xor pck[k-1];
end;


Че делать дальше, вообще мыслей нету ((
Ключ в пакете явно просматривается, но алгоритм изменения неясен.

alexsl
06.06.2008, 15:13
3. С пакета уже снята часть шифрации алгоритмом (я изменил newxor.dll):

этого не стоило пока делать, давай т.с. в первозданном виде

nezabudkin
06.06.2008, 19:18
temp2:= pck[i] and $ff;

А что ты хочешь получить этой командой?
это же всеравно, что temp2:= pck[i]

NLObP
06.06.2008, 19:27
Может стоит разные фришарды в разных топиках исследовать? По моему каша будет если дальше так пойдет.

nezabudkin
06.06.2008, 19:35
этого не стоило пока делать, давай т.с. в первозданном виде

Знаю, что стоило, у меня с Breadfan'ом похоже что сервер одинаковый, вот у него выложен исходящий трафик как есть, там ключ НЕ видно!

Добавлено через 2 минуты
как то надо будет названия топикам выдумывать,
я вот нехочу чтобы админы моего сервера случайно в поиске этот топик надыбали)), а так я ЗА

Может вообще подраздел на форуме создать по шифрованию трафика?

NLObP
06.06.2008, 19:49
Модераторы не могут создать подраздел, надо Xkor`а попросить.
Чем могут админы лично тебе навредить? Вообще по защите своего сервера понятно, но ведь и так найдут, они же знают что искать.

alexsl
06.06.2008, 20:38
А что ты хочешь получить этой командой?
это же всеравно, что temp2:= pck[i]
эт не я, а господин TechnoWiz@rd, просто портировал как есть.
в Си & это вроде And
....
for( unsigned int i = 0; i < len; ++i ) {
int temp2 = data[i] & 0xff;
....
кто в Си шарит, разясните плиз, что этим хотели сделать?

dmitry501
07.06.2008, 08:38
эт не я, а господин TechnoWiz@rd, просто портировал как есть.
в Си & это вроде And
....
for( unsigned int i = 0; i < len; ++i ) {
int temp2 = data[i] & 0xff;
....
кто в Си шарит, разясните плиз, что этим хотели сделать?

если data[i] это 1 байт, то
data[i] & 0xff == data[i]

если больше, то выделяется только младший байт

alexsl
07.06.2008, 12:46
если data[i] это 1 байт, то
data[i] & 0xff == data[i]

хм ..., т.е. в нашем случае эта операция бесмысленна т.к. data[i] не может быть больше 1 байта. такс?

Добавлено через 2 часа 39 минут

ксорим его на константу 82 93 1A 41
и получаем начальный ключик вида x1 x2 00 00 x3 x4 00 00

подскажи плз константу сам находил или она едина для всех?

PanAm
07.06.2008, 14:58
Может вообще подраздел на форуме создать по шифрованию трафика?http://coderx.ru/showthread.php?t=236
Еще в феврале подымал этот вопрос

ASSA
07.06.2008, 15:12
было бы круто еслиб какая-то прога вычисляла алгоритм шифрации сама =)

student
09.06.2008, 16:11
var key: integer;
procedure OnCreate;
begin
gSys.ALstart:=false;
end;
procedure OnDestroy;
begin
end;
begin
if _gAbsNumPkt=2 then
begin
key:=gSys.Kco xor $FFFFFFFF;
gSys.Ksi:=key;
gSys.Kso:=key;
end;
end.

nezabudkin
11.06.2008, 13:11
student, это левак какой-то.
Откуда это?

metalFan
12.06.2008, 00:31
всем здравствуйте! юзаю пх давно и тд и тп...
ну в общем к делу...
у меня есть фришард, региональный, интерлюдия.
начал делать как сказано тут
получил воть что:

crypt
00 01 A3 06 00 00 9E 71 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
8C 4A 4E 4E D0 A1 A1 A1 0C 24
8C 4A 4E 4E D0 A1 A1 A1 16 3E
8C 4A 4E 4E D0 A1 A1 A1 60 48
8C 4A 4E 4E D0 A1 A1 A1 6A 42
8C 4A 4E 4E D0 A1 A1 A1 74 5C
8C 4A 4E 4E D0 A1 A1 A1 7E 56
8C 4A 4E 4E D0 A1 A1 A1 48 60
8C 4A 4E 4E D0 A1 A1 A1 52 7A
8C 4A 4E 4E D0 A1 A1 A1 5C 74
8C 4A 4E 4E D0 A1 A1 A1 A6 8F

crypt
00 01 8C 46 00 00 F0 41 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
A3 25 21 21 D1 90 90 90 64 4C
A3 25 21 21 D1 90 90 90 6E 46
A3 25 21 21 D1 90 90 90 98 B1
A3 25 21 21 D1 90 90 90 82 AB
A3 25 21 21 D1 90 90 90 8C A5
A3 25 21 21 D1 90 90 90 B6 9F
A3 25 21 21 D1 90 90 90 A0 89
A3 25 21 21 D1 90 90 90 AA 83
A3 25 21 21 D1 90 90 90 D4 FD
A3 25 21 21 D1 90 90 90 DE F7

crypt
00 01 8F 35 00 00 33 02 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
A0 55 51 51 62 60 60 60 CD E5
A0 55 51 51 62 60 60 60 D7 FF
A0 55 51 51 62 60 60 60 A1 89
A0 55 51 51 62 60 60 60 AB 83
A0 55 51 51 62 60 60 60 B5 9D
A0 55 51 51 62 60 60 60 BF 97
A0 55 51 51 62 60 60 60 89 A1
сидя я юзал скил селф хила должен был получиться
(2F C0 04 00 00 00 00 00 00 00) дальше


00 01 6C 57 00 00 42 66 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
77 22 22 22 60
77 22 22 22 60
77 22 22 22 60
77 22 22 22 60
77 22 22 22 60
77 22 22 22 60
77 22 22 22 60 !

00 01 ED 1F 00 00 39 7D 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
F6 EB EB EB D2
F6 EB EB EB D2
F6 EB EB EB D2
F6 EB EB EB D2
F6 EB EB EB D2
F6 EB EB EB D2
F6 EB EB EB D2 !
машем ручкой, (1B 02 00 00 00) должно получиться

00 01 A8 73 00 00 23 7D 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
90 D2 D2 E3 C0 8C 8C BD 38 21 B2 B3 12 7E 4F D8 70
90 D2 D2 E3 C0 8C 8C BD 2B 32 A1 A0 01 6D 5C CB 63
90 D2 D2 E3 C0 8C 8C BD 1A 03 90 91 30 5C 6D FA 52
90 D2 D2 E3 C0 8C 8C BD 1A 03 90 91 30 5C 6D FA 52
90 D2 D2 E3 C0 8C 8C BD 1A 03 90 91 30 5C 6D FA 52
90 D2 D2 E3 C0 8C 8C BD 05 1C 8F 8E 2F 43 72 E5 4D
90 D2 D2 E3 C0 8C 8C BD 74 6D FE FF 5E 32 03 94 3C
90 D2 D2 E3 C0 8C 8C BD 67 7E ED EC 4D 21 10 87 2F
90 D2 D2 E3 C0 8C 8C BD 45 5C CF CE 6F 03 32 A5 0D
90 D2 D2 E3 C0 8C 8C BD B4 AC 3F 3E 9F F3 C2 55 FD

00 01 5D 2D 00 00 58 1E 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
65 79 79 48 10 3F 3F 0E 8B 92 01 00 A1 CD FC 6B 36
65 79 79 48 10 3F 3F 0E 98 81 12 13 B2 DE EF 78 25
65 79 79 48 10 3F 3F 0E A9 B0 23 22 83 EF DE 49 14
65 79 79 48 10 3F 3F 0E B6 AF 3C 3D 9C F0 C1 56 0B
65 79 79 48 10 3F 3F 0E C7 DE 4D 4C ED 81 B0 27 7A
65 79 79 48 10 3F 3F 0E D4 CD 5E 5F FE 92 A3 34 69
65 79 79 48 10 3F 3F 0E E5 FC 6F 6E CF A3 92 05 58

00 01 65 57 00 00 4A 5C 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
5D 3B 3B 0A 40 2D 2D 1C B1 A8 3B 3A 9B F7 C6 51 34
5D 3B 3B 0A 40 2D 2D 1C A2 BB 28 29 88 E4 D5 42 27
5D 3B 3B 0A 40 2D 2D 1C D3 CA 59 58 F9 95 A4 33 56
5D 3B 3B 0A 40 2D 2D 1C FC E5 76 77 D6 BA 8B 1C 79
5D 3B 3B 0A 40 2D 2D 1C ED F4 67 66 C7 AB 9A 0D 68
5D 3B 3B 0A 40 2D 2D 1C 1E 06 95 94 35 59 68 FF 9A
5D 3B 3B 0A 40 2D 2D 1C 0F 17 84 85 24 48 79 EE 8B
(38 31 00 31 00 31 00 31 00 31 00 00 00 00 00 00 00) говорю просто 11111

00 01 ED 1F 00 00 39 7D 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
D5 AB AB CA F3 EF EF 8E B6 EE 7D 1D BC B1 80 17 FA E5 E5 E5 DC
D5 AB AB CA F3 EF EF 8E C3 9B 08 68 C9 C4 F5 62 8F 90 90 90 A9
D5 AB AB CA F3 EF EF 8E EC B4 27 47 E6 EB DA 4D A0 BF BF BF 86
D5 AB AB CA F3 EF EF 8E F9 A1 32 52 F3 FE CF 58 B5 AA AA AA 93
D5 AB AB CA F3 EF EF 8E 02 5A C9 A9 08 05 34 A3 4E 51 51 51 68

00 01 2E 52 00 00 3B 2A 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
16 25 25 44 7F 34 34 55 CE 87 14 74 D5 D8 E9 7E 50 02 02 02 39
16 25 25 44 7F 34 34 55 E5 AC 3F 5F FE F3 C2 55 7B 29 29 29 12
16 25 25 44 7F 34 34 55 90 D9 4A 2A 8B 86 B7 20 0E 5C 5C 5C 67
16 25 25 44 7F 34 34 55 8F C6 55 35 94 99 A8 3F 11 43 43 43 78

00 01 87 5D 00 00 25 17 00 00 C8 27 93 01 A1 6C 31 97 01 00 00 00 01 00 00 00
BF 83 83 E2 C7 B1 B1 D0 5A 13 80 E0 41 4C 7D EA 6D 30 30 30 15
BF 83 83 E2 C7 B1 B1 D0 4F 06 95 F5 54 59 68 FF 78 25 25 25 00
BF 83 83 E2 C7 B1 B1 D0 64 2D BE DE 7F 72 43 D4 53 0E 0E 0E 2B
BF 83 83 E2 C7 B1 B1 D0 19 50 C3 A3 02 0F 3E A9 2E 73 73 73 56
BF 83 83 E2 C7 B1 B1 D0 0E 47 D4 B4 15 18 29 BE 39 64 64 64 41
BF 83 83 E2 C7 B1 B1 D0 23 6A F9 99 38 35 04 93 14 49 49 49 6C
BF 83 83 E2 C7 B1 B1 D0 D8 90 03 63 C2 CF FE 69 EE B3 B3 B3 96
BF 83 83 E2 C7 B1 B1 D0 CD 85 16 76 D7 DA EB 7C FB A6 A6 A6 83
шлю в общ чат 7 букв а латинских (ааааааа)
(38 61 00 61 00 61 00 61 00 61 00 61 00 61 00 00 00 00 00 00 00 )
теперб подскажите мне пожаалуйста как работает оператор xor и вообще что мне делать дальше
заранее спасибо
зы паскаль в принципе я норм знаю :)

VORON
12.06.2008, 15:59
Может стоит разные фришарды в разных топиках исследовать? По моему каша будет если дальше так пойдет.

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

Добавлено через 1 минуту
как щас есть- оставлять- тоже не дело...
людей надо рассортировать по интересам к каждому серваку.. в одну кашу все серваки мешать нельзя ето бардак.. но как ето сделать?

VORON
12.06.2008, 16:44
VORON, проконсультируйте плз :)
/\
||

ухх.. еслиб я мог всё...
я свою новую шифрацию никак осилить не магу.. хотя уже наверно и небуду осилять ее.. ушел на другой шард..
но вижу что тут куча логов развелось с разных шардов и каждый ждет помощи ето все осмыслить и каждому чемто помоч конечноже модеры невсилах.. поетому надо както разделять топ по сервакам чтоб несколько людей объединять общей задачей..
сам посуди скока я времени портратил на то чтоб решить вопрос с шардом описываемым на 6-ти листах етого топа.. с одного лога ниче толком и невыцедиш да и заниматься етим мало кому интересно.. надо разделять топик по названиям серваков.. ждем подраздела от XKORа.. там потихоньку самымые популярные сервера будут обдумываться людьми которые в етом заинтересованы сами

Murdoc
12.06.2008, 17:11
student, это левак какой-то.
Откуда это?

Из WP PPC на сколько я прнимаю.

FoGis
17.06.2008, 11:29
Ребят у меня есть скрипт для ppc на обход защиты моего серва, может мне кто помоч пакхак переделать на него имхо чет непонимаю.

Name4Me
20.06.2008, 12:54
КУ, иметься стандартний трабл пакетхак не дешефрует пакети, точнее не входящие дешифрует правильно на половину а исходящий вобще не правильно... начав с анализа входящего трафика (так как на половину он правильний я пришол к тому что алгоритм дешефрации входящего трафа тру) вияснил что проблема с входящим трафиком состоит в том что пкх не правильно генерирует первичний ключ.
Собствено сам вопрос раскажите плиз как генерируеться начальний ключ в пкх (ток плиз как для нуба на примере) плз.

З.ы. Смотрел исходники пкх на сколько я понимаю первичний ключ генерируеться иниткей, но самому сгенерировать ключ не получалось (точнее получался не правильний ключ...)

PanAm
20.06.2008, 14:58
Name4Me, выложи для начала первые пакеты от гейм сервера на них и пример будет

VORON
21.06.2008, 08:16
Собствено сам вопрос раскажите плиз как генерируеться начальний ключ в пкх (ток плиз как для нуба на примере) плз.

пост №97 на 5-й странице
а вапще по сути то что тут описывалось в начале оч похоже на то что ты описал..
попробуй ету измененную ДЛЛ подсунуть в пакетхак.. возможно она осилит входящий трафик- коректно..
ДЛЛ прикреплена к посту етому..
при старте пакетхака (режим перехвата- скрытый)

Breadfan
22.06.2008, 17:00
пост №97 на 5-й странице
а вапще по сути то что тут описывалось в начале оч похоже на то что ты описал..
попробуй ету измененную ДЛЛ подсунуть в пакетхак.. возможно она осилит входящий трафик- коректно..
ДЛЛ прикреплена к посту етому..
при старте пакетхака (режим перехвата- скрытый)

а исходник длл-ки можно увидеть? входящий траф вроде распознала, а исходящий все пакеты выглядат как пакеты 0хВ8, или 0х44 или еще как то, вобщем абсолютно все исходящие пакеты становятся одинакового типа

Murdoc
24.06.2008, 12:13
ДЛЛ прикреплена к посту етому..
при старте пакетхака (режим перехвата- скрытый)

Кроме режима перехвата какие опции должны быть включены/выключены? Обход смены ключа ксор? не дешифровывать трафик?

MHz
24.06.2008, 22:17
У меня еще не сформировались четко вопросы, но все-таки попробую изложить их.
Да, все замечательно, у нас есть дамп и тулза для проверки алгоритма шифрации, т.е. остается дело за "малым" - угадать его.
Мне кажется что такой подход совсем не гарантирует конечный результат и может поглотить бесконечное кол-во времени. Отсюда вопросы.
1. xkor - как ты догадался, что надо перехватывать API вызов connect? Как можно догадаться какими функциями посылаются и принимаются пакеты? Это send и recv или другие?
2. Что посоветуете почитать про отладку процессов и дизассемблирование? С чего начать?

Т.е. мне не нравится "угадывать" я хочу "знать" алгоритм. Для этого придется разбираться с хакерством. На ассемблере я программировал но чуть-чуть. Посоветуйте куда копать?

Breadfan
24.06.2008, 22:54
У меня еще не сформировались четко вопросы, но все-таки попробую изложить их.
Да, все замечательно, у нас есть дамп и тулза для проверки алгоритма шифрации, т.е. остается дело за "малым" - угадать его.
Мне кажется что такой подход совсем не гарантирует конечный результат и может поглотить бесконечное кол-во времени. Отсюда вопросы.
1. xkor - как ты догадался, что надо перехватывать API вызов connect? Как можно догадаться какими функциями посылаются и принимаются пакеты? Это send и recv или другие?
2. Что посоветуете почитать про отладку процессов и дизассемблирование? С чего начать?

Т.е. мне не нравится "угадывать" я хочу "знать" алгоритм. Для этого придется разбираться с хакерством. На ассемблере я программировал но чуть-чуть. Посоветуйте куда копать?

ммм екзешник и длл-ки в л2 упакованы Themida одной из последих версий, а это, как говорят, один из лучших крипторов на данный момент (конечно это не значит что абсолютно непреодолимый). И если все же у тебя получается снимать РАБОЧИЙ (aka Осмысленный, а не команды для VM) дамп с этих файлов , не мог бы ты выложить тутор по дампированию?

MHz
24.06.2008, 23:01
ммм екзешник и длл-ки в л2 упакованы Themida ... если у тебя получается снимать РАБОЧИЙ (aka Осмысленный, а не команды для VM)

Я начал копать эту тему только сегодня. Бегло поглядев на исходники inject.dll я вроде как понял, что эта либа находит в памяти обращение к API шной ф-ции connect и переставляет его на вызов себя. Я конечно могу ошибаться. Так что мне кажется, что в момент вызова send или recv код отвечающий за "шифрование" уже загружен в память и должен быть "виден" в каком-нибудь отладчике. Повторю еще раз это мои гипотезы. Видимо ты более сведущ в этих вопросах. С удовольствие выслушаю твои соображения.

P.S. Админы ведь как-то меняют стандартную шифрацию? Не думаю, чтобы у них был исходный код клиента.

Breadfan
25.06.2008, 00:02
P.S. Админы ведь как-то меняют стандартную шифрацию? Не думаю, чтобы у них был исходный код клиента.

Обычно покупают готовый пакет защиты и все, т.е. сами практически ничего неделают. По поводу "более сведущ в этих вопросах" повторюсь: я работаю слесарем, к программированию не имею абсолютно никакого отношения. Просто попытки уже были

VORON
28.06.2008, 15:00
Он самый....

Ну если тебе ето поможет.. то раньше там было так:

library newxor;

uses
windows,
Coding in 'Coding.pas';

type
TXorCoding = class(TCodingClass)
private
keyLen: Byte;
public
constructor Create;
procedure InitKey(const XorKey; Interlude: Boolean = False);override;
procedure DecryptGP(var Data; const Size: Word);override;
procedure EncryptGP(var Data; const Size: Word);override;
end;

TXorCodingOut = class(TCodingClass)
private
keyLen: Byte;
public
constructor Create;
procedure InitKey(const XorKey; Interlude: Boolean = False);override;
procedure DecryptGP(var Data; const Size: Word);override;
procedure EncryptGP(var Data; const Size: Word);override;
end;

function CreateCoding(Value:PCodingClass): HRESULT; stdcall;
begin
Result:=0;
try
Value^:=TXorCoding.Create;
except
Result:=-1;
Value^:=nil;
end;
end;

function CreateCodingOut(Value:PCodingClass): HRESULT; stdcall;
begin
Result:=0;
try
Value^:=TXorCodingOut.Create;
except
Result:=-1;
Value^:=nil;
end;
end;

exports CreateCoding, CreateCodingOut;

{ TXorCoding }

constructor TXorCoding.Create();
begin
FillChar(GKeyS[0],SizeOf(GKeyS),0);
FillChar(GKeyR[0],SizeOf(GKeyR),0);
keyLen := 0;
End;

procedure TXorCoding.DecryptGP(var Data; const Size: Word);
var
k:integer;
pck:array[0..$4FFF] of Byte absolute Data;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor GKeyR[k and keyLen] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor GKeyR[0];
Inc(PLongWord(@GKeyR[0])^,size);
PLongWord(@GKeyR[4])^:=PLongWord(@GKeyR[4])^ xor PLongWord(@GKeyR[0])^;
end;

procedure TXorCoding.EncryptGP(var Data; const Size: Word);
var
i:integer;
pck:array[0..$4FFF] of Byte absolute Data;
begin
if size<>0 then pck[0]:=pck[0] xor GKeyS[0];
for i:=1 to size-1 do
pck[i]:=pck[i] xor GKeyS[i and keyLen] xor pck[i-1];
Inc(PLongWord(@GKeyS[keyLen-7])^,size);
PLongWord(@GKeyS[4])^:=PLongWord(@GKeyS[4])^ xor PLongWord(@GKeyS[0])^;
end;

procedure TXorCoding.InitKey(const XorKey; Interlude: Boolean = False);
var key2:array[0..15] of Byte;
begin
keyLen:=7;
Move(XorKey,key2,4);
key2[0]:=key2[0]xor $82;
key2[1]:=key2[1]xor $93;
key2[4]:=key2[2]xor $1a;
key2[5]:=key2[3]xor $41;
key2[2]:=0;
key2[3]:=0;
key2[6]:=0;
key2[7]:=0;
Move(key2,GKeyS,16);
Move(key2,GKeyR,16);
end;

{ TXorCodingOut }

constructor TXorCodingOut.Create;
begin
FillChar(GKeyS[0],SizeOf(GKeyS),0);
FillChar(GKeyR[0],SizeOf(GKeyR),0);
keyLen := 0;
end;

procedure TXorCodingOut.DecryptGP(var Data; const Size: Word);
var
k:integer;
pck:array[0..$4FFF] of Byte absolute Data;
b: Integer;
begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor GKeyR[k and keyLen] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor GKeyR[0];

b:=0;
for k:=1 to size-1 do b:=b+pck[k];

if size>1 then begin
GKeyR[0]:=GKeyR[0] xor b;
if (b<=$FF) then GKeyR[1]:=GKeyR[1] xor (b+size)
else GKeyR[1]:=GKeyR[1] xor (b shr 8);

PLongWord(@GKeyR[4])^:=PLongWord(@GKeyR[4])^ xor PLongWord(@GKeyR[0])^;
if (b<=$ff) and ((b+size)>$FF) then GKeyR[2]:=GKeyR[2] xor 1;

if(b<=$ff)then GKeyR[5]:=GKeyR[5] xor (size + b);
end;
end;

procedure TXorCodingOut.EncryptGP(var Data; const Size: Word);
var
i:integer;
pck:array[0..$4FFF] of Byte absolute Data;
b: Integer;
begin
b:=0;
for i:=1 to size-1 do b:=b+pck[i];

if size<>0 then pck[0]:=pck[0] xor GKeyS[0];
for i:=1 to size-1 do
pck[i]:=pck[i] xor GKeyS[i and keyLen] xor pck[i-1];

if size>1 then begin
GKeyS[0]:=GKeyS[0] xor b;
if(b<=$FF)then GKeyS[1]:=GKeyS[1] xor (b+size)
else GKeyS[1]:=GKeyS[1] xor (b shr 8);

PLongWord(@GKeyS[4])^:=PLongWord(@GKeyS[4])^ xor PLongWord(@GKeyS[0])^;
if(b<=$ff)and(b+size>$FF)then GKeyS[2]:=GKeyS[2] xor 1;

if(b<=$ff)then GKeyS[5]:=GKeyS[5] xor (size + b);
end;
end;

procedure TXorCodingOut.InitKey(const XorKey; Interlude: Boolean);
var key2:array[0..15] of Byte;
begin
keyLen:=7;
Move(XorKey,key2,4);
key2[0]:=key2[0]xor $82;
key2[1]:=key2[1]xor $93;
key2[4]:=key2[2]xor $1a;
key2[5]:=key2[3]xor $41;
key2[2]:=0;
key2[3]:=0;
key2[6]:=0;
key2[7]:=0;
Move(key2,GKeyS,16);
Move(key2,GKeyR,16);
end;

begin

end.



они оставили входящий траф без изменения.. способ вычисления начального ключа- тоже не тронули.. изменился тока алгоритм шифрации исходящего трафика..
сломать его- для меня непосильная задача покачто... буду рад услышать что у тебя что то получилось..

Breadfan
28.06.2008, 15:04
... буду рад услышать что у тебя что то получилось..
Я не один, с нами nezabudkin :) Уберите название серва)

VORON
28.06.2008, 15:13
Я не один, с нами nezabudkin :) Уберите название серва)

из наблюдений за исходящим трафиком обнаружил лиш то что лог однобайтового пакета константа- значит ключ не меняется при однобайтовом исходящем пакете.. больше мыслей нету-(((

Breadfan
28.06.2008, 18:22
______38
______00 31 00 31 00 31 00 31 00 31 00 31 00 31 00 31
__№ | 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F | Строкой
-----+-------------------------------------------------+-----------------
0000 | D7 08 B2 12 AE 64 E6 D6 39 E6 5C FC 40 8A 08 38 | Ч.І.®dжЦ9ж\ь@Љ.8
0010 | D7 08 B2 12 AE 64 E6 D6 39 E6 5C FC 40 8A 08 38 | Ч.І.®dжЦ9ж\ь@Љ.8
0020 | D7 08 B2 12 AE 64 E6 D6 39 E6 5C FC 40 8A 08 38 | Ч.І.®dжЦ9ж\ь@Љ.8
0030 | D7 08 B2 12 AE 64 E6 D6 39 E6 5C FC 40 8A 08 38 | Ч.І.®dжЦ9ж\ь@Љ.8
0040 | D7 08 B2 12 AE 64 E6 D6 39 E6 5C FC 40 8A 08 38 | Ч.І.®dжЦ9ж\ь@Љ.8
0050 | D7 39 83 12 AE 55 D7 | Ч9ѓ.®UЧ

это в чат "1" много раз подряд (40). смущает [0]=D7=[16]=[32]=[48]....пока отбросим в сторону [0]. Имею мнение: 1)мб ключ не 8 байт, а больше? 2) скорее всего ключ (8 байт) при длине рск>8 изменяется и происходит чтото типа "ключ"="ключ"+"модифиключ"...вариаций до кучи( Размер такого пакета = 9 + (кол-во 1)*2, последние 7 байт 0, при условии что пишем в общаг
Равенство поледнего байта - первому - совпадение

VORON
28.06.2008, 18:50
это в чат "1" много раз подряд (40). смущает [0]=D7=[16]=[32]=[48]....пока отбросим в сторону [0]. Имею мнение: 1)мб ключ не 8 байт, а больше? 2) скорее всего ключ (8 байт) при длине рск>8 изменяется и происходит чтото типа "ключ"="ключ"+"модифиключ"...вариаций до кучи( Размер такого пакета = 9 + (кол-во 1)*2, последние 7 байт 0, при условии что пишем в общаг

головой думать надо.. и бональнве вопромы ты сам себя подтвердить можеш.. ключ 8 байтов* почему? да потомучто 3-й пакет и 4-й пакет коректно расшифровываются...
(с использованием моей длл исходники для которой я дал..)
8 байтов полюбасу... но вот как ключ меняется? алшоритм нужен

Breadfan
28.06.2008, 19:13
головой думать надо.. и бональнве вопромы ты сам себя подтвердить можеш.. ключ 8 байтов* почему? да потомучто 3-й пакет и 4-й пакет коректно расшифровываются...
(с использованием моей длл исходники для которой я дал..)
8 байтов полюбасу... но вот как ключ меняется? алшоритм нужен

Голова уже просто неработает абсолютно, щас все подряд перебираю....Админы - отсыпьте блин.....

VORON
28.06.2008, 19:28
ИТАК! СОЗДАН ПОДРАЗДЕЛ!
в етом разделе создаем темы в названии которых будет указываться СЕРВЕР и сайт....
будем людей объединять по интересам....
для общих вопросов создан и приклеен етот топик

RoZ
01.07.2008, 10:19
ИТАК! СОЗДАН ПОДРАЗДЕЛ!
в етом разделе создаем темы в названии которых будет указываться СЕРВЕР и сайт....
будем людей объединять по интересам....
для общих вопросов создан и приклеен етот топикЧто то немного желающих...стесняются чтоль все... :)
Если сервер региональный, т.е. нет доступа с внешнего мира, есть только внутри сетевой доступ, темку тоже можно создавать ?

З.Ы. нашёл багу в l2pbx:
пакет: 44 44 44 44 34 C6 B2 12 00 11
ключ: 01 99 66 55 A1 6C 54 87
результат: 45 99 66 55 D1 9E 20 27 13 88 ; 0B 99 66 55 A1 6C 54 87 ; 10


метод: var
k: integer;

begin
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor key[k and 7] xor pck[k-1];
if size<>0 then pck[0]:=pck[0] xor key[0];
IncAsInteger(key, 0, size);
end.

т.е. после нескольких одинаковых байтов пакете идёт ошибка

Breadfan
08.07.2008, 03:26
Для изменения получения первого ключа на исходящий трафик нужно править эту часть? :
procedure TXorCodingOut.InitKey(const XorKey; Interlude: Boolean);
var key2:array[0..15] of Byte;
begin
keyLen:=7;
Move(XorKey,key2,4);
key2[0]:=key2[0]xor $82;
key2[1]:=key2[1]xor $93;
key2[4]:=key2[2]xor $1a;
key2[5]:=key2[3]xor $41;
key2[2]:=0;
key2[3]:=0;
key2[6]:=0;
key2[7]:=0;
Move(key2,GKeyS,16);
Move(key2,GKeyR,16);
end;

VORON
08.07.2008, 21:04
хотелосьбы чтоб кто то научил ревеверсингу.. с чего начать? что делать.. необходимый софт для етого ? и вкраце что да как там.. метод подбора и наблюдение закономерностей лога в более менее сложных случаях- недает результата.. реверсинг выглядит более надежней.. немогбы ктонить дать краткую инструкцию по етому поводу?

GranDIS
09.07.2008, 17:40
Здраствуите уважаемые Читеры. Судя по прочитаному в ФАК я попал как раз туда где надо.
Сразу предупреждаю я новечёк в работе с пакетами но уже достиг небольших высот для себя, но шас столкулся с проблеммои.
Сервер(La2Onix х200к мульти) на котором играю перешол на Kamael и теперь я не как не могу коректно запустить PHX и отправить правельные пакеты.
1. при запуске Phx у меня заместь ника стоит просто "-" как это можно исправить.
2. при отправке пакетов на скилы заместь них я получаю шо то совсем странное (напимер при изучении скила Freenteza critical power я просто лечю в гиран)
с вашего форума скачал пакет ини для Т1 поставил его но такнечего и не изменилось(использовал L2phx 3.1.9)
а при использовании L2phx 3.2.0 вылетате ошибка с модулями.
Очень сильно прошу помогите мне с етим разобраца.
Жду ваших отзывов!!!
З.Ы. скачал ,нашол ID скилов kamael и конвентор для них но всеравно не чего неполучаецооО

Добавлено через 14 часов 54 минуты
Access violation at adress 00528B13 in module 'l2phx.exe' Reed of adress 00000000
и еше подскажите вот на шо он ругаеца и как это убрать :(

dmitry501
09.07.2008, 18:07
хотелосьбы чтоб кто то научил ревеверсингу.. с чего начать? что делать.. необходимый софт для етого ? и вкраце что да как там.. метод подбора и наблюдение закономерностей лога в более менее сложных случаях- недает результата.. реверсинг выглядит более надежней.. немогбы ктонить дать краткую инструкцию по етому поводу?

Почитай на wasm.ru есть отличные туториалы

VORON
10.07.2008, 04:50
а можно своими словами? ну без прямой ссылки "ПОШЕЛ ТЫ НА.. wasm.ru"
ну нам нужно етот ресурс поднимать а не тот.. и хочется чтоб тут люди общались и узнавали друг от друга инфу полезную.. если есть знания поделись.. ответ на мой вопрос думаю уложится на одну страницу поста.. кто может ответить норм?

Добавлено через 18 минут
Для изменения получения первого ключа на исходящий трафик нужно править эту часть? :
procedure TXorCodingOut.InitKey(const XorKey; Interlude: Boolean);
var key2:array[0..15] of Byte;
begin
keyLen:=7;
Move(XorKey,key2,4);
key2[0]:=key2[0]xor $82;
key2[1]:=key2[1]xor $93;
key2[4]:=key2[2]xor $1a;
key2[5]:=key2[3]xor $41;
key2[2]:=0;
key2[3]:=0;
key2[6]:=0;
key2[7]:=0;
Move(key2,GKeyS,16);
Move(key2,GKeyR,16);
end;

незнаюю у меня они (ключи) совпали поетому 2 процедуры или как или функции лучше были идентичны я над етим не заморачивался.. ето вопрос напряму к КОРУ.. тока он знает как он там напрограмил их-) но думаю названия процедур даны относительно клиента.. т.е. если ОУТ то ето от клиента исходящий траф.. думаю так..
а как проверить? ну думаю ето надо.. хм.. задумался аж...
если объявить глобальную переменную какуюто новую.. то приравнивать ее значение к текущему пакету.. (хотя вроде она уже и есть и создовать ее ненадо) (незнаю насколько она глобальна).. хотя нафика ето ваще? .. в процедуре вычисления ключа ключ делать равным 0000 0000 и 1111 1111 (2 ключа для разных направлений).. при етом в алгоритме шифрации сделать ксор само на себя перед пименением ключа.. у и там где вылезет 000 там одно направление .. а где 111 то другое.. ксор само на себя=0 поетому в начале процедуры можно тупо обнулять переменную PCK для того чоб узнать какая из процедур вычисления начального ключа за какое направление отвечает..
думаю такЪ

dmitry501
10.07.2008, 05:53
Кхм. Как-то затруднительно тебе ответить... Каждый сам решает с чего начать, в зависимости от начальных знаний и навыков.
Ну начнем с того, что нужно знать логическое устройство процессора x86, регистры, память, понятие стека, прерываний и т.д. Затем нужно знать, хотя бы в общих чертах, логическое устройство win32, модель памяти, соглашения о передачи параметров, загрузка исполняемых файлов, dll, сегменты программы, сообщения, стандартные вызовы как windows api так и native api да и еще много чего, что я упустил. Если это не знаешь, читай теорию, пробуй на практике.
По поводу инструментов - набор стандартный. Отладчик под windows, рекомендую OllyDebugger - бесплатный и с большими возможностями, в принципе можно использовать любой, хоть windebugger от MS, хоть WinICE от NuMega. также онадобится и диссасемблер. Их тоже великое количество, но как правило в литературе наиболее полно описан IDAPro - великолепный диссассемблер, да и кряк к нему не проблема.Без всего этого в некоторых случаях можно обойтись. Если рассматриваемая программа без защиты и написана на известном языке можно попробовать декомпилировать ее. DeDe для С, Delphi, есть также декомпиляторы для VB, и для .net программ. Все это можно найти в интернете.
Что касается конкретно Л2, то также потребуется изучение материалов по внедрению своих программ, хуков. А также изучение библиотеки winsocks2, протокола TCP/IP.
Ну в общем я даже не знаю, что и сказать...

VORON
10.07.2008, 07:13
Кхм. Как-то затруднительно тебе ответить... Каждый сам решает с чего начать, в зависимости от начальных знаний и навыков.
Ну начнем с того, что нужно знать логическое устройство процессора x86, регистры, память, понятие стека, прерываний и т.д. Затем нужно знать, хотя бы в общих чертах, логическое устройство win32, модель памяти, соглашения о передачи параметров, загрузка исполняемых файлов, dll, сегменты программы, сообщения, стандартные вызовы как windows api так и native api да и еще много чего, что я упустил. Если это не знаешь, читай теорию, пробуй на практике.
По поводу инструментов - набор стандартный. Отладчик под windows, рекомендую OllyDebugger - бесплатный и с большими возможностями, в принципе можно использовать любой, хоть windebugger от MS, хоть WinICE от NuMega. также онадобится и диссасемблер. Их тоже великое количество, но как правило в литературе наиболее полно описан IDAPro - великолепный диссассемблер, да и кряк к нему не проблема.Без всего этого в некоторых случаях можно обойтись. Если рассматриваемая программа без защиты и написана на известном языке можно попробовать декомпилировать ее. DeDe для С, Delphi, есть также декомпиляторы для VB, и для .net программ. Все это можно найти в интернете.
Что касается конкретно Л2, то также потребуется изучение материалов по внедрению своих программ, хуков. А также изучение библиотеки winsocks2, протокола TCP/IP.
Ну в общем я даже не знаю, что и сказать...

так нагрузил-) но впринципе то ты прав.. ето надо знать.. об 90% тобой перечисленнного я имею 10% представление.. обо всё по немногу типа.. на самом деле меня интерисуют вопросы более абстрактные не влезая в асм код даже.. что мы будем перехватывать? как отловить нужный момент? учитывая загрузку ЦП 99% как отсеять ненужное? дебагер что будет делать? как поступит дизасемблер? кк на нужном месте поставить чекпоинт (учитывая 1 млрд опер. в сек)... и т.д. расскажи без пальцегнутия чениить полезное

ratvier
10.07.2008, 10:06
меня интерисуют вопросы более абстрактные не влезая в асм код даже..
Не такие уж они и абстрактные...
что мы будем перехватывать?
Что угодно, и даже всё подряд
как отловить нужный момент?
Интуиция, огромная практика, представление по каким признакам можно выделить нужный участок кода, и конечно танцы с бубном =D
дебагер что будет делать? как поступит дизасемблер?
Дизасм и дебагер - неразделимые вещи, фтыкать в асм листинг, конечно, здорово, но я предпочитаю сразу щупать в дебагере)

зыж Трудно что-то сказать по такому сложному вопросу, гораздо проще объяснять на практике

RoZ
10.07.2008, 11:12
а можно своими словами? ну без прямой ссылки "ПОШЕЛ ТЫ НА.. wasm.ru"
ну нам нужно етот ресурс поднимать а не тот.. и хочется чтоб тут люди общались и узнавали друг от друга инфу полезную.. если есть знания поделись.. ответ на мой вопрос думаю уложится на одну страницу поста.. кто может ответить норм?
Весь вопрос в том, есть ли здесь такие люди...ИМХО начинать надо с написания "лечилки" для какой нить несложной программки. Сам я уделил этому месяц, успешно выполнил задачу (программка была виртуальный синтезатор, просила ввести код), получил массу знаний и самое главное какой никакой опыт. После чего понял что это не моё. :)
З.Ы. 1) Купил книжку по ассемблеру.
2) Установил отладчик.
3) "Почитал" wasm.ru, т.е. только интересующие меня темы на тот момент.

Sherman
10.07.2008, 12:46
ммм екзешник и длл-ки в л2 упакованы Themida одной из последих версий, а это, как говорят, один из лучших крипторов на данный момент (конечно это не значит что абсолютно непреодолимый). И если все же у тебя получается снимать РАБОЧИЙ (aka Осмысленный, а не команды для VM) дамп с этих файлов , не мог бы ты выложить тутор по дампированию?
На своем сервере.... Длл, в которой происходит шифрация упакована последней фемидой, но, Олли, плагин хайд дебугер, позволяет смотреть, что же там все таки делается, а следовательно, контрал+Ц, контрал+В и анализировать.


Не такие уж они и абстрактные...

Что угодно, и даже всё подряд

Интуиция, огромная практика, представление по каким признакам можно выделить нужный участок кода, и конечно танцы с бубном =D

Дизасм и дебагер - неразделимые вещи, фтыкать в асм листинг, конечно, здорово, но я предпочитаю сразу щупать в дебагере)

зыж Трудно что-то сказать по такому сложному вопросу, гораздо проще объяснять на практике

Зачем все подряд, аттач олли в клиент, исполняемые модули, ищешь энджин, открываешь его, поиск строковых обьявлений, и у тебя список функций движка клиента, с их адресами, дальше бряки на функции, которые хочешь анализировать. Кстати, функции названы почти аналогично названиям пакетов из списка Packets.ini пкх



Дим, ты мне онлайн в аське нужен. кое что сделал и нарыл много вкусного.

dmitry501
10.07.2008, 17:55
VORON, я вроде пальцы не гну. но это в 2 словах не объяснить.

Sherman, я в отпуске, вот иногда в инете появляюсь, форумы почитать, не более :) Во-вторник выхожу на работу, свяжемся...

VORON
10.07.2008, 18:30
исполняемые модули, ищешь энджин, открываешь его, поиск строковых обьявлений, и у тебя список функций движка клиента, с их адресами,

можно тут поподробней?
софтину пока исчу.. буду благодарен если кто то выложит рабочие ссылки для софтины необходимой для реверсинга..
можно "нуб киллинг" сделать?: скажите что такое инджин длл?

ratvier
11.07.2008, 10:24
ищешь энджин, открываешь его, поиск строковых обьявлений, и у тебя список функций движка клиента, с их адресами

Никогда бы не подумал, что клиент так устроен О_о

Sherman
11.07.2008, 12:42
Никогда бы не подумал, что клиент так устроен О_о

А как ты думал он устроен?

Просто для примера кусок из Engine.dll:

00444B80 8B41 48 MOV EAX,DWORD PTR DS:[ECX+48]
00444B83 8B08 MOV ECX,DWORD PTR DS:[EAX]
00444B85 56 PUSH ESI
00444B86 8B7424 08 MOV ESI,DWORD PTR SS:[ESP+8]
00444B8A 56 PUSH ESI
00444B8B 6A 1B PUSH 1B
00444B8D 68 88D78000 PUSH Engine.0080D788 ; ASCII "cd"
00444B92 50 PUSH EAX
00444B93 FF51 64 CALL DWORD PTR DS:[ECX+64]
00444B96 8B15 44793204 MOV EDX,DWORD PTR DS:[<&Core.GNetworkLog>; Core.GNetworkLog
00444B9C 8B02 MOV EAX,DWORD PTR DS:[EDX]
00444B9E 56 PUSH ESI
00444B9F 68 38D78000 PUSH Engine.0080D738 ; UNICODE "(Send)SocialAction ActionType:%d"
00444BA4 50 PUSH EAX
00444BA5 FF15 80773204 CALL DWORD PTR DS:[<&Core.FOutputDevice:>; Core.FOutputDevice::Logf
00444BAB A1 BC6BB800 MOV EAX,DWORD PTR DS:[GL2Console]
00444BB0 8B08 MOV ECX,DWORD PTR DS:[EAX]
00444BB2 56 PUSH ESI
00444BB3 68 38D78000 PUSH Engine.0080D738 ; UNICODE "(Send)SocialAction ActionType:%d"
00444BB8 6A 02 PUSH 2
00444BBA 50 PUSH EAX
00444BBB FF91 C0020000 CALL DWORD PTR DS:[ECX+2C0]
00444BC1 83C4 2C ADD ESP,2C
00444BC4 5E POP ESI
00444BC5 C2 0400 RETN 4


это ф-ция SocialAction, в ней прыжки на отправку пакета, запись пакета в лог (клиент умеет вести логи пакетов), и прыжек в обработчик окна(NWindow.dll)

Правда я чуток не по теме тут пишу, прошу простить )


Dmitry501, м.б. тему завести - "Изучаем клиент изнутри"?

Breadfan
11.07.2008, 13:28
Куски из Engine тут мало помогут). Необходимо смотреть l2.exe и npkpdb.dll...Насколько я помню именно в длл вшиты искомые алгоритмы. Во избежание вопросов поясню: есть 2 клиента, один от простого серва, второй от шифрованного, различаются именно этими файлами, отсюда и сделан вывод.

Sherman
11.07.2008, 15:42
Согласен, просто наглядно показал как оно выглядит. Если говорит о моем сервере, то в этом месте:
00444B93 FF51 64 CALL DWORD PTR DS:[ECX+64]

у меня идет прыжок в функцию отправки, в которой перед вызовом Send
добавлен неродной для клиента длл кой прыжок в нее, где происходит шифрование пакета.

qai
13.07.2008, 21:19
Столкнулся с аналогичной проблемой...
Вообщем история была такова, сначало на сервере стояла просто защита ЛС от ботов, l2.exe был невидим, стояли последние верси ГГ итд итп, но вообщем это все более или менее обходилось, можно было юзать бота, phx итд итп
Однако в один день это пофиксили проведя тех работы на сервере и соответственно заменив в патче файл npkcrypt
После этого пакеты стали приходить зашифрованными
Бот начал выдавать сообщение аля
PacketProcessError [F9][00]

ну дак вот вообщем считаю корнем сего зла файл npkcrypt
ЗЫ Правильно ли я считаю ?

garmon
14.07.2008, 15:34
Извините за оффтоп.
Но если защита основанна на шифрации пакетов логин сервера, то не проще ли сделать фейк логин и спокойно продолжать юзать бота? ;)

MHz
14.07.2008, 20:47
На своем сервере.... Длл, в которой происходит шифрация упакована последней фемидой, но, Олли, плагин хайд дебугер, позволяет смотреть, что же там все таки делается, а следовательно, контрал+Ц, контрал+В и анализировать.

Пожалуйста, просветите ленивого нуба, как помешать Фемиде находить Олли, а то вот что выходит у меня

http://coderx.ru/attachment.php?attachmentid=52&stc=1&d=1216050399

Если не трудно, посоветуйте. Спс.

P.S. HideDebugger 1.23

Breadfan
15.07.2008, 00:22
Извините за оффтоп.
Но если защита основанна на шифрации пакетов логин сервера, то не проще ли сделать фейк логин и спокойно продолжать юзать бота? ;) Шифрован трафик ГЕЙМ серва)

Добавлено через 2 минуты
Столкнулся с аналогичной проблемой...
Вообщем история была такова, сначало на сервере стояла просто защита ЛС от ботов, l2.exe был невидим, стояли последние верси ГГ итд итп, но вообщем это все более или менее обходилось, можно было юзать бота, phx итд итп
Однако в один день это пофиксили проведя тех работы на сервере и соответственно заменив в патче файл npkcrypt
После этого пакеты стали приходить зашифрованными
Бот начал выдавать сообщение аля
PacketProcessError [F9][00]

ну дак вот вообщем считаю корнем сего зла файл npkcrypt
ЗЫ Правильно ли я считаю ?
Мож быть, чтобы наверняка просто напросто сравни файлы двух клиентов по содержимому, обращая внимание только на .ехе и .длл

Добавлено через 2 минуты
Пожалуйста, просветите ленивого нуба, как помешать Фемиде находить Олли, а то вот что выходит у меня

http://coderx.ru/attachment.php?attachmentid=52&stc=1&d=1216050399

Если не трудно, посоветуйте. Спс.

P.S. HideDebugger 1.23
Существует также плагин Phant0m, также уводит олли в хайд. Ну или можно попробовать снять защиту используя туторы наподобие http://forum.antichat.ru/showthread.php?t=34869

MHz
17.07.2008, 23:22
К сожалению никто не посчитал нужным мне помочь. Ну и ладно! Сам справился.
1. Загружаем клиент линейки, он нам показывает окно регистрации.
2. Запускаем Олю.
3. Запускаем в Оле пнх
4. Коннектимся чаром к серваку
5. Ставим бряки на методах TXorCoding.EncryptGP - изучаем шифрацию серверного трафика и TXorCodingOut.DecryptGP - изучаем шифрацию клиентского трафика.

Sherman
18.07.2008, 14:20
К сожалению никто не посчитал нужным мне помочь. Ну и ладно! Сам справился.
1. Загружаем клиент линейки, он нам показывает окно регистрации.
2. Запускаем Олю.
3. Запускаем в Оле пнх
4. Коннектимся чаром к серваку
5. Ставим бряки на методах TXorCoding.EncryptGP - изучаем шифрацию серверного трафика и TXorCodingOut.DecryptGP - изучаем шифрацию клиентского трафика.

Сори, за позний ответ, но в предыдущих моих постах это было описано.

Собственно, аттач в работающий процесс с хайддебагером.

Breadfan
19.07.2008, 00:10
К сожалению никто не посчитал нужным мне помочь. Ну и ладно! Сам справился.
1. Загружаем клиент линейки, он нам показывает окно регистрации.
2. Запускаем Олю.
3. Запускаем в Оле пнх
4. Коннектимся чаром к серваку
5. Ставим бряки на методах TXorCoding.EncryptGP - изучаем шифрацию серверного трафика и TXorCodingOut.DecryptGP - изучаем шифрацию клиентского трафика.

А разве это не будет анализ не л2 а л2рнх обработки??

MHz
19.07.2008, 23:36
А разве это не будет анализ не л2 а л2рнх обработки??
Меня в сейчас интересует шифрация серверного трафика, по-моему самый быстрый способ попасть туда, это из TXorCoding.EncryptGP потому что клиент получает данные от сервера через нее.
Чтобы анализировать работу newxor.dll достаточно встроенного отладчика в Delphi :)

P.S. Прошу прощения за косноязычие :)

P.P.S Таки удалось скомпилить все в 7-м Дельфи (у меня другого нет). Бряки надо ставить где-то в PacketProcessor :) Более детально сейчас выясняю где.

Добавлено через 1 час 42 минуты
xkor - как ты догадался, что надо перехватывать API вызов connect? Как можно догадаться какими функциями посылаются и принимаются пакеты? Это send и recv или другие?


А разве это не будет анализ не л2 а л2рнх обработки


Подебагал я l2phx в Delphi. Он сам во-всю юзает send и recv. Ты пожалуй прав. Через TXorCoding.EncryptGP далековато будет добираться до кода шифрования клиента, сейчас ищу место по-ближе :)

rasco.angel
20.07.2008, 00:52
Согласен, просто наглядно показал как оно выглядит. Если говорит о моем сервере, то в этом месте:
00444B93 FF51 64 CALL DWORD PTR DS:[ECX+64]

у меня идет прыжок в функцию отправки, в которой перед вызовом Send
добавлен неродной для клиента длл кой прыжок в нее, где происходит шифрование пакета.

на твоем сервере стоит защита l2guard. Вызов же конкретно функции чуть дальше в engine.dll : 004534B8 JMP l2guard.0F846680. опять же send по другому адресу: 004534C9 CALL DWORD PTR DS:[<&WSOCK32.#19>]

в ida очень наглядно на графах показывает этот самый алгоритм шифрования

rasco.angel
20.07.2008, 00:57
на твоем сервере стоит защита l2guard. Вызов же конкретно функции чуть дальше в engine.dll : 004534B8 JMP l2guard.0F846680. опять же send по другому адресу: 004534C9 CALL DWORD PTR DS:[<&WSOCK32.#19>]

в ida очень наглядно на графах показывает этот самый алгоритм шифрования

Base=0F810000
Size=00046000 (286720.)
Entry=0F8472EC l2guard.<ModuleEntryPoint>
Name=l2guard
Path=C:\Lineage\system\l2guard.dll

PanAm
22.07.2008, 14:31
Наверно глупый вопрос...
Дан шифрованный пакет и точно известно что это за пакет и алгоритм шифрования (стандартный для С4), как определить ключ шифрования?
в теме была утилита которая расшифровывала пакет, а нет (нельзя сделать) для нахождения ключа шифрования?

xkor
22.07.2008, 18:37
ксориш сначала каждый бай зашифрованного пакета на предыдущий, начиная со второго байта и до 8го, далее эти первые 8 байт ксориш на первые 8 байт расшифрованного пакета и получаеш ключ

Winners
27.07.2008, 17:44
Ребят собстно так же столкнулся с проблемой шифрации.....Тоечнее я понимаю что тут маленькая мелоч но я увы не совсем понимаю в области пакетов и прочих прелестей.....Ситуация такая сервер обновился с Хелбаунда до Грации да ява и бот начал писать такое
11:22:58 Link LoginServer Succeed.
11:23:05 Login LoginServer Success.
11:23:05 服务器[01]当前在线率:2.61%,能否登陆:能
11:23:08 Link GameServer Succeed.
11:23:09 ->Login GameServer Fail.

Логи в WPF пишут следующее.....
.................

[205] S>c 0ms. 14:26:21
-------------------------------------------------------------------------------
000000 1F 00 2F 96 37 0B 10 B3 | E9 FE FF 20 F1 03 00 E0 ../–7..ійюя.с..а
000010 F3 FF FF 62 EA FE FF 48 | F1 03 00 E0 F3 FF FF уяяbкюяHс..ауяя
================================================== =============================
[206] S>c 0ms. 14:26:21
-------------------------------------------------------------------------------
000000 1F 00 2F F6 2D 0B 10 F4 | E8 FE FF 8D EF 03 00 E0 ../ц-..фиюя�п..а
000010 F3 FF FF 00 E9 FE FF 10 | F0 03 00 E0 F3 FF FF уяя.йюя.р..ауяя
================================================== =============================
[207] C>s 0ms. 14:26:31
-------------------------------------------------------------------------------
000000 03 00 00 ...
================================================== =============================

Вот после последнего пакета пишет
11:23:09 ->Login GameServer Fail.

напротив пакета пишет описание мол протокол вершин......хз версия потокола была 828 пробывал менять на 831 не спасает.....В WPF забиты скрипты на фиксмув фиксеррор и скрипт декодировки трафика стандартный который в комплекте с WPF.
L2.ini _http://dump.ru/file_catalog/963797

Не гоните меня мол это не форум для настройки бота......

Я более чем уверен что проблема тут.....

//
// определим ключ GS:
//
if (_gAbsNumPkt = 2) then
if (gSys.TrafType = 2) and (gSys.isGS > 0) and _dFromServ then begin
if (le = 12) then gSys.tKeyType := 1; // 12 байтный пакет - тип 1. GSDecodeJ (90% l2j)
if (le = 16) then gSys.tKeyType := 2; // 16 байтный пакет - тип 2. GSDecode (sub-off servers)
if (le = $1A) then gSys.tKeyType := 3; // часть фри серверов Interlude
if (le = $1C) then gSys.tKeyType := 3; // часть фри серверов Interlude
if (le = $18 ) then gSys.tKeyType := 3; после перехода на Хелбаунд не работало дописал эту строчку пошло
if (le = $15) then gSys.tKeyType := 3; // официальные сервера Interlude (на данный момент)
if gSys.tKeyType > 0 then begin
s := copy(_dBuff,5,16);
if gSys.tKeyType < 3 then s := copy(s,1,4)+Hstr('A1 6C 54 87'); // C4/C5/псевдо интерлюд.
if gSys.tKeyType = 3 then s := copy(s,1,8 )+Hstr('C8 27 93 01 A1 6C 31 97'); // интерлюд.
Kci := s; Kco := s; Ksi := s; Kso := s;
scode := true; // запустим де/кодирование GS
writelogln('key:');writeloghexb(s);
end else writelogln('неопознанный ключевой пакет GS LA2 протокола')
end;
//

Я так понимаю с переходом на Грацию терь новй ключик ток как его определить и куда вписать я чесн гря хз((( Ребят подскажите что нада подправить сам пока не в силах

Добавлено через 1 час 37 минут
Ребятушки АП тему ломаю голову что и как начитывая не знакомые термины но результата ноль..... Помогите решить данную проблемку оч оч нуждаюсь в вашей помощи ((((

Winners
29.07.2008, 12:51
АП!!! Ребят помогите пожалуйста найти этот ключ шифрования гейм сервера для грации серв _www.lineage2rus.net В принципе я думаю вам той инфы что я дал в посте выше должно хватить но если нада будут еще какие данные я вам предоставлю. Ну так же буду рад если вы тут все в примере покажете как его вычислить..... Сразу говорю я пока дуб в программировании и пакетах поэтому и прошу вас как можно доступнее рассказать что куда и где глядеть и потом как это всунуть в тот скрипт кусок которого я вам тут предоставил.

З.Ы. Ребят проблема действительно очень актуальная..... Просто в л2 я довольно давно и сама игра уже поднадоела но я нашел новое в ней это ботоводить ради того чтоб быть самым богатым и самым припакованым) Ну мне нравится заниматся тем что выставлять ботов на фарм ресурсов торговлю и прочую лабудень а теперь этого делать не могу ((

Гость111
02.09.2008, 17:49
Я играю на Lin2world.net
запускаю прогу эту
запускаю клиент, но прога эта не видит соединений где должны быть логин и пасс
памагите чё делать ?

PanAm
04.09.2008, 14:21
Гость111, а нет ли у вас там в папке систем - fire.dll или hGuard.dll ? :D

Гость123121
05.09.2008, 06:11
Есть Fire.dll a hGuard'a нету

VORON
08.09.2008, 07:52
дРУЗЬЯ! программисты! помагите.. Я ПОПЫТАЛСЯ ЗАНЯТЬСЯ РЕВЕРСИНГОМ.. НО НИКУЯ САМ СМЫСЛ НЕПОНЯЛ! НО! у меня получилось знаете че??? с помощью ArtMoney отловить ключ в реальном режиме времени... т.е. ключ на будущий пакет... я мониторил 3 дня примерно.. с помощью ключа 8-ми байтового который перехватывает АРТМОНЕЙ- получается дешифровка пакетов- и ничего сложного побайтово отксорить...
пакетхак перехваатывал без дешифровки а артмоней- перехватывала ключ- и мониторил его
и я смог с помощью арт моней дешифровать все пакеты..
с помощью ключа от арт моней

Добавлено через 55 секунд
может леку напрегем? попросим его сделать прогу совмещающие функции арт моней и пакетхак?

Добавлено через 2 минуты
но помню 2 недели назад я ломал голову над етим... вродебы с одной стороны все просто- перехвати ключ из заданного адреса (даже в ручную..)... но сдругой стороны- хз сами додумайте голова устала..

Argot
08.09.2008, 12:12
Зачем изобретать велосипед выдрал алгоритм изменения ключа и все )).

VORON
08.09.2008, 20:58
Зачем изобретать велосипед выдрал алгоритм изменения ключа и все )).

а как? я знаю адрес где он сидит ско в памяти а как алгоритм его создания найти?
помаги с етим.. а я потом инструкцию в топе отпишу- новечкам как шифры ломать- реверсингом.. я так думаю найти точный адрес где хранится ключ в памяти- ето уже пол дела?? дальше нужно просто с ПО по ДИЗАСЕМБЛЕРУ разбираться.. дай инструкцию как и что там.. неработал с ними неразу..

xkor
09.09.2008, 13:51
может леку напрегем? попросим его сделать прогу совмещающие функции арт моней и пакетхак?

Добавлено через 2 минуты
но помню 2 недели назад я ломал голову над етим... вродебы с одной стороны все просто- перехвати ключ из заданного адреса (даже в ручную..)... но сдругой стороны- хз сами додумайте голова устала..теоретически можно, НО проблема синхронизации ключей и пактетов, во первых если несколько соединений надо както сопоставлять каждому соединению правильный процесс из которого брать ключи и сопоставлять их правильным пакетам..., да и это позволит только просматривать трафик свои пакеты отослать не выйдет...
насчет выдирания алгоритма - впринципе поставив хук на доступ к памяти где расположен ключ и при его срабатывании разобрав стек можно определить какая функция его меняла, точнее где она находиться, но скорее всего надо будет ещё правильно выбирать момент для её считывания так как она может исчезать для защиты когда не нужна..., хотя это всё впринципе реально, но на практике непробывал...

Argot
14.09.2008, 15:51
угу + ко всему этому добавляем что все алгоритмы накрыты фимидой.

Хотя бот уже давно есть))

VORON
17.09.2008, 06:46
угу + ко всему этому добавляем что все алгоритмы накрыты фимидой.

Хотя бот уже давно есть))

я хз что ты етим хотел сказать..
ты случайно не из програмерсково бомонда?? они уже сдесь были..
говорили что мы куйней занимаемся по жизни и боты уже сделаны.. если ты с ними незнаком могу познакомить..
а в етом топе нужно писать полезную информацию а не .... промолчу..

Faeton
18.09.2008, 06:07
я хз что ты етим хотел сказать..
ты случайно не из програмерсково бомонда?? они уже сдесь были..
говорили что мы куйней занимаемся по жизни и боты уже сделаны.. если ты с ними незнаком могу познакомить..
а в етом топе нужно писать полезную информацию а не .... промолчу..

Argot дело говорит, а то что ты не понимаешь его слова говорит не в твою пользу.
И сказал это он не тебе, а xkor'у, который эти слова понимает.

Фемида это защита которая имеет возможность полиморфить код и ты его уже просто так не поймешь а значит простой хук на память уже не поможет.

Бомонд потому и бомонд, что там образованные люди.

VORON
18.09.2008, 10:34
Argot дело говорит, а то что ты не понимаешь его слова говорит не в твою пользу.
И сказал это он не тебе, а xkor'у, который эти слова понимает.

Фемида это защита которая имеет возможность полиморфить код и ты его уже просто так не поймешь а значит простой хук на память уже не поможет.

Бомонд потому и бомонд, что там образованные люди.

хм.. спасип за пояснение.. а какже тогда поступить? продолжать ломать голову методом подбора алгоритма путем наблюдений за логом?

faeton
19.09.2008, 00:37
хм.. спасип за пояснение.. а какже тогда поступить? продолжать ломать голову методом подбора алгоритма путем наблюдений за логом?

Если фемида точно полиморфирует алгоритмы то очень трудно,если просто защищает то снять ее реально. Каждый случай требует собственного подхода, ты сам это кажетса говорил, или кто то еще.

VORON
19.09.2008, 01:38
Если фемида точно полиморфирует алгоритмы то очень трудно,если просто защищает то снять ее реально. Каждый случай требует собственного подхода, ты сам это кажетса говорил, или кто то еще.

наверно не я.. мой опыт реверсинга =0.. в тоже время я крути не крути смог ломануть защиту сервера которая там раньше была- тому и посвящен топик етот (с первых страниц).. а теперь я хз что делать.. методы описанныемной в етом топе неприводят к результату.. наблюдая за логом выискивая повторения в нем- некчему неприводят.. новый алгоритм кажется очень сложным.. пример такой приведу то что реально я ломал (придумывал сам) то.. наблюдая за трафиком выискивал закономерности и код ДЛЛ тут выложено к чему я пришел.. и всё отлично работало пока админы не купили новую сборку сервака..
казлы..
но всё к чему я пришел ето к математическим выводам лиш тока.. которые меня на правильный путь неставят.. первое что я обнаружил что при однобайтовом пакете ключ не меняется.. согласитесь ведь ето странно? ну ладно в той шифрации не менялся он.. но щас то новая шифрация... а он 1 фик не меняется... при однобайтовом пакете.. совпадение?? наврядли..
в пользу етой версии (ето не совпадение) говорит то что входящий трафик дешифрируется старым (взломанным ) алгоритмом.. т.е. тем более они за основу тот старый алгоритм брали..
в подтверждение етого еще скажу что способ вычисления начального ключа для дешифровки первых входящего и исходящего пакета остался без изменений.. т.е. способ вычисления начального ключа взломаный в етом топе тоже подходит 1 в 1
но исходящие пакеты- белеберда начиная с 2-го пакета исходящего (шифрованого) ..

Добавлено через 12 минут
дело в том что.. у меня в голове твердо село то что.. значение нового ключа должно изменяться в зависимости от предыдущего значения+ предыдущий пакет данных..
если так смотреть то получается что нужно искать повторы.. искать при каких одинаковых данных значения повторяются..
я отскал много повторов
порой даже очень много..
но некчему ето неприводит..
явно видно что при одних и тех же исходных данных задача решается поразному.. а ответ ето новый ключ...
следовательно решение задачи зависит не только от ПАКЕТА ПРЕДЫДУЩЕГО + ПРЕДЫДУЩЕГО КЛЮЧА но еще от чегото...
что можит быть исходными данными для решения такой задачи?
что то еще... а хз чего..
но при етом думаю что я небезосновательно думаю что старый алгоритм имеет надстройку.. и полученный стрым способом ключ еще раз через чета прогоняется и получается новый результат ключа...
ето изза того что я выше сказал.. немогут 2 гения одновременно думать про то что онобайтовый пакт не шифруется... ето объединяет 2 етих алгоритма скорее всего 1 алгоритм наложен на другой...
вот и как их вычислить???

faeton
19.09.2008, 04:21
Сложные алгоритмы так не вычислишь, тут необходимо пытаться найти код реверсингом как это ни тяжело

PanAm
19.09.2008, 14:30
VORON, А нельзя не как не дешифрованные логи выложить? желательно пару-тройку с одного акка и чара, хорошо бы и дать эти имена и номер чара

VORON
19.09.2008, 15:58
VORON, А нельзя не как не дешифрованные логи выложить? желательно пару-тройку с одного акка и чара, хорошо бы и дать эти имена и номер чара
дык выкладывал..
повторюсь..


39 B3 14 23 59 E9 E8 0B 1D AF--16 b2 a7 37 7a b0 01 e3--2F 38 00 00 00 00 00 00 00 00
7D 86 04 34 E6 28 15 BB E9 2A--52 C3 82 30 D2 CE 3D AE--2F 38 00 00 00 00 00 00 00 00
EA 1D 2E E0 2A CF 6D 4C 89 46--C5 CF 33 CE CA E5 A2 21--2F 38 00 00 00 00 00 00 00 00
17 ED 35 AE 6E C3 C0 2D 15 D7--38 C2 D8 9B C0 AD 03 ED--2F 38 00 00 00 00 00 00 00 00
3E 00 B8 DF 6E 8F 81 A2 B3 B5--11 06 B8 67 B1 E1 0E 23--2F 38 00 00 00 00 00 00 00 00
D8 A0 D0 E7 09 2F CB E2 15 55--F7 40 70 37 EE 26 E4 29--2F 38 00 00 00 00 00 00 00 00
29 50 04 1F 81 93 A2 3E 38 79--06 41 54 1B 9E 12 31 9C--2F 38 00 00 00 00 00 00 00 00
CF 34 6B FD 8F B6 44 A8 48 8B--E0 C3 5F 96 72 39 F2 EC--2F 38 00 00 00 00 00 00 00 00
CB B3 7D CA 12 72 42 C6 22 62--E4 40 CE B7 D8 60 30 84--2F 38 00 00 00 00 00 00 00 00
91 F5 F0 C0 AE 38 75 A8 16 4A--BE 5C 05 30 6E 96 4D DD--2F 38 00 00 00 00 00 00 00 00
EB 1A 6D 15 1D 68 EC E9 2D E4--C4 C9 77 78 08 75 84 05--2F 38 00 00 00 00 00 00 00 00
9E 2A B3 7D EA 61 4C E3 52 DE--B1 8C 99 CE 97 8B 2D AF--2F 38 00 00 00 00 00 00 00 00
7C DF C9 50 54 5C BC AA F9 62--53 9B 16 99 04 08 E0 16--2F 38 00 00 00 00 00 00 00 00
14 24 D1 11 36 82 D0 29 12 1A--3B 08 F5 C0 27 B4 52 F9--2F 38 00 00 00 00 00 00 00 00
C6 D5 28 1D C1 CD 79 E6 0F 24--E9 2B FD 35 DC 0C B4 9F--2F 38 00 00 00 00 00 00 00 00
81 44 87 50 B0 AA 72 01 AF 52--AE FD C3 D7 E0 1A D8 73--2F 38 00 00 00 00 00 00 00 00
FF 9A 6B F7 90 B9 1E E2 32 6F--D0 5D F1 9C 67 29 A7 FC--2F 38 00 00 00 00 00 00 00 00
3C 09 FC F4 85 55 E4 A1 B2 BF--13 0D F5 08 71 D0 B1 45--2F 38 00 00 00 00 00 00 00 00
85 75 3E 60 29 E3 3C 10 BA 72--AA C8 4B 5E 49 CA DF 2C--2F 38 00 00 00 00 00 00 00 00
AF EC 5F C7 81 C4 B9 AA 2A 51--80 7B B3 98 46 45 7D 13--2F 38 00 00 00 00 00 00 00 00
14 2B 7C A1 14 B0 28 B4 8F 88--3B 07 57 DD B5 A4 98 9C--2F 38 00 00 00 00 00 00 00 00
E3 43 B1 DE 75 2A 14 82 4E D6--CC 98 F2 6F AB 5F 3E 96--2F 38 00 00 00 00 00 00 00 00
BD 50 F5 D4 69 78 C3 A0 32 E7--92 D5 A5 21 BD 11 BB 63--2F 38 00 00 00 00 00 00 00 00
B6 E8 57 9F 30 EB C6 1E 87 E1--99 66 BF C8 AF DB 2D D8--2F 38 00 00 00 00 00 00 00 00

////////////////////////////////////////////////////////////////////
4B 1E 1D CB 8A D1 B6 40 24 49--64 6D 03 D6 41 5B 67 F6--2F 38 00 00 00 00 00 00 00 00
BD 23 0C 2D DA CA BA 03 91 37--92 A6 2F 21 F7 10 70 B9--2F 38 00 00 00 00 00 00 00 00
.....
E3 43 B1 DE 75 2A 14 82 4E D6--CC 98 F2 6F AB 5F 3E 96--2F 38 00 00 00 00 00 00 00 00
BD 50 F5 D4 69 78 C3 A0 32 E7--92 D5 A5 21 BD 11 BB 63--2F 38 00 00 00 00 00 00 00 00
/////////////////////////////////////////////////////////////////
B1 53 D3 51 79 A0 F4 00 9E 44--9E DA 80 82 28 D9 54 F4--2F 38 00 00 00 00 00 00 00 00
3A 24 62 66 FC 37 C8 9C 89 AF--15 26 46 04 9A CB FF 54--2F 38 00 00 00 00 00 00 00 00
...
FD B6 7A 43 1D F9 F6 04 D6 A5--D2 73 CC 39 5E E4 0F F2--2F 38 00 00 00 00 00 00 00 00
3A 7B 54 80 A2 09 C5 D2 C7 BE--15 79 2F D4 22 AB CC 17--2F 38 00 00 00 00 00 00 00 00

первая колонка то что перехватывает пакетхак.. вторая ключ для дещивровки пакета (сам руками вычислял) третья то что должно быть..
етот лог интересен лиш тем что тут одинаковых занчений много при одних и техже исходных данных..
знаками "////////////////////////" отделены друг от друга куски лога в разное время..
знаками "......" дублируются наиболее интересные кусочки с повторами, т.е. исходные данные одни и теже а результат разный...
вот и триндец
я поясню вот например 2 кусочка лога снятые в разное время..

4B 1E 1D CB 8A D1 B6 40 24 49--64 6D 03 D6 41 5B 67 F6--2F 38 00 00 00 00 00 00 00 00

BD 23 0C 2D DA CA BA 03 91 37--92 A6 2F 21 F7 10 70 B9--2F 38 00 00 00 00 00 00 00 00
.....
E3 43 B1 DE 75 2A 14 82 4E D6--CC 98 F2 6F AB 5F 3E 96--2F 38 00 00 00 00 00 00 00 00
BD 50 F5 D4 69 78 C3 A0 32 E7--92 D5 A5 21 BD 11 BB 63--2F 38 00 00 00 00 00 00 00 00

тут мы видим что при одном и том же пакете первый байт зашифрован как "BD".. т.е. если предполагать что новый ключ высчитывается только от предыдущего пакета+ предыдущий ключ то.. приодинаковом результате и при одинаковом пакете мы должны по сути иметь одинаковый предыдущий ключ а он разный.. значит от чегото еще он зависит..
мне тут парень из непроверенного источника сказал недавно что очень раскрученый сервер фришард сделал так : старый но взломаный алгоритм прогоняется через ксоринг на данные приходящие в ЗАГОЛОВКЕ ПАКЕТА там говорят время отправки гдето есть.. вот на время говорят ксорить надо результат старого алгоритма чтоб получить новый..

xkor
20.09.2008, 16:40
мне тут парень из непроверенного источника сказал недавно что очень раскрученый сервер фришард сделал так : старый но взломаный алгоритм прогоняется через ксоринг на данные приходящие в ЗАГОЛОВКЕ ПАКЕТА там говорят время отправки гдето есть.. вот на время говорят ксорить надо результат старого алгоритма чтоб получить новый..это нереал, вопервых заголовок есть только у TCP пакета а клиент поскольку работает в обычном режиме а не с "сырыми" пакетами неможет получить заголовок этого пакета, ну и во вторых а TCP пакете может быть абсолютно произвольное (в том числе и дробное) число гейм пакетов линейки...

да и вывод о 3м факторе влияющем на шифрацию ты помойму преждевременно сделал, на основании одного байта это сказать нельзя...

VORON
22.09.2008, 02:25
это нереал, вопервых заголовок есть только у TCP пакета а клиент поскольку работает в обычном режиме а не с "сырыми" пакетами неможет получить заголовок этого пакета, ну и во вторых а TCP пакете может быть абсолютно произвольное (в том числе и дробное) число гейм пакетов линейки...

да и вывод о 3м факторе влияющем на шифрацию ты помойму преждевременно сделал, на основании одного байта это сказать нельзя...

я вроде ето математиически обосновал ккак раз изза 3-го параметра....
всегда рад услушать почемуя неправ и где я ошибся в расссуждениях????

Добавлено через 22 минуты
это нереал, вопервых заголовок есть только у TCP пакета а клиент поскольку работает в обычном режиме а не с "сырыми" пакетами неможет получить заголовок этого пакета, ну и во вторых а TCP пакете может быть абсолютно произвольное (в том числе и дробное) число гейм пакетов линейки...

да и вывод о 3м факторе влияющем на шифрацию ты помойму преждевременно сделал, на основании одного байта это сказать нельзя...

а может быть так что твоя прога тупо не ловит етот заголовок????? А дЛЛУ ИГРЫ ЕГО ЛОВИТ???? может так быть????

kolosOK
22.09.2008, 02:42
извеняюсь, но про какой сервер тут идёт реч ?
собсвтенно почему спрашиваю, долго дешифровал трафик на .....ver, в итоге всё получилось, искал просто не там :)
скажи сервер, тоже покавыряюсь, просто ради интереса ...

key2[0]:=key2[0]xor $82;
key2[1]:=key2[1]xor $93;
key2[4]:=key2[2]xor $1a;
key2[5]:=key2[3]xor $41;

хе хе, знакомые цифры ..... эти цифры и ксор с KeyInit пакетом дают первоначальный ключ для всего, потом по серверному трафику не интересно, а вот по клиентскому берутся данные с "RequestAuthLogin"
000000 2B 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 +...................
000010 00 00 00 33 00 00 00 C5 E2 04 00 C3 49 00 00 C5 .2.3...Åâ..ÃI..Å
000020 E2 04 00 C4 1D 72 70 01 00 00 00 â..Ä.rp....

каждый 2 ключ от пакета клиента ксорится с C4 1D 72 70 C4 1D 72 70 в данном случае, если пакет длинной 3 то после него ключ не меняется, и это ещё не всё ...

Добавлено через 1 минуту
а может быть так что твоя прога тупо не ловит етот заголовок????? А дЛЛУ ИГРЫ ЕГО ЛОВИТ???? может так быть????

а такова быть не может ...

VORON
22.09.2008, 10:32
извеняюсь, но про какой сервер тут идёт реч ?
собсвтенно почему спрашиваю, долго дешифровал трафик на .....ver, в итоге всё получилось, искал просто не там :)
скажи сервер, тоже покавыряюсь, просто ради интереса ...

key2[0]:=key2[0]xor $82;
key2[1]:=key2[1]xor $93;
key2[4]:=key2[2]xor $1a;
key2[5]:=key2[3]xor $41;

хе хе, знакомые цифры ..... эти цифры и ксор с KeyInit пакетом дают первоначальный ключ для всего, потом по серверному трафику не интересно, а вот по клиентскому берутся данные с "RequestAuthLogin"
000000 2B 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 +...................
000010 00 00 00 33 00 00 00 C5 E2 04 00 C3 49 00 00 C5 .2.3...Åâ..ÃI..Å
000020 E2 04 00 C4 1D 72 70 01 00 00 00 â..Ä.rp....

каждый 2 ключ от пакета клиента ксорится с C4 1D 72 70 C4 1D 72 70 в данном случае, если пакет длинной 3 то после него ключ не меняется, и это ещё не всё ...

Добавлено через 1 минуту


а такова быть не может ...

да че уж скрывать все и так зают что ето l2/s/e r ver .ru (чтоб поисковик не нашел через пробел с / )
поделись своими знаниями.. я магу входящий траф дешифровать и ачальные ключи вычислять а исходящий- никак.. лог привел- выше...

kolosOK
22.09.2008, 15:09
скрипт выкладовать не буду, ибо тут всё общедоступно, да и скрипт у меня не под пакетхак ...
первоначально сделать надо скрипт эмулятор сервера, тогда становится всё проще и более анализируемо ...

пишем скриптик для 2106 (ЛС), снимаем лог коннекта с ЛС, потом забиваем чтоб все пакеты от сервераи клиента просто блокировались, а заместо них посылались те пакеты что мы сняли, это как раз и будет эмулятором ЛС.

пишем скриптик на 7777(ГС), снимаем лог коннекта с ГС, забиваем чтоб все пакеты от сервера и клиента блокировались, а заместо них посылались те пакеты что мы сняли ... после 1 пакета от клиента "ProtocolVersion", высылаем клиенту обратно "KeyInit", потом когда придёт "RequestAuthLogin", высылаем "CharSelectInfo", дальше можно ничего не всылать вообще, тогда при нажатии кнопки выбра персонажа у нас будет приходить пакет "CharSelected", при чём сколько будем нажимать, столько пакетов и будет приходить, при этом ключики будут менятся, ибо пакет то новый :) а пакетик то 1 "CharSelected" соответственн мы можем написать скриптик что получать ключик .....

Дальше начинаем игратся с "KeyInit", а именно с теми 4 байтами что входят в наш первоначальный ключ, собсвтенно если мы поставим там 00 00 00 00 то получим ту 1 константу, 82 93 1А 41 ..... дальше ещё не много поигравшись с этим ключом, мы понимаем что или эта константа задействована во всех формарованиях ключа или ключ имеет наследственнсть от предыдущего (так как в обычном алгоритме) ...

Не буду описавать процесс как я выяснил что ключ в "RequestAuthLogin" тоже влияет на формирования ключей, потому как уже и не помню :) но это так, можете опять же поигратся с ним, меняется он в пакете ЛС, "LoginOk"
000000 23 00 03 CB E2 04 00 3E 69 02 3A 00 00 00 00 00 #..Ëâ..>i.:.....
000010 00 00 00 EA 03 00 00 00 00 00 00 00 00 00 00 02 ...ê............
000020 00 00 00 ...

когда измените его тут то он будет менятся и в "RequestAuthLogin"
000000 2D 00 08 00 00 00 00 00 00 00 00 00 00 00 00 00 -...................
000010 00 00 00 00 00 00 00 00 00 CB E2 04 00 7B 51 00 ............Ëâ..{Q.
000020 00 CB E2 04 00 3E 69 02 3A 01 00 00 00 .Ëâ..>i.:....

а паралельно заметите что и ключик для каждого 2 пакета от клиента начинаем менятся именно на 3E 69 02 3A 3E 69 02 3A в данном случае ...

пока всё, щас с мыслями соберусь и может ещё накатаю :)

кстати может есть у кого эмулятор сервера, чтоб тупо посылал паеты что я ему укажу ?

nezabudkin
23.09.2008, 12:56
Давно уже бьюсь с тем же сервером!
Все думал выкладывать свои изыскания или нет. У меня пока затуп именно в алгоритме изменения ключа. Исследовал весь АЧ, там у народа полный затуп, все ищут мифический токен для волкера)). Понял что не только к ЭТОМУ серверу относится данный алгоритм шифрования. Админы l2/s/e r ver .ru просто купили этот алгоритм.

В итоге пришел к выводу, что действительно, чтобы ломануть шифрацию от клиента к ГС, надо написать эмулятор ГС, а конкретнее секции выбора чара. В итоге такой скрипт я разработал, но, честно говря, так и не понял алгоритма смены ключа, после чего и забил ваще на всю линейку)

Добавлено через 17 минут
В итоге, вот к чему я пришел:

У нас в защите используются 2 независимых ключа шифрования (один поверх другого). Метод шифрования везде xor.

оба ключа 8-байтные

1-ый ключ (4 байта) берется из криптинит, разбиватеся на 2 части и ксорится на константу 82 93 00 00 1A 41 00 00, получаем начальный ключ №1
2-ой ключ берется из пакета 0D RequestAuthLogin поле LoginKey2, к нему дописыватеся еще такой-же и ксорится на константу 61 F6 5B 62 1A 08 B9 CD, получаем начальный ключ №2 (хотя после последнего поста от kolosOK, я уже не очень в этом уверен)

Алгоритм изменения ключей я так и не понял, как эти ключи живут вместе тоже не понял(

Добавлено через 3 минуты
пока всё, щас с мыслями соберусь и может ещё накатаю

Так что, kolosOK, жду от тебя продолжения с нетерпением!!!

Гостья
23.09.2008, 13:21
. Исследовал весь АЧ, там у народа полный затуп, все ищут мифический токен для волкера)). Понял что не только к ЭТОМУ серверу относится данный алгоритм шифрования. Админы l2/s/e r ver .ru просто купили этот алгоритм.



АЧ зборище ГМов с разных серверов, сидят с 300ми постами и отлавливают баги под хайдами чтобы пофиксить,
реально там тебе никто непоможет,
там собралось общество полубогов и на нас там смотрят с презрением.
Попробуй набери там двести постов!! если ты не ГМ и незнаешь игру изнутри

kolosOK
23.09.2008, 16:34
... не знаю кк насчёт гмов, но вот в плане помощи ач стал действительно не какой, всё делается за деньги, собственно сам форум себя уже исчерпал, потому как за деньги можно сделать всё что угодно из без форума ач

по мыслям ... щас времени нету всё описавать, скажу только что там кроме того что я написал больше ничего нет, есть только огромный список констант ... тоесть если вы зделаете всё ка описал выше то найдёте их, только рассматривать надо не 100 пакетов и не 200, а где то 8000 :)

maxim22
23.09.2008, 22:16
//кстати может есть у кого эмулятор сервера, чтоб тупо посылал паКеты что я ему укажу ?

Я тут у себя поковырялся в загашниках,кое что нарыл, может пригодится вам?!
http://rapidshare.com/files/147758527/MiniServer-sLA.rar.html
на вопросы по ним ответить не смогу т.к толком ничего не знаю...
если по делу то хотелось бы помощи по моему вопросу но в ПМ :).
всем удачи.

nezabudkin
24.09.2008, 11:28
скажу только что там кроме того что я написал больше ничего нет, есть только огромный список констант ... тоесть если вы зделаете всё ка описал выше то найдёте их, только рассматривать надо не 100 пакетов и не 200, а где то 8000

Вот, блин, порадовал. Только я не очень понял, эти константы относятся к алгоритму изменения ключа (ключей) или к шифрованию пакетов посредством ключей+ набор констант?

kolosOK
26.09.2008, 21:53
тут скрипт под другую программу
http://depositfiles.com/files/8245820
но всё что нужно там есть, всем удачи

Faeton
27.09.2008, 02:16
тут скрипт под другую программу
http://depositfiles.com/files/8245820
но всё что нужно там есть, всем удачи

Я так понимаю ты забросил играть на этом сервере раз отдаешь скрипт ?
Скрипт под wpf

kolosOK
27.09.2008, 02:34
Я так понимаю ты забросил играть на этом сервере раз отдаешь скрипт ?
Скрипт под wpf

и не начанал играть ... просто было интересно разобратся с дешифровкой

nezabudkin
29.09.2008, 15:51
Ща будем тестить в wpf,
если заработает !!!, то останется дело замалым,
на основе этого скрипта, разработать newxor.dll

kolosOK, тебе отдельное огромное спасибо!
Полгода спать не мог, поночам эти шифры мерещились))

Добавлено через 4 часа 5 минут
Скрипт полностью рабочий!

kolosOK
30.09.2008, 03:29
Ща будем тестить в wpf,
если заработает !!!, то останется дело замалым,
на основе этого скрипта, разработать newxor.dll

kolosOK, тебе отдельное огромное спасибо!
Полгода спать не мог, поночам эти шифры мерещились))

Добавлено через 4 часа 5 минут
Скрипт полностью рабочий!

:) хе хе, а я 1,5 недели не спал почти, а под конец разочаровался, я думал там посуровей всё ...

nezabudkin
08.10.2008, 20:52
И так, выкладываю алгоритмы шифрования ГС от L/2/s/e/r/v/e/r:

Здесь и далее все выкладки сделаны на основе скрипта под WPF, от автора kolosOK, за что спасибо ему большое!

От сервера:
Здесь все просто!
ключ берется из криптинит (4 байта), разбиватеся на 2 части и ксорится на константу
82 93 00 00 1A 41 00 00
x1 x2 00 00 x3 x4
где x- байты ключа из криптинит, итого размер ключа у нас 8 байт.
Далее используется стнадартный механизм шифрации/дешифрации линейки, типа:
for k:=size-1 downto 1 do
pck[k]:=pck[k] xor GKeyR[k and keyLen] xor pck[k-1]; //дешифрация
if size<>0 then pck[0]:=pck[0] xor GKeyR[0];

Алгоритм изменения ключа:
первые 4 байта ключа увеличиваются на длинну пакета (тоже стандартный алгоритм)
вторые 4 байта ключа получаем путем ксоринга их на первые 4 байта:
Inc(PLongWord(@GKeyR[0])^,size);
PLongWord(@GkeyR[4])^:= (PLongWord(@GKeyR[0])^) xor (PLongWord(@GKeyR[4])^);

Теперь от клиента:
Ключ1 берем аналогично,
ключ берется из криптинит (4 байта), разбиватеся на 2 части и ксорится на константу
82 93 00 00 1A 41 00 00
x1 x2 00 00 x3 x4
где x- байты ключа из криптинит, итого размер ключа у нас 8 байт.
Этим ключем дешифруем пакет 08 - RequestAuthLogin
Алгоритм шифрации/дешифрации здесь тоже стандартный.
В нем нас интересует поле LoginKey2. Запоминаем его (4 байта), и дописываем еще такой-же. Получаем ключ2.
Так-же существует массив байт (случайных чисел) в размере 65536. (Я его взял из скрипта под wpf любезно предоставленного автором kolosOK).
Алгоритм изменения ключа (вот тут разработчики намудрили!):
Ключ шифования меняется если длинна пакета больше 1 байта.
ключ1 (или потом просто ключ) ксорим на ключ2 и ксорим на 8байт из массива, взятых с определенным смещением, равным количеству дешифрованных пакетов.
Вот алгоритм:
KeyCounter1:= KeyCounter1 + 4;
if KeyCounter1= 32769 then KeyCounter1:= 1;
PLongWord(@GKeyR[0])^:= PLongWord(@GKeyR[0])^ xor PLongWord(@KeyClient[0])^;
PLongWord(@GKeyR[4])^:= PLongWord(@GKeyR[4])^ xor PLongWord(@KeyClient[4])^;
PLongWord(@GKeyR[0])^:= PLongWord(@GKeyR[0])^ xor PLongWord(@KeyConst[KeyCounter1])^;
PLongWord(@GKeyR[4])^:= PLongWord(@GKeyR[4])^ xor PLongWord(@KeyConst[65536-KeyCounter1-2])^;

Исходники моего newxor выложу на днях...

nezabudkin
15.10.2008, 15:29
Собственно выкладываю dll-ку, которая дешифрует вышеуказанный сервак)

В архиве кроме самой дллки и файлов исходников, есть еще 2 файла (их надо поместить в папку с пакетхаком):
keyconst - файл с константами для шифрования
name.txt - файл в котором надо указать первые 3 буквы логин нейма, можно даже указать правильно первую и третью буквы, а вторую неважно, лишь бы была)

Собственно глубокое изучение newxor.dll и фрагментов кода пакетхака, отвечающих за передачу пакетов в newxor, показало мне, что некоректно передается в библиотеку начальный ключ шифрования, по этому библиотеку очень сложно переписывать под нестандартные системы шифрования.

Гост
15.10.2008, 19:22
Собственно выкладываю dll-ку, которая дешифрует вышеуказанный сервак)

В архиве кроме самой дллки и файлов исходников, есть еще 2 файла (их надо поместить в папку с пакетхаком):
keyconst - файл с константами для шифрования
name.txt - файл в котором надо указать первые 3 буквы логин нейма, можно даже указать правильно первую и третью буквы, а вторую неважно, лишь бы была)

Собственно глубокое изучение newxor.dll и фрагментов кода пакетхака, отвечающих за передачу пакетов в newxor, показало мне, что некоректно передается в библиотеку начальный ключ шифрования, по этому библиотеку очень сложно переписывать под нестандартные системы шифрования.

Ни единого копирайта kolosOK'а не было замечено, это у вас тут всегда так ?

kolosOK
16.10.2008, 01:13
Ни единого копирайта kolosOK'а не было замечено, это у вас тут всегда так ?

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

nezabudkin
16.10.2008, 14:00
Ни единого копирайта kolosOK'а не было замечено, это у вас тут всегда так ?

А вот это неправда, читай внимательнее!
хотя соглачен, ссылочку на авторство надо добавить...

Но в исходниках я негде свое авторство тоже не указывал,
к стати, в исходном скрипте от kolosOK, также авторство указано небыло!

Гост
17.10.2008, 10:27
А вот это неправда, читай внимательнее!
хотя соглачен, ссылочку на авторство надо добавить...

Но в исходниках я негде свое авторство тоже не указывал,
к стати, в исходном скрипте от kolosOK, также авторство указано небыло!

Его ник в сообщении свидетельствует о публикации, это вместо подписи.
Если ты что то привнес, ты обязан указать автора-источник иначе ты поступаешь более чем подло.

PanAm
17.10.2008, 15:44
Его ник в сообщении свидетельствует о публикации, это вместо подписи.
Если ты что то привнес, ты обязан указать автора-источник иначе ты поступаешь более чем подло.Класс!!! мысль просто гиниальна!!! Может мне тут выложить перепечатку "Евгения Онегина" и стать его автором?

kolosOK
17.10.2008, 19:49
Его ник в сообщении свидетельствует о публикации, это вместо подписи.
Если ты что то привнес, ты обязан указать автора-источник иначе ты поступаешь более чем подло.

ужас, какие заботливые люди есть :)

Класс!!! мысль просто гиниальна!!! Может мне тут выложить перепечатку "Евгения Онегина" и стать его автором?

а вот тут вы не правы, я не принёс скрипт другого автора, а выложил свой ...

NLObP
17.10.2008, 22:30
Хватит препираться!

ссылочку на авторство надо добавить...

Добавь и закончим на этом!

kolosOK
18.10.2008, 02:48
Хватит препираться!



Добавь и закончим на этом!

:)

Гост
18.10.2008, 12:32
Класс!!! мысль просто гиниальна!!! Может мне тут выложить перепечатку "Евгения Онегина" и стать его автором?

В таком случае ты будешь обязан сделать сноску на автороство, это законы авторского права и никто их не отменял. Погляди любую официальную публикацию Евгения Онегина, там обязательно есть сноска на авторство либо ссылка на предыдущую публикацию, где есть сноска.

Например, если ты публикуешь свое ноу-хау, то твое имя и факт первой публикации автоматически делает тебя автором. Дальнейшие публиканты обязаны делать сноски на тебя.

Давайте будет цивилизованными людьми, а не гопниками с дубинами.

Uchiha_Itachi
23.11.2008, 18:38
В этой теме мало что понел, это все надо сделать чтоб был написан нормально ник в левом верхнем углу?

Grinch
23.11.2008, 22:25
Uchiha_Itachi, единственый вариант подумать. иначе не судьба

Uchiha_Itachi
24.11.2008, 11:19
тебе легко говорить....я ток 3й день в ПНХ, очень трудно все это понять.
Так эту проблему нужно решить для того чтоб ник чара был нормально написан?

Существуют какие нить программы обучающие по ПНХ?(если тупой вопрос извиняйте)

QaK
24.11.2008, 11:25
Существуют какие нить программы обучающие по ПНХ?(если тупой вопрос извиняйте)нет
Так эту проблему нужно решить для того чтоб ник чара был нормально написан?править newxor.dll под свой секрвак.

Uchiha_Itachi
24.11.2008, 12:02
С чего мне лучше начать изучать ПНХ на этом сайте?скажите плиз
Чтоб все шло равномерно:)

QaK
24.11.2008, 13:22
С чего мне лучше начать изучать ПНХ на этом сайте?скажите плиз
Чтоб все шло равномерно начни с основ программирования на паскале, или дельфе - любой учебник. Потом тут почитай топы про ПНХ, первые посты в частности, где описание проги идет. Для чего собираешься использовать ПНХ?

Uchiha_Itachi
24.11.2008, 15:04
Собирался использовать для л2. Для чего она ешё может быть использована?

извини не понял пакал и дельф это что такое?