![]() |
eXeL@B —› Вопросы новичков —› Поиск определенной процедуры в dll |
Посл.ответ | Сообщение |
|
Создано: 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 ![]() Заранее спасибо. ![]() ![]() |
|
Создано: 20 декабря 2009 10:18 · Личное сообщение · #2 |
|
Создано: 20 декабря 2009 17:46 · Личное сообщение · #3 |
|
Создано: 20 декабря 2009 22:43 · Личное сообщение · #4 |
|
Создано: 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 |