Сейчас на форуме: asfa, _MBK_ (+6 невидимых)

 eXeL@B —› Вопросы новичков —› Поиск определенной процедуры в dll
Посл.ответ Сообщение

Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 декабря 2009 03:28 · Поправил: sketch
· Личное сообщение · #1

Речь идет о, думаю небезизвестной, игре линидж 2. В общем, исполняемый файл изменен таким образом, что подхватывает защитную dll, которая делает много пакостей, как то: проверяет на присутствие дебагера, обламывает некоторые функции других библиотек(не из состава стандартных) и прочее, но это все не важно т.к. от этой dll, в общем то, можно избавится, сэмулировав её присутствие в клиенте, что меня и интересует. За это отвечает один единственный пакет, который отправляет клиент на сервер в момент входа в аккаунт. Этот пакет стандартный, но с некоторыми изменениями, которые внесла в него эта самая защитная функция. Этот пакет имеет вид:
1 Байт - заголовок пакета. 2Bh
16 Байт(в моем случае) - string с именем аккаунта, может и меняться, в зависимости от кол-ва символов в имени аккаунта
4 Байта - фиксированное значение для определенного аккаунта. (1)
4 Байта - переменная, которая, по наблюдениям, меняется с теченим системного времени. (2)
4 Байта - снова это фиксированное значение (1)
4 Байта - переменная, закономерности её изменения я не нашел. Занимает почти весь integer (3)
4 Байта - фиксированное значение, которое всегда равно 8, природа не известна
4 Байта - переменная зависящая от (1) (назовём DWORD1)
4 Байта - переменная зависящая от (2) (назовём DWORD2)
В стандартном пакете последняя пара по 4 байта гонится каким-то постоянным значением, но эта защита переписывает их на свои значения, зависимость повязана на кратности 32м. в случае с первыми 4мя байтами из хвоста формула выглядит вот так: ((1)-x)*32=DWORD1, а во втором — ((3)+y)/32=DWORD2, где x и y коэффициенты, четкую зависимость которых я никак не могу проследить, и надеюсь что вы мне в этом поможете. Это вся информация, которую я накопал с помощью сниффера. Отдебажить сам процесс мне не удалось, даже если я спрятал дебагер и пытаюсь запустить исполняемый файл, то в определенный момент он обращается к адресу памяти, который не может быть прочтён (полагаю из-за того, что я не смог его распаковать. Запакован он aplib'ом, а распаковать это дело у меня ума не хватает :s4. В процессе формирования этого пакета учавствует Engine.dll. Понимаю что вопрос очень абстрактен, но что мне искать, как примерно должна выглядеть такая процедура вмешательства в посторение пакета? Ниже ссылки на эту самую защитную либу распакованную и такую, какой она была оригинально, ссылку на всю игру давать нет смысла, я думаю, т.к. весит она порядка 3.5 ГБайт.
http://dump.ru/file/3975704
http://dump.ru/file/3975705

Заранее спасибо.



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 20 декабря 2009 10:18
· Личное сообщение · #2

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



Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 декабря 2009 17:46
· Личное сообщение · #3

Да, в KeyPacket, но это все учтено, сниффер делает инъекцию в процесс, ловит пакет, первый расшифровывается токеном и из него берется xor ключ, и уже им расшифровываются все последующие. Это поле заполнено не ключом



Ранг: 301.4 (мудрец), 194thx
Активность: 0.170.01
Статус: Участник

Создано: 20 декабря 2009 22:43
· Личное сообщение · #4

Что то мне говорит что ты не расшифровал... Либо это пакет GG
Вот тебе описание протокла линейки, все до пакетика
hxxp://fursoffers.narod.ru/Packets.htm



Ранг: 0.6 (гость)
Активность: 0=0
Статус: Участник

Создано: 21 декабря 2009 05:30
· Личное сообщение · #5

Veliant, fursoffers.narod.ru/Packets.htm#AuthRequest
Это пакет от Client -> GameServer, просто особенность сервера в том, что два session ключа, которые выдает LoginServer и которые потом запихиваются в этот пакет и улетают на GameServer, одинаковые, еще в Gracia Final зачем-то добавили 4 байта после этого всего с постоянный значением 08 00 00 00 и еще пара по 4 байта, о которой и идет речь, без защиты там тоже какое-то постоянное значение, а с ней — проверочные числа, которые высчитываются по формулам из первого поста. Я ничего не напутал, я просто не могу понять где берутся эти коэффициенты x, y, потому и обратился сюда за помощью.


 eXeL@B —› Вопросы новичков —› Поиск определенной процедуры в dll
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати