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

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

Чат (Новых сообщений с момента вашего последнего визита нет)
Загрузка...
Задавайте ваши вопросы на форуме. Чат предназначен для небольших разговоров.
 
Ответ
 
Опции темы Опции просмотра
Старый 25.03.2014, 15:09   #41
Новичок
 
Регистрация: 25.03.2014
Сообщений: 11
Сказал Спасибо: 4
Имеет 0 спасибок в 0 сообщенях
user713 пока неопределено
По умолчанию

Проще. Но я с хуками пытаюсь разобраться. Интересно не через ини сделать, а через *опу
user713 вне форума   Ответить с цитированием
Старый 28.03.2015, 15:52   #42
Пользователь
 
Регистрация: 19.08.2014
Сообщений: 58
Сказал Спасибо: 12
Имеет 0 спасибок в 0 сообщенях
cvillian пока неопределено
По умолчанию

Цитата:
Сообщение от Prixmegently Посмотреть сообщение
Методы Request*** и AddNetworkQueue одного объекта UNetworkHandler. Создается он один раз при запуске клиента. SendPacket - там другой объект.
Нет ли случайно примера на дельфи как получить хендл UNetworkHandler. Я впринципе с установкой хуков справился благодаря темам с этого форума, но не знаю как получить указатель на этот объект, чтобы передавать значения в старые функции.

Последний раз редактировалось cvillian, 28.03.2015 в 16:25.
cvillian вне форума   Ответить с цитированием
Старый 29.03.2015, 10:16   #43
Местный
 
Аватар для Breadfan
 
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Breadfan пока неопределено
По умолчанию

Ну раз у тебя хук ставится - то хендл ты получишь при первом же его срабатывании - из ecx.

thiscall-вызов: https://msdn.microsoft.com/ru-ru/library/ek8tkfbw.aspx
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."

А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?

Последний раз редактировалось Breadfan, 29.03.2015 в 10:23.
Breadfan вне форума   Ответить с цитированием
За это сообщение Breadfan нажился спасибкой от:
Старый 29.03.2015, 11:23   #44
Пользователь
 
Регистрация: 19.08.2014
Сообщений: 58
Сказал Спасибо: 12
Имеет 0 спасибок в 0 сообщенях
cvillian пока неопределено
По умолчанию

Цитата:
Сообщение от Breadfan Посмотреть сообщение
Ну раз у тебя хук ставится - то хендл ты получишь при первом же его срабатывании - из ecx.

thiscall-вызов: https://msdn.microsoft.com/ru-ru/library/ek8tkfbw.aspx
Да, но для этого нужно оформить код на asm, а я в нём не в зуб ногой)

Так это должно выглядеть?
Код:
var
  uh: THandle;
begin
  asm
    mov uh,ecx  // uh - моя переменная в которую я записываю значение из ecx.
end;

Последний раз редактировалось cvillian, 29.03.2015 в 11:52.
cvillian вне форума   Ответить с цитированием
Старый 29.03.2015, 20:10   #45
Местный
 
Аватар для ScythLab
 
Регистрация: 24.10.2014
Сообщений: 190
Сказал Спасибо: 4
Имеет 42 спасибок в 40 сообщенях
ScythLab пока неопределено
По умолчанию

Примерно так, только при одном маленьком условии: если ты этот кусок кода поставишь в нужно место (и для сохранения лучше использовать глобальную переменную)
__________________
Хобби: разработка бота для Lineage.
ScythLab вне форума   Ответить с цитированием
За это сообщение ScythLab нажился спасибкой от:
Старый 02.04.2015, 17:46   #46
Местный
 
Аватар для Breadfan
 
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Breadfan пока неопределено
По умолчанию

чуть дополню - "нужное место" - это такое место, которое обязательно будет вызвано ДО всех твоих манипуляций с ручным вызовом функций клиента, иначе есть вероятность попытки вызова с нулем (или мусором) в регистре, что к хорошему врятли приведет.
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."

А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?

Последний раз редактировалось Breadfan, 02.04.2015 в 19:28.
Breadfan вне форума   Ответить с цитированием
Старый 08.04.2015, 03:36   #47
Пользователь
 
Регистрация: 19.08.2014
Сообщений: 58
Сказал Спасибо: 12
Имеет 0 спасибок в 0 сообщенях
cvillian пока неопределено
По умолчанию

Оффтоп
cvillian вне форума   Ответить с цитированием
Старый 08.04.2015, 18:12   #48
Новичок
 
Регистрация: 25.03.2014
Сообщений: 11
Сказал Спасибо: 4
Имеет 0 спасибок в 0 сообщенях
user713 пока неопределено
По умолчанию

Цитата:
Сообщение от user713 Посмотреть сообщение
...При старте клиента появляется картинка, как сделать, чтобы она не отображалась?...
Сам себе и отвечу(через год xD):
PHP код:
typedef HANDLE (__stdcall *_CreateFile) (LPCTSTR lpFileNameDWORD dwDesiredAccessDWORD dwShareModeLPSECURITY_ATTRIBUTES lpSecurityAttributesDWORD dwCreationDispositionDWORD dwFlagsAndAttributesHANDLE hTemplateFile);
_CreateFile true_CreateFile;

HANDLE __stdcall new_CreateFile(LPCTSTR lpFileNameDWORD dwDesiredAccessDWORD dwShareModeLPSECURITY_ATTRIBUTES lpSecurityAttributesDWORD dwCreationDispositionDWORD dwFlagsAndAttributesHANDLE hTemplateFile)
{
    
HANDLE fileHandle 0;
    
wchar_t pos wcsstr((wchar_t *)lpFileNameL".bmp");
    if(
pos != NULL && ShowSplash)
        
fileHandle true_CreateFile(L"null\\null"dwDesiredAccessdwShareModelpSecurityAttributesdwCreationDispositiondwFlagsAndAttributeshTemplateFile);
    else
        
fileHandle true_CreateFile(lpFileNamedwDesiredAccessdwShareModelpSecurityAttributesdwCreationDispositiondwFlagsAndAttributeshTemplateFile);
    return 
fileHandle;
}

void hook()
{
    
FARPROC addr;
    if ((
addr GetProcAddress(LoadLibraryA("kernel32.dll"), "CreateFileW")) == 0ShowSplash false;
    
true_CreateFile = (_CreateFilesplice((unsigned char*) addrnew_CreateFile);

Хукаем CreateFileW из библиотеки kernel32.dll, и запрещаем клиенту открывать файлы в имени которых присутствуют символы ".bmp".
user713 вне форума   Ответить с цитированием
Старый 08.04.2015, 18:41   #49
Местный
 
Аватар для Breadfan
 
Регистрация: 29.04.2008
Сообщений: 830
Сказал Спасибо: 80
Имеет 230 спасибок в 169 сообщенях
Breadfan пока неопределено
По умолчанию

Залез в папку systextures клиента - удалил *.bmp....Но - да, не сгодитса при запуске через апдейтеры...
__________________
На фразы в аську типа "слух карочь 1)как точить 2)как раскачаться за 5 мин" - игнор. ИМХО идиотизм
Дай голодному рыбу - он будет один день сыт. Покажи ему, как удить рыбу - он пошлёт тебя и скажет, что у него есть более интересные занятия, чем забрасывать снасти в воду
David Kastrup @ de.comp.text.tex.
"Приобретенные навыки общения с маленькими детьми - сильно упрощают взаимопонимание на форумах..."

А вы знаете, что для качественной сварки - место шва нужно протереть спиртом?
Breadfan вне форума   Ответить с цитированием
Старый 26.06.2015, 01:07   #50
Пользователь
 
Регистрация: 19.08.2014
Сообщений: 58
Сказал Спасибо: 12
Имеет 0 спасибок в 0 сообщенях
cvillian пока неопределено
По умолчанию

Нашёл тут на форуме пример на с++, но клиент вылетает с критом после месседж бокса, никак не получается заставить работать.

Код:
#include "stdafx.h"
#include <Windows.h>

#pragma pack(push, 1)
struct jmp_struct {
	BYTE instruction;
	DWORD argument;
};
#pragma pack(pop)

BYTE old[5];
DWORD written = 0;
jmp_struct jump;

typedef DWORD(__fastcall *t_Func)(void* param1)
t_Func Original_Func = NULL;

INT __fastcall Intercept_Func(void* param1)

{
	// Сохранение контекста класса перехваченного метода.
	DWORD this_ptr = NULL;
	__asm mov this_ptr, ecx;

	// Восстанавливаем 5 первых байт функции.
	WriteProcessMemory(GetCurrentProcess(), (void*)Original_Func, (void*)&old, 5, &written);

	MessageBox(0, L"Hooked", L"", MB_OK);

	// Восстановление в регистр ecx контекста класса перехваченного метода.
	__asm mov ecx, this_ptr;
	DWORD originalResult = Original_Func(param1/*, param2*/);

	// Снова заменяем  5 байт функции на команду перехода на нашу функцию
	WriteProcessMemory(GetCurrentProcess(), (void*)Original_Func, (void*)&jump, 5, &written);

	return originalResult;
}

void InterceptFunctions() {
	HMODULE hEngine = GetModuleHandleA("engine.dll");

	Original_Func = (t_Func)GetProcAddress(hEngine, "?RequestBypassToServer@UNetworkHandler@@UAEHAAVL2ParamStack@@@Z");

	if (Original_Func == 0) {
		MessageBox(NULL, L"Can't get address", L"Error!", MB_OK);
		return;
	}

	jump.instruction = 0xE9;
	jump.argument = (DWORD)&Intercept_Func - ((DWORD)Original_Func + 5); // Смещение для jmp = <адрес назначения> - (<адрес jmp> + sizeof(BYTE) + sizeof(int))

	ReadProcessMemory(GetCurrentProcess(), (void*)Original_Func, (void*)&old, 5, &written);
	WriteProcessMemory(GetCurrentProcess(), (void*)Original_Func, (void*)&jump, sizeof(jmp_struct), &written);
}


BOOL APIENTRY DllMain(HMODULE hModule,
	DWORD  ul_reason_for_call,
	LPVOID lpReserved
	)
{
	switch (ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH: InterceptFunctions();
	case DLL_THREAD_ATTACH:
	case DLL_THREAD_DETACH:
	case DLL_PROCESS_DETACH:
		break;
	}
	return TRUE;
}

Последний раз редактировалось cvillian, 26.06.2015 в 03:03.
cvillian вне форума   Ответить с цитированием
Ответ

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



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

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


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

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

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