ArcheAge Опкоды - Страница 3 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Пользователи Календарь Все разделы прочитаны
Вернуться   Форум администраторов игровых серверов > MMO > Другие игры / Other games > ArcheAge

ArcheAge Раздел, посвященный ArcheAge - новой многопользовательской ролевой онлайн игре от XLGames.

Ответ
Опции темы
Непрочитано 19.02.2014, 14:58   #21
Аватар для MadHacker
Пользователь

По умолчанию Re: ArcheAge Опкоды

Ну вот. О чём я собственно и говорил.
MadHacker вне форума Ответить с цитированием
Непрочитано 21.02.2014, 09:19   #22
Аватар для MadHacker
Пользователь

По умолчанию Re: ArcheAge Опкоды

В продолжении темы опкодов, немного о клиентских пакетах.
(примеры не с актуальной вресии, адреса отличаются)
Вопрос обхода фемиды, приведения исходника в божеский вид и обработку RTTI оставим в стороне.
Имеется - список vtable для всех пакетов. Требуется вытащить ID.
Выбираем понравившийся клиентский пакет.
Код:
396D3A54 0003 struct X2::CAEnterWorldPacket: struct X2::ClientToAuthPacket, struct INetPacket;  [SI]
Переходим к его vtable.
Код:
.rdata:396D3A50 ; struct X2::CAEnterWorldPacket: struct X2::ClientToAuthPacket, struct INetPacket;  [SI] O: 0, A: 0  (Class Informer)
.rdata:396D3A50                 dd offset const X2::CAEnterWorldPacket::`RTTI Complete Object Locator'
.rdata:396D3A54 const X2::CAEnterWorldPacket::`vftable' dd offset sub_39381D60
.rdata:396D3A54                                         ; DATA XREF: sub_39365B30+A8o
.rdata:396D3A54                                         ; sub_39366010+312o
.rdata:396D3A58                 dd offset sub_390196E0
.rdata:396D3A5C                 dd offset sub_39366B80
К слову о методах. Первый возвращает класс пакета (я табличку выше постил).
Второй пишет в поток тип пакета, метод один и тот же для всех пакетов (запомните это, упомяну ещё раз).
Третий пишет все остальные данные пакета.
На данный момент это не интересно.
Интересны 2 ссылки на vtable. Очевидно, что одна из них (а в нашем случае, так вообще обе) указывают сюда из конструктора.
Код:
.text:39365BB4                 mov     ds:dword_15CC4[esi], ecx
.text:39365BBA                 mov     ds:word_15D08[esi], 0
.text:39365BC3                 mov     ds:dword_15D18[esi], ecx
.text:39365BC9                 mov     ds:dword_15D1C[esi], ecx
.text:39365BCF                 mov     [esi+7Bh], bl
.text:39365BD2                 mov     edx, ds:dword_39EB6770
;Следующие 2 строчки как раз конструктор
.text:39365BD8                 mov     [ebp+var_20], offset const X2::CAEnterWorldPacket::`vftable'
.text:39365BDF                 mov     [ebp+var_1C], 0Bh
;Ка видим, он очень капитально заинлайнился
.text:39365BE6                 mov     ecx, [edx+1Ch]
.text:39365BE9                 mov     eax, [ecx]
.text:39365BEB                 mov     edx, [eax+60h]
.text:39365BEE                 xorpd   xmm0, xmm0
.text:39365BF2                 push    offset aTest_world_que ; "test_world_queue"
.text:39365BF7                 movlpd  [ebp+var_8], xmm0
.text:39365BFC                 call    edx
.text:39365BFE                 mov     edx, [eax]
.text:39365C00                 mov     ecx, eax
.text:39365C02                 mov     eax, [edx+8]
.text:39365C05                 call    eax
Пакет создаётся на стеке и сразу уходит в обработку. Я тут кучу лишнего кода привёл, а интересна нам всего лишь цифра 0x0B в конструкторе, которая и является опкодом этого пакета.

И вот что у нас выходит - конструктор инлайнится и он не в 100% случаев такой тривиальный. Запись опкода может идти сразу, а может через пару инструкций. К слову серверные пакеты конструируются так же, но потом складываются в очень удобную табличку, откуда достаются в один проход скрипта (А то как складываются, заслуживает отдельной статьи на тему "почему разработчикам надо вовремя отрывать руки?").

Желающие могут руками протыкать все пакеты и составить список, ну или придумать что повеселее. У меня скрипт для сборки клиентских пакетов не получился.

Есть ещё вариантик, может кому покажется более простым.
Помните второй метод? Который тип пакета пишет.
Код:
.text:390196E0 sub_390196E0    proc near               ; DATA XREF: .rdata:3968F718o
.text:390196E0                                         ; .rdata:3968F968o
.text:390196E0                                         ; .rdata:3968F978o ...
.text:390196E0
.text:390196E0 var_4           = dword ptr -4
.text:390196E0 arg_0           = dword ptr  8
.text:390196E0
.text:390196E0                 push    ebp
.text:390196E1                 mov     ebp, esp
.text:390196E3                 push    ecx
.text:390196E4                 push    esi
.text:390196E5                 mov     esi, ecx
.text:390196E7                 mov     ecx, [ebp+arg_0]
.text:390196EA                 mov     eax, [ecx]
.text:390196EC                 mov     edx, [eax+1Ch]
.text:390196EF                 call    edx
.text:390196F1                 mov     ecx, [ebp+arg_0] 
.text:390196F4                 push    0
.text:390196F6                 test    al, al
.text:390196F8                 jnz     short loc_39019718
.text:390196FA                 movzx   eax, word ptr [esi+4]
.text:390196FE                 mov     [ebp+var_4], eax
.text:39019701                 mov     edx, [ecx]
.text:39019703                 mov     edx, [edx+40h]
.text:39019706                 lea     eax, [ebp+var_4]
.text:39019709                 push    eax                  ; Наш опкод.
.text:3901970A                 push    offset aType_3  ; "type"
.text:3901970F                 call    edx 
.text:39019711                 pop     esi
.text:39019712                 mov     esp, ebp
.text:39019714                 pop     ebp
.text:39019715                 retn    4
.text:39019718 ; ---------------------------------------------------------------------------
.text:39019718
.text:39019718 loc_39019718:                           ; CODE XREF: sub_390196E0+18j
.text:39019718                 mov     eax, [ecx]
.text:3901971A                 mov     eax, [eax+40h]
.text:3901971D                 lea     edx, [ebp+var_4]
.text:39019720                 push    edx
.text:39019721                 push    offset aType_3  ; "type"
.text:39019726                 call    eax
.text:39019728                 movzx   ecx, word ptr [ebp+var_4]
.text:3901972C                 mov     [esi+4], ecx
.text:3901972F                 pop     esi
.text:39019730                 mov     esp, ebp
.text:39019732                 pop     ebp
.text:39019733                 retn    4
.text:39019733 sub_390196E0    endp
Через этот метод проходят все пакеты. Кто владеет отладчиком лучше чем дизассемблером, могут попытать своё счастье здесь. Это виртуальный метод пакета. На входе в метод в ecx лежит пакет(если я ничего не перепутал, но даже если перепутал - посмотрите, он где-то рядом), первое его поле это указатель на vtable. Опкод отмечен комментарием.
MadHacker вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 21.02.2014, 10:34   #23
Пользователь

По умолчанию Re: ArcheAge Опкоды

Забавно читать Эти "откровения" можно почерпнуть из книги Inside the C++ Object Model или просто из практики реверса.

Цитата:
К слову о методах. Первый возвращает класс пакета (я табличку выше постил).
Если ты о "dd offset const X2::CAEnterWorldPacket", то это не метод, а ссылка на RTTI класса.

Цитата:
Интересны 2 ссылки на vtable. Очевидно, что одна из них (а в нашем случае, так вообще обе) указывают сюда из конструктора.
Да, потому что в конструкторе в указатель объекта записывается ссылка на его тип.

Цитата:
Пакет создаётся на стеке и сразу уходит в обработку.
boost::bind


Цитата:
Есть ещё вариантик, может кому покажется более простым.
А вот тут вопрос — этот метод вызывается для всех пакетов при регистрации, или при обработке пакета? Если первое, то можно сдампить, если второе, то надо ждать, пока все пакеты пройдут

ЗЫ: Сам я пока не ковырял АА, всё в раздумьях — стоит ли она того или просто запастись попкорном
luxtau вне форума Отправить сообщение для luxtau с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 21.02.2014, 10:50   #24
Аватар для MadHacker
Пользователь

По умолчанию Re: ArcheAge Опкоды

Цитата:
Сообщение от luxtau Посмотреть сообщение
Забавно читать Эти "откровения" можно почерпнуть из книги Inside the C++ Object Model или просто из практики реверса.
Забавно читать подобные комментарии.
Данная заметка для тех, кто не успел набрать практику реверса, но жаждит получить клиентские опкоды.


Цитата:
Сообщение от luxtau Посмотреть сообщение
Если ты о "dd offset const X2::CAEnterWorldPacket", то это не метод, а ссылка на RTTI класса.
Я кажется вполне русским языком написал, что первый метод в vtable.

Цитата:
Сообщение от luxtau Посмотреть сообщение
boost::bind
Маловероятно. Просто создаётся на стеке и уходит в сериализатор. Они все унаследованы от базы клиент серверных пакетов своего типа.

Цитата:
Сообщение от luxtau Посмотреть сообщение
А вот тут вопрос — этот метод вызывается для всех пакетов при регистрации, или при обработке пакета? Если первое, то можно сдампить, если второе, то надо ждать, пока все пакеты пройдут
При отправке пакета на сервер. Естественно пока все пройдут а ещё и дубликаты убирать.
MadHacker вне форума Ответить с цитированием
Непрочитано 21.02.2014, 11:00   #25
Пользователь

По умолчанию Re: ArcheAge Опкоды

Оффтоп, но:

Цитата:
Данная заметка для тех, кто не успел набрать практику реверса, но жаждит получить клиентские опкоды.
А зачем? Чисто философский вопрос — зачем толпы скрипт-киддисов? Не логичнее ли заняться либо эмулятором, либо приватными/платными вещами типа JF, AA bot или что-то в этом роде?
luxtau вне форума Отправить сообщение для luxtau с помощью Skype™ Ответить с цитированием
Непрочитано 21.02.2014, 11:35   #26
Аватар для MadHacker
Пользователь

По умолчанию Re: ArcheAge Опкоды

Мне нужно чтоб некоторые вещи были массовыми.
MadHacker вне форума Ответить с цитированием
Непрочитано 21.02.2014, 17:08   #27
Аватар для xTz
Разработчик BDO Emu

По умолчанию Re: ArcheAge Опкоды

Я без практики реверса вытащил все пакеты и оп коды + реверснул структуры с помощи иды
xTz вне форума Ответить с цитированием
Непрочитано 12.03.2014, 15:27   #28
Аватар для MadHacker
Пользователь

По умолчанию Re: ArcheAge Опкоды

Тема заглохла?
А я вот вытащил опкоды клиентские. И собрал все вытащенные опкоды в кучу.
Выложил тут: https://github.com/MadHacker666/aainfo
А вот C2W выкладывать пока не стал. почти 300 пакетов. Озвереть можно руками собирать коды, а автоматизировать... Вообще как оказалось можно. Потом примерно десяток пакетов надо будет руками допилить. В основной массе конструкторов опкод пишется сразу после vtable.
Список C2W пакетов выложу если в паблике появится больше информации о протоколе. Ну или ещё чего нибудь интересное.
MadHacker вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 12.03.2014, 15:35   #29
Пользователь

По умолчанию Re: ArcheAge Опкоды

MadHacker, не мог бы ты дать клиент без Themida так как увы но очень мешает работать.
nikes вне форума Ответить с цитированием
Непрочитано 12.03.2014, 16:00   #30
Аватар для MadHacker
Пользователь

По умолчанию Re: ArcheAge Опкоды

А я её не снимал. Мне она не мешает.
MadHacker вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пароли в ArcheAge niktout ArcheAge 21 06.11.2013 09:00
ArcheAge (мысли) Torro Об игре 34 27.09.2013 14:06
ArcheAge помогите разобраться с пакетами VictorS ArcheAge 6 13.06.2013 08:45
опкоды клиент и сервер пакетов клиента 3.5 Murzik Серверная часть 0 08.02.2013 08:13
Почему сдвинулись опкоды в Таути, или в корейцев закончилась "трава" VISTALL Курилка / Yak floor 12 22.11.2012 12:26


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 16:57. Часовой пояс GMT +3.

Вверх