Вернуться   CoderX :: Forums > Основные форумы > Программинг
Войти через OpenID

Программинг Форум для тем связанных с программированием

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 02.12.2012, 13:15   #1
Новичок
 
Регистрация: 23.09.2012
Сообщений: 11
Сказал Спасибо: 6
Имеет 0 спасибок в 0 сообщенях
don.kein пока неопределено
По умолчанию Поиск rva указателей в VMT

Приветствую, вопрос к знатокам

На форуме есть исходники программы SendPacketDump, там есть кусок кода

Код:
        //установка перехватов по захардкоденным rva указателей в VMT (VA-base)

	//1. SendPacket
	int* SendPacketPtrPtr=(int*)(hEngine+(0x0201D410-0x01B80000));
	OriginalSendPacketPtr=*SendPacketPtrPtr;
	*SendPacketPtrPtr=(int)&SendPacketHook;
Вот как найти эти адреса 0x0201D410-0x01B80000 ?

За информацию готов заплатить.
don.kein вне форума   Ответить с цитированием
Старый 03.12.2012, 11:58   #2
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Под Olly бряк на любой ф-ции отправки скила на сервер, и ее трассировка. Проходишь до send. Это будет адрес который в примере "0x0201D410". Адрес "0x01B80000" - это начальный адрес размещения DLL-ки в памяти. Если ничего не попутал.

Вообще в примере надо было написать ( hEngine+0x49D410 ), что бы не сбивать с толку.
Правда сам у себя тоже так делал. Копировал текущее размещение Engine и вычитал его из найденного смещения. Полученный результат прибавлял к GetModuleHandle('Engine.dll'), в примере это hEngine.

Последний раз редактировалось Sherman, 03.12.2012 в 12:17.
Sherman вне форума   Ответить с цитированием
За это сообщение Sherman нажился спасибкой от:
Старый 03.12.2012, 12:36   #3
Новичок
 
Регистрация: 23.09.2012
Сообщений: 11
Сказал Спасибо: 6
Имеет 0 спасибок в 0 сообщенях
don.kein пока неопределено
По умолчанию

Вот поставил брекпоинт на

Address=203D4280
Type=Export
Name=?RequestUseItem@UNetworkHandler@@UAEHAAVL2Par amStack@@@Z

В игре кликнул по предмету, остановилось на адресе 203D4280

203D4268 90 NOP
203D4269 E8 E297C7F4 CALL Core.?Logf@FOutputDevice@@QAAXPB_WZ>
203D426E 83C4 2C ADD ESP,0x2C
203D4271 5F POP EDI
203D4272 B8 01000000 MOV EAX,0x1
203D4277 5E POP ESI
203D4278 C2 8800 RETN 0x88
203D427B CC INT3
203D427C CC INT3
203D427D CC INT3
203D427E CC INT3
203D427F CC INT3
203D4280 > 53 PUSH EBX
203D4281 8B1D 9CC34820 MOV EBX,DWORD PTR DS:[0x2048C39C] ; Core.?Top@L2ParamStack@@QAE_JXZ
203D4287 55 PUSH EBP
203D4288 56 PUSH ESI
203D4289 57 PUSH EDI
203D428A 8B7C24 14 MOV EDI,DWORD PTR SS:[ESP+0x14]
203D428E 8BF1 MOV ESI,ECX
203D4290 8BCF MOV ECX,EDI
203D4292 FFD3 CALL EBX
203D4294 8BCF MOV ECX,EDI
203D4296 8BE8 MOV EBP,EAX
203D4298 FFD3 CALL EBX
203D429A 8B4E 48 MOV ECX,DWORD PTR DS:[ESI+0x48]
203D429D 8B11 MOV EDX,DWORD PTR DS:[ECX]

В каком направлении теперь идти ?

Добавлено через 6 минут
Вот сама функция RequestUseItem@UNetworkHandler@@UAEHAAVL2ParamStac k@@@Z

Код:
203D4280 > 53               PUSH EBX
203D4281   8B1D 9CC34820    MOV EBX,DWORD PTR DS:[0x2048C39C]                ; Core.?Top@L2ParamStack@@QAE_JXZ
203D4287   55               PUSH EBP
203D4288   56               PUSH ESI
203D4289   57               PUSH EDI
203D428A   8B7C24 14        MOV EDI,DWORD PTR SS:[ESP+0x14]
203D428E   8BF1             MOV ESI,ECX
203D4290   8BCF             MOV ECX,EDI
203D4292   FFD3             CALL EBX
203D4294   8BCF             MOV ECX,EDI
203D4296   8BE8             MOV EBP,EAX
203D4298   FFD3             CALL EBX
203D429A   8B4E 48          MOV ECX,DWORD PTR DS:[ESI+0x48]
203D429D   8B11             MOV EDX,DWORD PTR DS:[ECX]
203D429F   50               PUSH EAX
203D42A0   8B42 6C          MOV EAX,DWORD PTR DS:[EDX+0x6C]
203D42A3   55               PUSH EBP
203D42A4   6A 19            PUSH 0x19
203D42A6   68 D8295120      PUSH Engine.205129D8                             ; ASCII "cdd"
203D42AB   51               PUSH ECX
203D42AC   FFD0             CALL EAX
203D42AE   8B0D D8C34820    MOV ECX,DWORD PTR DS:[0x2048C3D8]                ; Core.?GNetworkLog@@3PAVFOutputDevice@@A
203D42B4   8B11             MOV EDX,DWORD PTR DS:[ECX]
203D42B6   68 B08F5120      PUSH Engine.20518FB0                             ; UNICODE "(Send)UseItemPacket"
203D42BB   52               PUSH EDX
203D42BC   90               NOP
203D42BD   E8 8E97C7F4      CALL Core.?Logf@FOutputDevice@@QAAXPB_WZZ
203D42C2   83C4 1C          ADD ESP,0x1C
203D42C5   5F               POP EDI
203D42C6   5E               POP ESI
203D42C7   5D               POP EBP
203D42C8   B8 01000000      MOV EAX,0x1
203D42CD   5B               POP EBX
203D42CE   C2 0400          RETN 0x4

Последний раз редактировалось don.kein, 03.12.2012 в 12:36. Причина: Добавлено сообщение
don.kein вне форума   Ответить с цитированием
Старый 03.12.2012, 12:46   #4
Пользователь
 
Регистрация: 27.10.2009
Сообщений: 63
Сказал Спасибо: 6
Имеет 21 спасибок в 19 сообщенях
Demion пока неопределено
По умолчанию

Найдите в VMT адрес AddNetworkQueue. Адрес на SendPacket обычно находится на смещении (-0xA4). В большинстве хроник смещение сохраняется, хотя это не обязательно. В любом случае SendPacket можно найти по вызову ws2_32.send();

Код:
HMODULE hEngine = LoadLibraryA("engine.dll");

unsigned int VMT = (unsigned int) hEngine + 0x507B70;
unsigned int AddNetworkQueue = (unsigned int) GetProcAddress(hEngine, "?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPacket@@@Z");

while (*(unsigned int*) VMT != AddNetworkQueue)
  VMT++;

unsigned int SendPacket = *(unsigned int*) (VMT - 0xA4);

Последний раз редактировалось Demion, 03.12.2012 в 12:54.
Demion вне форума   Ответить с цитированием
За это сообщение Demion нажился спасибкой от:
Старый 03.12.2012, 13:00   #5
Новичок
 
Регистрация: 23.09.2012
Сообщений: 11
Сказал Спасибо: 6
Имеет 0 спасибок в 0 сообщенях
don.kein пока неопределено
По умолчанию

И откуда значения взялось 0x507B70 ?

Хорошо, вот ставлю брекпоинт на

Names in WS2_32, item 97
Address=71A94C27
Section=.text
Type=Export (Known)
Name=send

при одевании оружия например, остановка идет на

00124C80 203D8C9C /CALL to send from Engine.203D8C97
00124C84 000007B8 |Socket = 0x7B8
00124C88 00124CA0 |Data = 00124CA0
00124C8C 0000000B |DataSize = B (11.)
00124C90 00000000 \Flags = 0

выглядит в общем окне это так

203D8C97 E8 8BBF6B51 CALL WS2_32.send

Куда дальше ?
don.kein вне форума   Ответить с цитированием
Старый 03.12.2012, 13:49   #6
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Цитата:
Сообщение от don.kein Посмотреть сообщение
И откуда значения взялось 0x507B70 ?
Это указатель на Виртуальную Таблицу Методов, что это такое - отдельная тема разговора. В Engine.dll она в начале dll-ки располагается помоему, в этом примере по адресу 0x507B70.


Цитата:
203D42AC FFD0 CALL EAX
вызов функции шифрации и отправки пакета. В EAX - адрес.

Если надо хукать вызов send, то трассишь до того места, где появится send и запоминаешь адрес. Если нужен хук всей функции в EAX кладешь адрес своей функции. В конце своей функции скорее всего прийдется аддами или сабами регистра ESP исправлять стек.

Если нужен именно неэкспортируемый метод SendPacket то пример Demion а показал как его найти.

Последний раз редактировалось Sherman, 03.12.2012 в 14:04.
Sherman вне форума   Ответить с цитированием
За это сообщение Sherman нажился спасибкой от:
Старый 03.12.2012, 14:26   #7
Новичок
 
Регистрация: 23.09.2012
Сообщений: 11
Сказал Спасибо: 6
Имеет 0 спасибок в 0 сообщенях
don.kein пока неопределено
По умолчанию

Цитата:
Если надо хукать вызов send, то трассишь до того места, где появится send и запоминаешь адрес.
т.е. до сюда 203D8C97 E8 8BBF6B51 CALL WS2_32.send ?
don.kein вне форума   Ответить с цитированием
Старый 03.12.2012, 14:40   #8
Местный
 
Аватар для Sherman
 
Регистрация: 24.04.2008
Сообщений: 364
Сказал Спасибо: 15
Имеет 116 спасибок в 83 сообщенях
Sherman пока неопределено
По умолчанию

Цитата:
Сообщение от don.kein Посмотреть сообщение
т.е. до сюда 203D8C97 E8 8BBF6B51 CALL WS2_32.send ?
Да, адрес входа в функцию, в которой размещен этот вызов - есть адрес функции клиента SendPacket
Sherman вне форума   Ответить с цитированием
За это сообщение Sherman нажился спасибкой от:
Старый 06.12.2012, 00:52   #9
Новичок
 
Регистрация: 23.09.2012
Сообщений: 11
Сказал Спасибо: 6
Имеет 0 спасибок в 0 сообщенях
don.kein пока неопределено
По умолчанию

Спасибо Sherman'у, за то что помог разобраться во всей этой области, так же спасибо всем тем "добрым" людям кто прошел мимо
don.kein вне форума   Ответить с цитированием
Старый 11.07.2013, 14:05   #10
Новичок
 
Регистрация: 28.11.2012
Сообщений: 1
Сказал Спасибо: 3
Имеет 0 спасибок в 0 сообщенях
byldas пока неопределено
По умолчанию

Ув.форумчане. Цель. найти смещение, понять хоть немного суть.
Все темы по данному вопросу на этом портале были перечитаны.

Подскажите, ставлю брекпоинт на WS2_32.send

При одевании оружия в игре кидает на

71A94C27 > 8BFF MOV EDI,EDI
модуля WS2_32,

нашел откуда вызывается Engine.203B0CD9

как мне добраться до адреса c
?AddNetworkQueue@UNetworkHandler@@UAEHPAUNetworkPa cket@@@Z

Последний раз редактировалось byldas, 11.07.2013 в 16:14.
byldas вне форума   Ответить с цитированием
Ответ

  CoderX :: Forums > Основные форумы > Программинг



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

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


Часовой пояс GMT +4, время: 03:59.

vBulletin style designed by MSC Team.
Powered by vBulletin® Version 3.6.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Locations of visitors to this page
Rambler's Top100

Вы хотите чувствовать себя в безопасности? чоп Белган обеспечит её!