Перейти к содержанию

engine.dll(css, hl2) блокировка команды alias


Рекомендуемые сообщения

2 часа назад, darthmaul сказал:

как найти кусок кода связанный с исполнением команды alias? чтоб занопить.

 

Открывай sdk, ищи ближайшие ошибки или текст к необходимой функции, ищи этот же текст в дизассемблере и восстанавливай код. Или alias 26267272, получаешь ошибку и ищешь её. Вроде бы там получение адреса рассчитывается через вызов функции с аргументом cvar команд и возвращает адрес функции из виртуальной таблицы.

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

вот что нарыл в sdk

 

Скрытый текст

#define	MAX_ALIAS_NAME	32

typedef struct cmdalias_s
{
	struct cmdalias_s	*next;
	char				name[ MAX_ALIAS_NAME ];
	char				*value;
} cmdalias_t;

static cmdalias_t	*cmd_alias = NULL;

/*
===============
Cmd_Alias_f

Creates a new command that executes a command string (possibly ; seperated)
===============
*/
void Cmd_Alias_f (void)
{
	cmdalias_t	*a;
	char		cmd[1024];
	int			i, c;
	char		*s;

	if (Cmd_Argc() == 1)
	{
		Con_Printf ("Current alias commands:\n");
		for (a = cmd_alias ; a ; a=a->next)
			Con_Printf ("%s : %s\n", a->name, a->value);
		return;
	}

	s = Cmd_Argv(1);
	if (strlen(s) >= MAX_ALIAS_NAME)
	{
		Con_Printf ("Alias name is too long\n");
		return;
	}

// copy the rest of the command line
	cmd[0] = 0;		// start out with a null string
	c = Cmd_Argc();
	for (i=2 ; i< c ; i++)
	{
		strcat (cmd, Cmd_Argv(i));
		if (i != c)
			strcat (cmd, " ");
	}
	strcat (cmd, "\n");

	// if the alias allready exists, reuse it
	for (a = cmd_alias ; a ; a=a->next)
	{
		if (!strcmp(s, a->name))
		{
			if ( !strcmp( a->value, cmd ) )		// Re-alias the same thing
				return;

			delete[] a->value;
			break;
		}
	}

	if (!a)
	{
		a = (cmdalias_t *)new cmdalias_t;
		a->next = cmd_alias;
		cmd_alias = a;
	}
	strcpy (a->name, s);	

	a->value = CopyString (cmd);
}

static ConCommand alias("alias",Cmd_Alias_f);

 

 

Через CE нашел сначала строку "Current alias commands:", поставил брейк поинт на чтение, при выполнении комнады alias вышло две функции: https://www.dropbox.com/s/960r1oe5j4yez2e/%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%202017-01-30%2014.50.23.png?dl=0

Но что то думаю что копаю не в ту сторону. По коду есть ConCommand alias("alias",Cmd_Alias_f); т.е. регистрация команды alias. по идее эту строку и нужно занопить, но вот как словить это событие если регистрация команды происходит сразу после старта игры.

 

Изменено пользователем darthmaul
Ссылка на комментарий
Поделиться на другие сайты

1 час назад, darthmaul сказал:

но вот как словить это событие если регистрация команды происходит сразу после старта игры.

 

Нопить во время старта игры, запустил программу она в цикле ищет модуль игры, если находит, то патчит необходимые тебе байты  и закрывается.

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

2 минуты назад, partoftheworlD сказал:

 

Нопить во время старта игры, запустил программу она в цикле ищет игру, если находит, то патчит необходимые тебе байты  и закрывается.

это понятно. но как адреса этих байтов найти?

Ссылка на комментарий
Поделиться на другие сайты

2 часа назад, darthmaul сказал:

это понятно. но как адреса этих байтов найти?

Находишь к примеру 

 

ConCommand alias("alias",Cmd_Alias_f);

 

1Uc0wjEpO-A.jpg

 

ПКМ на функцию -> Follow и пишешь внутри функции ret

Так что при обращении к ней краша не будет и сразу после обращения функция завершит выполнение и передаст управление дальше

 

Изменено пользователем partoftheworlD
Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.