Программинг Форум для тем связанных с программированием
28.07.2016, 01:17
#1
Местный
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
Smwr , из отладчиков Олька + плагины.
Для анализа очень помогает IDA (только нужен либо engine незашифрованный, либо самому расшифровать).
В либе например есть интересные методы User::AddBuff/HaveBuff/ClearBuff, в них видно, что в User хранится список (FArray) бафов (MagicSkillUniqueKey).
Я думаю там много всего интересного, главное не устать искать.
А по поводу плавающих адресов: каждая информация всегда от чего-то отталкивается, так что если ты сможешь найти всю цепочку, тогда у тебя будет 100% результат, по крайней мере внутри одних хроник.
За это сообщение ScythLab нажился спасибкой от:
28.07.2016, 02:08
#2
Пользователь
Регистрация: 14.07.2016
Сообщений: 59
Сказал Спасибо: 6
Имеет 10 спасибок в 9 сообщенях
ScythLab , оО, у меня такого в списке экспорта нет. буду смотреть распакованную.
Последний раз редактировалось Smwr, 28.07.2016 в 13:57 .
01.08.2016, 00:33
#3
Пользователь
Регистрация: 11.02.2009
Сообщений: 95
Сказал Спасибо: 36
Имеет 6 спасибок в 6 сообщенях
Нафиг смотреть список экспорта? В иде находите функцию и считайте оффсет.
За это сообщение xixi нажился спасибкой от:
11.08.2016, 22:26
#4
Местный
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
Цитата:
Сообщение от
Smwr
ScythLab , оО, у меня такого в списке экспорта нет. буду смотреть распакованную.
лучше начинать играться на HF/GoD, тогда всё будет, а дальше уже переходить на последние хроники
Цитата:
Сообщение от
xixi
Нафиг смотреть список экспорта? В иде находите функцию и считайте оффсет.
чтобы найти эти функции, нужно вначале понять как они "выглядят", а для этого на первых порах нужны экспортные функции
13.08.2016, 23:37
#5
Пользователь
Регистрация: 14.07.2016
Сообщений: 59
Сказал Спасибо: 6
Имеет 10 спасибок в 9 сообщенях
Цитата:
Сообщение от
ScythLab
лучше начинать играться на HF/GoD, тогда всё будет, а дальше уже переходить на последние хроники
так я и играюсь с хф(рпг) и такого нет. сегодня наконец окажусь дома, гляну что там в анпакеутой длл.
01.08.2016, 11:11
#6
Пользователь
Регистрация: 14.07.2016
Сообщений: 59
Сказал Спасибо: 6
Имеет 10 спасибок в 9 сообщенях
/del
Последний раз редактировалось Smwr, 02.08.2016 в 00:28 .
20.08.2016, 05:51
#7
Пользователь
Регистрация: 14.07.2016
Сообщений: 59
Сказал Спасибо: 6
Имеет 10 спасибок в 9 сообщенях
Цитата:
Сообщение от
ScythLab
В либе например есть интересные методы User::AddBuff/HaveBuff/ClearBuff, в них видно, что в User хранится список (FArray) бафов (MagicSkillUniqueKey).
учитывая, что в хф этого нет, а в годе есть - скорее всего это не то что я ищу.
и вот что еще не понятно - в хф таблица методов user не экспортируется, как её можно достать?
Последний раз редактировалось Smwr, 21.08.2016 в 12:49 .
22.08.2016, 10:43
#8
Местный
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
Цитата:
Сообщение от
Smwr
учитывая, что в хф этого нет, а в годе есть - скорее всего это не то что я ищу.
Да ты прав, эти методы появились только в GoD, значит нужно искать в другом месте, попробуй покопай пакет MagicEffectIcons (0х85), там где-то должен быть обработчик этого пакета, если найдешь его, то скорей всего найдешь где хранятся бафы.
Цитата:
и вот что еще не понятно - в хф таблица методов user не экспортируется, как её можно достать?
Для начала нужно найти созданный объект User, дальше просматриваешь его VMT (Virtual method table), и в Ida изучаешь, что делает каждый метод :-)
22.08.2016, 15:16
#9
Пользователь
Регистрация: 14.07.2016
Сообщений: 59
Сказал Спасибо: 6
Имеет 10 спасибок в 9 сообщенях
Чем дальше в лес.....
Цитата:
Сообщение от
ScythLab
Для начала нужно найти созданный объект User, дальше просматриваешь его VMT (Virtual method table), и в Ida изучаешь, что делает каждый метод :-)
VMT первый член? У объекта User первый член - 0...
Цитата:
Сообщение от
ScythLab
попробуй покопай пакет MagicEffectIcons (0х85), там где-то должен быть обработчик этого пакета, если найдешь его, то скорей всего найдешь где хранятся бафы.
За наводку спасибо, как то пропустил этот пакет, но... где таблица обработчиков, какой объект обрабатывает? UNH?
Там же, если я всё правильно понимаю, порядок вызовов такой: DispatchNetworkQueue->ТотСамыйОбработчик->UGameEngine::OnXXX?
Взял для примера OnUserInfo, то ли Идой пользоваться не умею, то ли в упор не вижу, откуда она вызывается.
Всё таки, вроде нашёл обработчик. Имя правда немного другое.
Код:
.text:203EF5B0 sub_203EF5B0 proc near ; DATA XREF: sub_20479CD0+CC3o
.text:203EF5B0
.text:203EF5B0 var_44 = byte ptr -44h
.text:203EF5B0 var_24 = dword ptr -24h
.text:203EF5B0 var_20 = dword ptr -20h
.text:203EF5B0 var_1C = dword ptr -1Ch
.text:203EF5B0 var_18 = dword ptr -18h
.text:203EF5B0 var_14 = dword ptr -14h
.text:203EF5B0 var_10 = dword ptr -10h
.text:203EF5B0 var_C = dword ptr -0Ch
.text:203EF5B0 var_4 = dword ptr -4
.text:203EF5B0 arg_0 = dword ptr 8
.text:203EF5B0 arg_4 = dword ptr 0Ch
.text:203EF5B0
.text:203EF5B0 push ebp
.text:203EF5B1 mov ebp, esp
.text:203EF5B3 push 0FFFFFFFFh
.text:203EF5B5 push offset SEH_203EF5B0
.text:203EF5BA mov eax, large fs:0
.text:203EF5C0 push eax
.text:203EF5C1 mov large fs:0, esp
.text:203EF5C8 sub esp, 38h
.text:203EF5CB push ebx
.text:203EF5CC push esi
.text:203EF5CD push edi
.text:203EF5CE mov [ebp+var_10], esp
.text:203EF5D1 xor ebx, ebx
.text:203EF5D3 mov [ebp+var_4], ebx
.text:203EF5D6 mov [ebp+var_14], ebx
.text:203EF5D9 mov ecx, ?GL2Console@@3PAVUL2ConsoleWnd@@A ; UL2ConsoleWnd * GL2Console
.text:203EF5DF mov eax, [ecx]
.text:203EF5E1 mov edx, [eax+31Ch]
.text:203EF5E7 call edx
.text:203EF5E9 lea eax, [ebp+var_14]
.text:203EF5EC push eax
.text:203EF5ED push offset asc_205098C8 ; "h"
.text:203EF5F2 mov ecx, [ebp+arg_0]
.text:203EF5F5 mov edx, [ecx+48h]
.text:203EF5F8 push edx
.text:203EF5F9 mov eax, [ebp+arg_4]
.text:203EF5FC call sub_203D9BA0
.text:203EF601 add esp, 0Ch
.text:203EF604 mov edi, eax
.text:203EF606 movsx eax, word ptr [ebp+var_14]
.text:203EF60A lea eax, [eax+eax*2+1]
.text:203EF60E push eax
.text:203EF60F lea ecx, [ebp+var_44]
.text:203EF612 call ??0L2ParamStack@@QAE@H@Z ; L2ParamStack::L2ParamStack(int)
.text:203EF618 mov byte ptr [ebp+var_4], 1
.text:203EF61C movsx eax, word ptr [ebp+var_14]
.text:203EF620 cdq
.text:203EF621 push edx
.text:203EF622 push eax
.text:203EF623 lea ecx, [ebp+var_44]
.text:203EF626 mov esi, ?PushBack@L2ParamStack@@QAEH_J@Z ; L2ParamStack::PushBack(__int64)
.text:203EF62C call esi ; L2ParamStack::PushBack(__int64)
.text:203EF62E mov [ebp+var_18], ebx
.text:203EF631
.text:203EF631 loc_203EF631: ; CODE XREF: sub_203EF5B0+DDj
.text:203EF631 movsx ecx, word ptr [ebp+var_14]
.text:203EF635 cmp [ebp+var_18], ecx
.text:203EF638 jge short loc_203EF68F
.text:203EF63A mov [ebp+var_1C], ebx
.text:203EF63D mov [ebp+var_20], ebx
.text:203EF640 mov [ebp+var_24], ebx
.text:203EF643 lea edx, [ebp+var_24]
.text:203EF646 push edx
.text:203EF647 lea eax, [ebp+var_20]
.text:203EF64A push eax
.text:203EF64B lea ecx, [ebp+var_1C]
.text:203EF64E push ecx
.text:203EF64F push offset aDhd ; "dhd"
.text:203EF654 mov edx, [ebp+arg_0]
.text:203EF657 mov eax, [edx+48h]
.text:203EF65A push eax
.text:203EF65B mov eax, edi
.text:203EF65D call sub_203D9BA0
.text:203EF662 add esp, 14h
.text:203EF665 mov edi, eax
.text:203EF667 mov eax, [ebp+var_1C]
.text:203EF66A cdq
.text:203EF66B push edx
.text:203EF66C push eax
.text:203EF66D lea ecx, [ebp+var_44]
.text:203EF670 call esi ; L2ParamStack::PushBack(__int64)
.text:203EF672 movsx eax, word ptr [ebp+var_20]
.text:203EF676 cdq
.text:203EF677 push edx
.text:203EF678 push eax
.text:203EF679 lea ecx, [ebp+var_44]
.text:203EF67C call esi ; L2ParamStack::PushBack(__int64)
.text:203EF67E mov eax, [ebp+var_24]
.text:203EF681 cdq
.text:203EF682 push edx
.text:203EF683 push eax
.text:203EF684 lea ecx, [ebp+var_44]
.text:203EF687 call esi ; L2ParamStack::PushBack(__int64)
.text:203EF689 add [ebp+var_18], 1
.text:203EF68D jmp short loc_203EF631
.text:203EF68F ; ---------------------------------------------------------------------------
.text:203EF68F
.text:203EF68F loc_203EF68F: ; CODE XREF: sub_203EF5B0+88j
.text:203EF68F mov ecx, ?GL2Console@@3PAVUL2ConsoleWnd@@A ; UL2ConsoleWnd * GL2Console
.text:203EF695 mov edx, [ecx]
.text:203EF697 lea eax, [ebp+var_44]
.text:203EF69A push eax
.text:203EF69B mov edx, [edx+320h]
.text:203EF6A1 call edx
.text:203EF6A3 movsx eax, word ptr [ebp+var_14]
.text:203EF6A7 push eax
.text:203EF6A8 push offset aReceiveAbnorma ; "(Receive)AbnormalStatusUpdatePacket : %"...
.text:203EF6AD mov ecx, ?GNetworkLog@@3PAVFOutputDevice@@A ; FOutputDevice * GNetworkLog
.text:203EF6B3 mov edx, [ecx]
.text:203EF6B5 push edx
.text:203EF6B6 call ?Logf@FOutputDevice@@QAAXPB_WZZ ; FOutputDevice::Logf(wchar_t const *,...)
.text:203EF6BC add esp, 0Ch
.text:203EF6BF mov byte ptr [ebp+var_4], bl
.text:203EF6C2 lea ecx, [ebp+var_44]
.text:203EF6C5 call ??1L2ParamStack@@QAE@XZ ; L2ParamStack::~L2ParamStack(void)
.text:203EF6CB xor al, al
.text:203EF6CD mov ecx, [ebp+var_C]
.text:203EF6D0 mov large fs:0, ecx
.text:203EF6D7 pop edi
.text:203EF6D8 pop esi
.text:203EF6D9 pop ebx
.text:203EF6DA mov esp, ebp
.text:203EF6DC pop ebp
.text:203EF6DD retn
.text:203EF6DD sub_203EF5B0 endp
Что в нём происходит непонятно, особенно
Код:
.text:203EF68F mov ecx, ?GL2Console@@3PAVUL2ConsoleWnd@@A ; UL2ConsoleWnd * GL2Console
.text:203EF695 mov edx, [ecx]
.text:203EF697 lea eax, [ebp+var_44]
.text:203EF69A push eax
.text:203EF69B mov edx, [edx+320h]
.text:203EF6A1 call edx
По идее, где то внутри, должен быть вызов APawn::UpdateAbnormalState(APawn *this, float), потому что ничего похожего со словом Abnormal больше нету, но либо чего то неэкспортируемого или вообще хз, этот call edx меня вводит в ступор.
Хотя, внутри UpdateAbnormalState тоже ничего хорошего - там вроде как оперируются видимые эффекты, так что это либо всё таки обработчик не тот (ну есть однозначный ShortBuffStatusUpdate, но хз используется ли он или, и там тоже call edx ведущий не понятно куда), либо хз.
Последний раз редактировалось Smwr, 22.08.2016 в 17:00 .
22.08.2016, 17:10
#10
Местный
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
DispatchNetworkQueue просматривает список доступных пакетов, дальше по Id пакета из специального массива со ссылками на обработчики (UGameEngine::OnXXX) вызывает нужный метод. У меня такое ощущение, что обработкой 0х85 пакета занимается не экспортируемый обработчик.
Цитата:
Код:
.text:203EF69B mov edx, [edx+320h]
.text:203EF6A1 call edx
Обычно таким образом вызываются функции из VMT, т.е. в Ida ты нигде не увидишь прямой вызов на интересующую тебя экспортируемую функцию.
За это сообщение ScythLab нажился спасибкой от:
Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
Часовой пояс GMT +4, время: 16:03 .
vBulletin style designed by
MSC Team .
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод:
zCarot
Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!