Апдейт 21.03.07 rRO
Модератор: 4epT
Правила форума
ВНИМАНИЕ: реклама сторонних ботов запрещена! Всякие плюшки - можно
ВНИМАНИЕ: реклама сторонних ботов запрещена! Всякие плюшки - можно
Обясню технологию как оно делается.
1) Нужен последний клиент подконектить к посейдону, повесить на него ВПЕ.
2) Нужен последний пакет-екстрактор от ВЦЛ. Здесь есть одно НО: пакет-екстрактор тот норм пашет только в лине, так что кто здеалет буду благодарен.
3) Нужен старый екзешник, и новый.
4) Берём старую екзешку и генерируем список пакетов без сортирования
5) Берём новую екзеху и генерируем список пакетов без сортирования
6) Сравниваем текстовые файлы результатов (4) и (5).
7) Сохраним результат (6) в формате: перфикс_старый длинна_старая -> префикс_новый длинна_новая
8 ) Смотрим в src\Network\Send\ServerType13.pm, выделяем какие префиксы (старые) нам извесны (столбец 1 результата (7)).
9) добавляем данные в результат (7) таким образом: перфикс_старый длинна_старая -> префикс_новый длинна_новая : название_функции
10) Теперь мы знаем как они поменяли пакеты, точнее какие, и с чего они будут начинатся.
11) Идём выпьем пива. Треть дела зделано.
12) Подключаем новую екзеху к посейдону (как, ищите в софте).
13) Пока незалогинились, вешаем ВПЕ
14) логинимся: юзер poseidon пароль poseidon
15) Теперь методом проб и ошибок пытаемся словить определённые пакеты, префиксы которых мы получили в результате (9), и выделяем полезную нагрузку в них.
16) Опционально: можем забацать перловый код для каждого пакетика. Или кто на перле не умеет, просто выставляем здесь в формате: XX XX YY YY XX XX итд.
1) Нужен последний клиент подконектить к посейдону, повесить на него ВПЕ.
2) Нужен последний пакет-екстрактор от ВЦЛ. Здесь есть одно НО: пакет-екстрактор тот норм пашет только в лине, так что кто здеалет буду благодарен.
3) Нужен старый екзешник, и новый.
4) Берём старую екзешку и генерируем список пакетов без сортирования
5) Берём новую екзеху и генерируем список пакетов без сортирования
6) Сравниваем текстовые файлы результатов (4) и (5).
7) Сохраним результат (6) в формате: перфикс_старый длинна_старая -> префикс_новый длинна_новая
8 ) Смотрим в src\Network\Send\ServerType13.pm, выделяем какие префиксы (старые) нам извесны (столбец 1 результата (7)).
9) добавляем данные в результат (7) таким образом: перфикс_старый длинна_старая -> префикс_новый длинна_новая : название_функции
10) Теперь мы знаем как они поменяли пакеты, точнее какие, и с чего они будут начинатся.
11) Идём выпьем пива. Треть дела зделано.
12) Подключаем новую екзеху к посейдону (как, ищите в софте).
13) Пока незалогинились, вешаем ВПЕ
14) логинимся: юзер poseidon пароль poseidon
15) Теперь методом проб и ошибок пытаемся словить определённые пакеты, префиксы которых мы получили в результате (9), и выделяем полезную нагрузку в них.
16) Опционально: можем забацать перловый код для каждого пакетика. Или кто на перле не умеет, просто выставляем здесь в формате: XX XX YY YY XX XX итд.
Ну вот попробую написать что понял из общения с Джерри)
было это дело 7марта.
Первый пакет который начинал не правильно послыть бот был "логин к мап серверу"
Выглядел он тогда так
11 29 Send (11- номер в впе. 29-размер пакета)
0000 8C 00 00 00 00 C6 67 05 00 94 0C 0A 00 00 7B 4A ......g.......{J
0010 00 00 00 00 00 00 B3 4A AC 04 01 00 00
А вот от клиента пакет.
11 37 Send
0000 F3 00 61 62 00 94 0C 0A 00 C6 67 05 00 00 FC 66 ..ab......g....f
0010 00 00 66 64 62 34 30 65 66 66 00 C2 3B E0 00 01 ..fdb40eff..;...
0020 63 31 61 33 00 c1a3.
Править нам нужно пакет который найдем поиском на запрос 8C(это вроде как его заголовок?) в ServerType13
смотрим изменения и видим что изменился "заголовок пакета".
$msg = pack("C*", 0x8C, 0) . pack("x3") . $accountID . $charID . pack("x1") . $sessionID . pack("x4") . pack("V", getTickCount()) . pack("C*", $sex) . pack("x2");
Правим заголовок $msg = pack("C*", 0xF3, 0)
как сказал джерри те байты которые мы не знаем - это пустышки. прописываются они как pack("x3")(вместо 3 нужное количество байт) например 61 62 00 это пустышка
C6 67 05 00 это $accountID
94 0C 0A 00 это $charID
соответственно будет $msg = pack("C*", 0x8C, 0) . pack("x3") . $charID . $accountID . и тд
в итоге после всех исправлений вышел вот такой пакет
$msg = pack("C*", 0xF3, 0) . pack("x3") . $charID . $accountID . pack("x1") . $sessionID . pack("x9") . pack("V", getTickCount()) . pack("C*", $sex) . pack("x5");
с остальными также.
(дальше мои познания в этом нелегком деле заканчиваются)
было это дело 7марта.
Первый пакет который начинал не правильно послыть бот был "логин к мап серверу"
Выглядел он тогда так
11 29 Send (11- номер в впе. 29-размер пакета)
0000 8C 00 00 00 00 C6 67 05 00 94 0C 0A 00 00 7B 4A ......g.......{J
0010 00 00 00 00 00 00 B3 4A AC 04 01 00 00
А вот от клиента пакет.
11 37 Send
0000 F3 00 61 62 00 94 0C 0A 00 C6 67 05 00 00 FC 66 ..ab......g....f
0010 00 00 66 64 62 34 30 65 66 66 00 C2 3B E0 00 01 ..fdb40eff..;...
0020 63 31 61 33 00 c1a3.
Править нам нужно пакет который найдем поиском на запрос 8C(это вроде как его заголовок?) в ServerType13
смотрим изменения и видим что изменился "заголовок пакета".
$msg = pack("C*", 0x8C, 0) . pack("x3") . $accountID . $charID . pack("x1") . $sessionID . pack("x4") . pack("V", getTickCount()) . pack("C*", $sex) . pack("x2");
Правим заголовок $msg = pack("C*", 0xF3, 0)
как сказал джерри те байты которые мы не знаем - это пустышки. прописываются они как pack("x3")(вместо 3 нужное количество байт) например 61 62 00 это пустышка
C6 67 05 00 это $accountID
94 0C 0A 00 это $charID
соответственно будет $msg = pack("C*", 0x8C, 0) . pack("x3") . $charID . $accountID . и тд
в итоге после всех исправлений вышел вот такой пакет
$msg = pack("C*", 0xF3, 0) . pack("x3") . $charID . $accountID . pack("x1") . $sessionID . pack("x9") . pack("V", getTickCount()) . pack("C*", $sex) . pack("x5");
с остальными также.
(дальше мои познания в этом нелегком деле заканчиваются)
-
- Грамотный
- Сообщения: 221
- Зарегистрирован: Чт дек 07, 2006 8:43 pm
- Откуда: Бирмингем, ул. Бр.Грим....
-
- Профессионал
- Сообщения: 272
- Зарегистрирован: Вс ноя 05, 2006 2:03 pm
вот чет нахимичил. но не знаю....
$msg = pack("C*", 0x93, 01) . pack("x3") . $accountID . $charID . pack("x4") . $sessionID .pack("x6") . pack("C*", $sex) . pack("V", getTickCount()) . pack("x1");
ответ приходет как и клиенту.
приходет ответ в виде $accountID
а вот потом клиенту еще идет ответ с перечислением возможных скиллов. а боту не идет((
$msg = pack("C*", 0x93, 01) . pack("x3") . $accountID . $charID . pack("x4") . $sessionID .pack("x6") . pack("C*", $sex) . pack("V", getTickCount()) . pack("x1");
ответ приходет как и клиенту.
приходет ответ в виде $accountID
а вот потом клиенту еще идет ответ с перечислением возможных скиллов. а боту не идет((