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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 12.10.2013, 05:32   #31
Местный
 
Аватар для SeregaZ
 
Регистрация: 16.08.2009
Сообщений: 1,224
Сказал Спасибо: 4
Имеет 229 спасибок в 182 сообщенях
SeregaZ пока неопределено
По умолчанию

Procedure NewMessageBeep(Type.l)
MessageRequester("APIHOOK", "Beep!")
!jmp dword[p_oldMessageBeep]
EndProcedure

***

*oldMessageBeep = sethook("crypt32.dll", "CertGetCertificateContextProperty", @NewMessageBeep())

а вот такого у тебя подобного нет?
__________________
хочу картинку в подпись!
SeregaZ вне форума   Ответить с цитированием
Старый 16.10.2013, 15:19   #32
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию

Цитата:
Сообщение от centos Посмотреть сообщение
Файлы формата: *ukx *.dat
Михаил, в этих файлах невозможно сделать привязку, по причине того, что в них нет исполняемого кода - это файлы текстур и текстовых данных клиента.
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...
Elecktron вне форума   Ответить с цитированием
Старый 27.03.2015, 13:46   #33
Пользователь
 
Регистрация: 19.08.2014
Сообщений: 58
Сказал Спасибо: 12
Имеет 0 спасибок в 0 сообщенях
cvillian пока неопределено
По умолчанию

Цитата:
Сообщение от Elecktron Посмотреть сообщение
зачем пользоваться глючным стеком? оО
можно проще. например(с++):

перехват инита, для получения NetworkHandler - чистая магия, местами подогнанная по месту, так что приведена исключительно для осознания что и куда.

p.s.как-то пробовал сделать на делфи - могу поискать исходники, но они "портированы" с с++, так что по сути тоже самое
p.p.s. есть еще способ (если защита смотрит откуда сенд вызван)
Тема наверное уже мертва но всё равно попробую
Может кто-то напишет пример как на дельфях получить этот долбаный NetworkHandler
cvillian вне форума   Ответить с цитированием
Старый 08.04.2015, 00:55   #34
Местный
 
Аватар для Elecktron
 
Регистрация: 27.10.2011
Адрес: Харьков
Сообщений: 106
Сказал Спасибо: 24
Имеет 11 спасибок в 7 сообщенях
Elecktron пока неопределено
По умолчанию

как я уже упоминал - "портировано 1 к 1 с с++":

получение указателя на экземпляр UNetworkHandler'а

Код:
UNetworkHandler: Pointer

//UNetworkHandler_Init
procedure UNetworkHandlerInit_hook();
asm
    mov    UNetworkHandler, ecx //сохраняем указатель на экземпляр
    MOV EAX,DWORD PTR FS:[0]   //
    jmp DWORD PTR initUH_orig //прыгаем в оригинальную
end;
внедрение кода (ставим свои адреса и радуемся)

Код:
function InitThread(lpParameter: pointer):dword;// stdcall;
 begin
 //подождать engine.dll, и начать внедрение своего кода
 repeat
  Sleep(100);
 until (GetModuleHandleA('engine.dll')<>0);

  buf :=  DWORD(@UNetworkHandlerInit_hook);
  //тут магия, хардкод и шанс попортить регистры. 
  initUH_orig:=Engine+$003B2D96;
  comm :=$e9;
  // Обычно страницы в этой области недоступны для записи
  // поэтому принудительно разрешаем запись
  VirtualProtect(ptr(Engine+$003B2D90),5,PAGE_READWRITE, @op);
  //вычисляем смещение которое запишем в джамп
  offset := buf - (Engine+$003B2D90 + 5);
  // Пишем новый адрес
  // нужно писать СМЕЩЕНИЕ!
  WriteProcessMemory(GetCurrentProcess(), ptr(Engine+$003B2D90),@comm,1,written);
  WriteProcessMemory(GetCurrentProcess(), ptr(Engine+$003B2D90+$01),@offset,4,written);
end;
"DLL Main"

Код:
procedure DLLEntryPoint(dwReason: DWORD);  export;
var
ThreadId:dword;
begin
  case dwReason of
    DLL_PROCESS_ATTACH:
    begin
      CreateThread(nil,0,@ InitThread,nil,0,ThreadId);
    end;
    DLL_PROCESS_DETACH:
    begin

    end;
  end
end;
все это "хардкод", "дурной тон" и "так нельзя"
и не забываем все действия десять раз перепроверить в отладчике.
__________________
C++Builder 6, Delphi 7, RAD Studio XE2, MS VC++...

Последний раз редактировалось Elecktron, 08.04.2015 в 01:00.
Elecktron вне форума   Ответить с цитированием
Старый 09.04.2015, 11:44   #35
Новичок
 
Регистрация: 25.03.2014
Сообщений: 11
Сказал Спасибо: 4
Имеет 0 спасибок в 0 сообщенях
user713 пока неопределено
По умолчанию UGameEngine::OnNpcHtmlMessage

Люди добрые, выручайте! Пытаюсь из engine.dll вызвать UGameEngine::OnNpcHtmlMessage.

PHP код:
void html_this NULL// <<< где взять изначально???

typedef int (__thiscall *_OnNpcHtmlMessage) (void Thisvoid userwchar_t htmlint unk);
_OnNpcHtmlMessage true_OnNpcHtmlMessage;

int __fastcall new_OnNpcHtmlMessage(void Thisunsigned int EDXvoid userwchar_t htmlint unk)
{
    if(
html_this == NULLhtml_this This//Тут выдёргиваю пойнтер при первом вызове диалога сервером
    
return true_OnNpcHtmlMessage(This0html0);
}

void NpcHtmlMessage()
{
    
wchar_t html[] = L"<html></html>";
    if(
html_this != NULLtrue_OnNpcHtmlMessage(html_this0html0);

P.S: Если html_this != NULL, то окно можно открыть хоть на экране ввода логина и пароля.
Хукается вроде успешно, НО где достать пойнтер This, чтобы вызывать эту функцию без предварительного получения This?

Добавлено через 7 минут
Да и вообще очень интересует как вызвать (__thiscall)OnNpcHtmlMessage, да или вообще что угодно из engine.dll !!! Дайте пример или пните в каком направлении капать))

Последний раз редактировалось user713, 09.04.2015 в 11:44. Причина: Добавлено сообщение
user713 вне форума   Ответить с цитированием
Старый 09.04.2015, 12:37   #36
Местный
 
Аватар для Yegor
 
Регистрация: 05.04.2009
Сообщений: 1,436
Сказал Спасибо: 306
Имеет 122 спасибок в 98 сообщенях
Yegor пока неопределено
По умолчанию

This - это указатель в памяти на объект UNetworkHandler, чтобы его получить надо перехватить один из его методов и получить этот адрес.

Например ставим хук на

PHP код:

class UNetworkHandler {};

UNetworkHandlerUNH;

int __fastcall UNetworkHandler_AddNetworkQueue_hook(UNetworkHandlerThisint /*edx*/NetworkPacketpacket)
{
    if(
UNH == 0)
    {
        
UNH This;
    }

.... 
Но чтобы произошел AddNetworkQueue_hook необходимо отправка хотя бы одного пакета на сервер. Например при вводе пароля.
__________________
Продажа чистых аккаунтов 4G, L2 EU, AARu, AA EU, Aion EU, Tera RU, Tera EU (ICQ 594297609)
Продажа VK авторег аккаунтов (ICQ 594297609)
Yegor вне форума   Ответить с цитированием
За это сообщение Yegor нажился спасибкой от:
Старый 11.01.2016, 12:15   #37
Новичок
 
Регистрация: 11.01.2016
Сообщений: 2
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Botter100 пока неопределено
Печаль

Посоны привет! Я тут это все читаю, чето все всё перехватывают. А я понять не могу - это все делается на клиенте с откусанной темидой и ГГ или прям со всем этим добром? Я просто пытаюсь делать хук и у меня крэшится. Причем крэшится не доходя до моего кода, но и не сразу, а только там где я залез своми грязнуми руками в енжин.длл.

Моя первая цель - вызвать MessageBox при вызове OnNpcHtmlMessage

Вот тут хукаю

Код:
bool Entry()
{
	HMODULE hEngine = GetModuleHandle(L"Engine.dll");

	if (hEngine == INVALID_HANDLE_VALUE)
		MessageBox(HWND_DESKTOP, L"Can't get module handle.", L"Error", MB_OK | MB_ICONERROR);

	char* addr = (char*)GetProcAddress(hEngine, "?OnNpcHtmlMessage@UGameEngine@@UAEHPAUUser@@PA_WHH@Z");

	if (!addr)
		MessageBox(HWND_DESKTOP, L"Can't get proc address.", L"Error", MB_OK | MB_ICONERROR);

	DWORD protection;
	DWORD ff = (DWORD)UGameEngine__OnNpcHtmlMessage;

	Log::putstring(L"dump_UGameEngine__OnNpcHtmlMessage.txt", L"UGameEngine__OnNpcHtmlMessage = 0x%0X\n", ff);
	Log::putstring(L"dump_UGameEngine__OnNpcHtmlMessage.txt", L"UGameEngine::OnNpcHtmlMessage = 0x%0X\n", (DWORD)addr);

	//VirtualProtect(addr, 5, PAGE_EXECUTE_READWRITE, &protection);
	*addr = char(0xE9);	// op code
	memcpy(addr + 1, &ff, 4);
	//VirtualProtect(addr, 5, protection, 0);

	HANDLE hDumpFile = CreateFile(L"dump.txt", GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, 0, NULL);

	DWORD bytesWritten = 0;
	WriteFile(hDumpFile, addr, 200, &bytesWritten, NULL);
	CloseHandle(hDumpFile);


	MessageBox(HWND_DESKTOP, L"I am in...", L"Yop", MB_OK);

	return true;
}
тут я просто инжеклю jmp на мою функцию представленую ниже

Код:
__declspec(naked) void UGameEngine__OnNpcHtmlMessage()
{
	MessageBox(HWND_DESKTOP, L"Called 'UGameEngine__OnNpcHtmlMessage'", L"Yop", MB_OK);
}
Это все делается под геймгуардом и с темидой, не знаю влияет ли это как то. Просто бот л2тавер показывает что это возможно. Подсобите че не так делаю? Спасибо.
Botter100 вне форума   Ответить с цитированием
Старый 11.01.2016, 12:57   #38
Новичок
 
Аватар для Barsik
 
Регистрация: 18.12.2008
Сообщений: 7
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
Barsik пока неопределено
По умолчанию

Цитата:
Сообщение от Botter100 Посмотреть сообщение
__declspec(naked) void UGameEngine__OnNpcHtmlMessage()
Твоя функция подмены должна быть по параметрам и возвращаемому значению идентична оригинальной функции. Вот так этот метод класса выглядит:
int __thiscall UGameEngine::OnNpcHtmlMessage(UGameEngine *this, struct User *, wchar_t *, int)
Barsik вне форума   Ответить с цитированием
Старый 11.01.2016, 13:02   #39
Новичок
 
Регистрация: 11.01.2016
Сообщений: 2
Сказал Спасибо: 0
Имеет 0 спасибок в 0 сообщенях
Botter100 пока неопределено
По умолчанию

Цитата:
Сообщение от Barsik Посмотреть сообщение
Твоя функция подмены должна быть по параметрам и возвращаемому значению идентична оригинальной функции. Вот так этот метод класса выглядит:
int __thiscall UGameEngine::OnNpcHtmlMessage(UGameEngine *this, struct User *, wchar_t *, int)
Это понятно, если я хочу жить после всего этого. Но щас для меня цель отобразить мессадж бокс и гори оно синим пламенем. Ведь должно же по логике проканать. Мне не надо сохранять стэк и прочее ведь? По сути че происходит - вызывается функция из енжин длл OnNpcHtmlMessage а там вместо ее кода уже мой тупо jmp а по этому жмп тупо call MessageBox.

я не переписываю адрес функции в таблице, я хукаюсь внутрь самой функции и мне в принципе пофигу на параметры.
Botter100 вне форума   Ответить с цитированием
Старый 11.01.2016, 14:08   #40
Новичок
 
Аватар для Barsik
 
Регистрация: 18.12.2008
Сообщений: 7
Сказал Спасибо: 0
Имеет 1 спасибку в 1 сообщении
Barsik пока неопределено
По умолчанию

memcpy(addr + 1, &ff, 4); неверно, так как нужно пересчитать относительное смещение т.е.
вместо &ff UGameEngine__OnNpcHtmlMessage - addr - 5;

с GG не пробовал хукать, возможно он палит, попробуй хукнуть не на первом байте а дальше, глянь что в отладчике переписывается ли джамп

Последний раз редактировалось Barsik, 11.01.2016 в 15:18.
Barsik вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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