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

Counter Strike Source - часть 3


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

Всем привет ! 

на днях писал код для вывода hp игрока и все прекрасно работало на созданном мной сервере(локальный , с ботами), а вот на онлайн серверах hp не отображает (код смотрел у КЕНГА (сапсибо ему за это!:)))

 

искал через "server.dll"

c другими библиотеками вообще ничего не отображает даже в локальном сервере!("client.dll" , "engine.dll")

"код1":
Скрытый текст

#define SERVERDLL "server.dll"
#define SERVERDLL1 "client.dll"//не используется
#define SERVERDLL2 "engine.dll"//не используется
const DWORD hp_offset = 0x88;//hp_of = 0x88;// Структура hp в структуре игрока 
const DWORD distance_of_player = 0x10; // Расстояние между структурой данных каждого игрока
const DWORD struct_of_players = 0x562D7C;         //"server.dll" + 00562D7C 0x58C72C//1 ссылку использовал


//код


if (strstr(szModName, SERVERDLL) != 0)
				{
					cout << "server.dll base : " << HModProc[i] << endl;
					server_dll = (DWORD)HModProc[i];
					//break;
				}


//код


	DWORD pir_addr;
	DWORD addr = server_dll + struct_of_players;
	//read_of_memory_bytes((LPCVOID)addr, 4, &pir_addr);
	//int r = ReadProcessMemory(HProc, (LPCVOID)addr, 4, &pir_addr);
	//read_of_memory_bytes((LPCVOID)addr, 4, &pir_addr);
	for (;; Sleep(100))
	{
		system("cls");
		//read_of_memory_bytes((LPCVOID)(server_dll + dw_numofplayers), 4, &play_on);
		//cout << "play on map : " << play_on << endl;
		for (int i = 0; i < 7; i++)
		{
			
			read_of_memory_bytes((LPCVOID)(addr + i*distance_of_player), 4, &pir_addr);
			
			if ((read_of_memory_bytes((LPCVOID)(addr + i*distance_of_player), 4, &pir_addr) == 1))
			{
				read_of_memory_bytes((LPCVOID)(pir_addr + hp_offset), 4, &hp);

				if (hp == (0 || 1))
				{
					cout << "players_" << i << "  hp : dead" << endl;
				}
				else
				{
					cout << "players_" << i << "  hp : " << hp << endl;
				}
			}
		}
	}

 

в СЕ отсеивал хп и нашел 2 указателя на структуры игроков.

14710864.jpg

в коде использую 1 указатель (и с ботами работает), а 2 указатель не выводит hp (56563456 - такие числа) (и на онлайн сервере тоже не выводит)

 

 

возможно я не в том месте "х" поставил

(

как я менял :

было = 00562D7C;

стало = 0х562D7C;

)

 

и еще вопрос : как использовать цикл на 64 , а выводил только реальных игроков или ботов

Просто ботов со мной 6 . цикл на 64 и он все 64 hp показывает по 100 hp у несуществующих.

Пытался реализовать с помощью read_of_memory_bytes , но возвращает всегда 1, что логично (так как там хранится тоже что-то)

"код2":

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

int read_of_memory_bytes(LPCVOID addr, int num, void* buf)
{
	SIZE_T sz = 0;
	int r = ReadProcessMemory(HProc, addr, buf, num, &sz);
	if (r == 0 || sz == 0)
	{
		cout << "Eror : " << GetLastError() << endl;
		return 0;
	}
	return 1;
}

 

 

PS : У меня Css v34 пиратка

// @IzerodayI, посети раздел фак. Garik66

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

21 минуту назад, IzerodayI сказал:

искал через "server.dll"

Когда ты подключаешься к онлайн-серверу, эта библиотека не используется. Она используется только для создания сервера (когда сам хостишь).

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

30 минут назад, Xipho сказал:

Когда ты подключаешься к онлайн-серверу, эта библиотека не используется. Она используется только для создания сервера (когда сам хостишь).

тогда не подскажешь какую библиотеку надо искать ? 

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

3 часа назад, IzerodayI сказал:

тогда не подскажешь какую библиотеку надо искать ? 

client.dll

 

3 часа назад, IzerodayI сказал:

как использовать цикл на 64

 

существуют проверки типа подключен ли игрок, жив он или нет и  подобные, в цикле это все фильтруешь и выводишь только реальных игроков.

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

3 часа назад, IzerodayI сказал:

 

искал через "server.dll"

c другими библиотеками вообще ничего не отображает даже в локальном сервере!("client.dll" , "engine.dll")

 

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

client.dll

пробовал , таких библиотеки даже 2 находит , не работает , может я кривой)

 

PS и с первым клиентом и со вторым , не работает.

if (strstr(szModName, SERVERDLL) != 0)
				{
					cout << "server.dll base : " << HModProc[i] << endl;
					server_dll = (DWORD)HModProc[i];
					//break;
				}

break использовал для 1-го клиента

Может быть , что там другие оффсеты?

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

вангую, у тебя сам поиск модулей коряво работает, т.к находит steamclient.dll и client.dll

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

Может быть , что там другие оффсеты?

и да смещения там точно другие.

 

 

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

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

и да смещения там точно другие.

А как их искать через СЕ, так-же?

когда я отсеивал по hp , СЕ находил только server.dll (наверно , потому ,что локальный сервер был) - скрин сверху есть

То есть надо искать оффесеты на онлайн сервере?

И библиотека мне нужна просто client.dll ?

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

32 минуты назад, IzerodayI сказал:

А как их искать через СЕ, так-же?

ну да, поиск указателей 1 уровень, найдется 5-6 указателей, значит правильный адрес использовал.

проверить значение можно высчитав смещение от m_iHealth до m_iTeamNum обычно 8 байт, но не всегда., лучше перепроверить.

 

32 минуты назад, IzerodayI сказал:

То есть надо искать оффесеты на онлайн сервере?

Нет, достаточно локального.

 

32 минуты назад, IzerodayI сказал:

И библиотека мне нужна просто client.dll ?

Да

 

upd

на счет проверки адреса здоровья

 

 

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

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

Нет, достаточно локального.

как я сейчас сделал :

1 зашел в ксс ,

2 создал сервер с ботом ,

3 запустил СЕ ,

4 открыл процесс ксс ,

5 и поставил 8байт 

6 начал искать своё хп 

7 2 адреса осталось 

8 попытался найти указатель на адрес и там пусто (в 2 адресах)

 

где я ошибся ? что я сделал не так?

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

5 минут назад, IzerodayI сказал:

5 и поставил 8байт 

тут, значение здоровья int(4 байта)

а 8 байт это разница между здоровьем и номером команды

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

проанализировав ситуацию , я понял , что моя потенциальная жертва это client.dll

как я сейчас сделал (дубль2) :

1 зашел в ксс

2 создал сервер с ботом ,

3 запустил СЕ ,

4 открыл процесс ксс ,

5 и поставил 4байт 

6 начал искать своё хп 

7 обнаружил примерно 8 адресов 

8 и каждого нашел указатель на адрес

[spoiler= "screen" ]

[img =https://cloud.mail.ru/public/Aeh6/beirRojns ]

 

-----------------------------------------------------------------------------------------------------------------

 

[img =https://cloud.mail.ru/public/ApRT/c5W25qr8J ]

[/spoiler]

 

просканировал все 8 адресов , где нашел только 3 клиента,

выбрав жертву , я все три адреса просканировал на структуры.

 

"client.dll"+004035C0 и только здесь обнаружил своё хп 

[img =https://cloud.mail.ru/public/BfZe/ToonDaeyQ ]

 

но я не вижу(возможно не знаю) 8байтовый сдвиг на m_iTeamNum

 

хп находилось в 0000 структуре

 

[img =https://cloud.mail.ru/public/4vG4/ajTgMbCC3 ]

 

я то нашел?)

Благодарю за ответы =)

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

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

partoftheworlD благодарю , сейчас разберусь)

Вообще-то. вопрос уже неоднократно подымался. Посмотри ещё и этот топик. 

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

Я думаю, что если возникает много однообразных вопросов по одной и той же теме (или игре), то это стоит оформлять в FAQ и закреплять где-то в верху раздела.

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

толи я уже все.. , то ли лыжи не едут

приложу все скрины с СЕ 

я отсеиваю хп , как на видио (я так делал и раньше) 

"screens":

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

вот , все , что осталось после отсева :

[img= https://cloud.mail.ru/public/D5X8/LwobuGKWh ]

дальше я читаю их память или ctrl + B (каждый)

1

[img= https://cloud.mail.ru/public/B8dn/jdaQ9GYvX ]

2

[img= https://cloud.mail.ru/public/BnXr/Vh1yDU5dL ]

3

[img= https://cloud.mail.ru/public/85hA/vJE61m8et ]

4

[img= https://cloud.mail.ru/public/CsqY/VJgBxJvfK ]

5

[img= https://cloud.mail.ru/public/L81m/oTtSrF9v7 ]

6

[img= https://cloud.mail.ru/public/BFhZ/HhR1aH27p ]

7

[img= https://cloud.mail.ru/public/L4Xs/KikneRG7q ]

и ничего нету!

это я такой кривой?)

или здесь есть мой адрес? 

// @IzerodayI, вижу, что так и не разобрался, как делать спойлеры. Посмотри этот "Bидео-FAQ для новичков."

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

17 минут назад, IzerodayI сказал:

это я такой кривой?)

или здесь есть мой адрес? 

 

Ты видимо не понял, у меня смещения для l4d2 было здоровья EC и команды ‭E4‬, тебе надо в отладчике глянуть смещения m_iHealth и m_iTeamNum, а после посчитать разницу. У меня вышло так что от здоровья до номера команды -8 байт, у тебя может быть другое значение.

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

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

18 часов назад, partoftheworlD сказал:

 

Ты видимо не понял, у меня смещения для l4d2 было здоровья EC и команды ‭E4‬, тебе надо в отладчике глянуть смещения m_iHealth и m_iTeamNum, а после посчитать разницу. У меня вышло так что от здоровья до номера команды -8 байт, у тебя может быть другое значение.

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

Все, я понял, все хп игроков хранится в одной структуре "client.dll"+004035C0  

и уже в ней хранится игроков(ботов) хп и их команда(наверное)

доказательства прилагаю.

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

1) хп моё и оффсет 005с,

[img=https://cloud.mail.ru/public/DFBP/qPWvRD6xU]

а это номер команды выше оффсета хп?

 

2) бот 1

[img=https://cloud.mail.ru/public/H7E7/JNhpsdZn9]

 

3)бот 2

[img=https://cloud.mail.ru/public/7dQL/aAfaSuDcT]

 

возникшие вопросы :

1) какой сдвиг между хп игроков, как его посчитать . чтобы зациклить?

2) как найти кол-во игроков ? (пытался сделать на онлайн сервере (долго отсеивая ,когда игроки заходили и выходили), получил 3 адреса , но у них не было указателей на адреса(пусто было. даже библиотеку не нашел), может он статический?)

3) и то , что выше оффсета хп это команда, и если да . то какой сдвиг?

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

 

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

1) какой сдвиг между хп игроков, как его посчитать . чтобы зациклить?

 

Смещение n игрока - смещение n-1 игрока, если здоровье находится в общей структуре часто такое бывает в одиночных играх, если же в онлайн играх, то в них используется единый класс для хранения структур всех игроков, чтобы найти сдвиг, надо вставить адрес указателя на общую структуру в программу которая работает со структурами типа Reclass или встроенного в CE Dissect Data/Structures, по 0 смещению будет указатель на структуру твоего игрока, тебе надо просто прокликать по указателям и посмотреть, есть ли по смещению твоего здоровья, ещё чье либо хп, первый найденный указатель в котором будут совпадать смещения на здоровье например и будет являться сдвигом т.е. (0x0 смещение на указатель на структуру локального игрока, 0x10 смещение на указатель на структуру 2-го игрока) 0x10 - 0x0 = 0x10 это и будет сдвиг.

 

на примере csgo

 

K3xknvw5tzY.jpg

 

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

2) как найти кол-во игроков ? (пытался сделать на онлайн сервере (долго отсеивая ,когда игроки заходили и выходили), получил 3 адреса , но у них не было указателей на адреса(пусто было. даже библиотеку не нашел), м

 

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

 

 

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

21 час назад, keng сказал:

Я думаю, что если возникает много однообразных вопросов по одной и той же теме (или игре), то это стоит оформлять в FAQ и закреплять где-то в верху раздела.

Тык.

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

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

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

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