415 сообщений в этой теме

10 минут назад, MasterGH сказал:

Самое дальнее смещение, которое удалось найти может быть размером структуры. Как искать эти смещения?

Спасибо за ответ.

 

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

Изменено пользователем partoftheworlD
0

Поделиться сообщением


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

Возможно IDA умеет определять структуру и размер структуры  или плагины к IDA,

Может быть привидение типа одного объекта к другому типу в отладочном коде связано с размером структуры.Тут на С++ можно проверить и код отладочный посмотреть.

Может быть есть код, который структуру забивает нулями или через стандартные функции.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, MasterGH сказал:

Может быть привидение типа одного объекта к другому типу в отладочном коде связано с размером структуры.Тут на С++ можно проверить и код отладочный посмотреть.

Может быть есть код, который структуру забивает нулями или через стандартные функции.


Потестировал немного, если структура статическая, то компилятор в коде использует размер этой структуры просто как значение передаваемое например в new единственным аргументом. Видимо проще, способа найти размер структуры нет, кроме как находить адрес структуры который должен являться указателем на начало класса и выходить на размер.

 

Размер структуры>> | PUSH 0x34                                                                
                   | CALL <operator new>                                                                                             
                   | MOV DWORD PTR DS:[class_begin_address], EAX (EAX указатель на начало класса, который является структурой)                                            

 

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

Самое дальнее смещение, которое удалось найти может быть размером структуры.

 

Ну, а так все верно.

 

	this->a = 0;           //0x04
	this->b = 0;           //0x08
	this->c = 0;           //0x0С
	this->d = 0.0;         //0x10
	this->ac[36] = 'test'; //0x24
                               //0x34
   

 

Изменено пользователем partoftheworlD
0

Поделиться сообщением


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

Созрело у меня два вопроса :

1) в dll получать оффсеты через ReadProcessMemory (проблема в том , что не логично из dll(процесса игры) искать дескриптор окна игры, открывать процесс с флагами и т.д. ,

а для функции ReadProcessMemory нужен OpenProcess), поэтому через какую функцию в dll искать оффсеты лучше?

Я просто создавал сначала в exe, а потом пришлось переносить в dll.

2) И если dll в процессе игры , то я же могу найти игровую библиотеку client.dll 

таким способом? :

HMODULE dll = GetModuleHandle("client.dll");
client_dll = (DWORD)dll;

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
39 минут назад, IzerodayI сказал:

Созрело у меня два вопроса :

1) в dll получать оффсеты через ReadProcessMemory (проблема в том , что не логично из dll(процесса игры) искать дескриптор окна игры, открывать процесс с флагами и т.д. ,

а для функции ReadProcessMemory нужен OpenProcess), поэтому через какую функцию в dll искать оффсеты лучше?

Я просто создавал сначала в exe, а потом пришлось переносить в dll.

2) И если dll в процессе игры , то я же могу найти игровую библиотеку client.dll 

таким способом? :


HMODULE dll = GetModuleHandle("client.dll");
client_dll = (DWORD)dll;

 

 

1) Через разыменование указателя и оператор присваивания))

2) Не, так получишь только дескриптор данной dll. Для получения базового адреса - CreateToolhelp32Snapshot с флагом TH32CS_SNAPMODULE.

Изменено пользователем rtm
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 час назад, IzerodayI сказал:

2) И если dll в процессе игры , то я же могу найти игровую библиотеку client.dll 

таким способом? :

    MODULEINFO moduleinfo = { 0 };
    HMODULE hModule = GetModuleHandle("client.dll");
    GetModuleInformation(GetCurrentProcess(), hModule, &moduleinfo, sizeof(MODULEINFO));
    temp.lpBaseOfDll будет содержать адрес начала client.dll

 

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

1) в dll получать оффсеты через ReadProcessMemory (проблема в том , что не логично из dll(процесса игры) искать дескриптор окна игры, открывать процесс с флагами и т.д. ,

а для функции ReadProcessMemory нужен OpenProcess), поэтому через как

 

Не нужен ReadProcessMemory в dll, для начала стоит прочитать что делает эта функция на мсдн, прежде, чем использовать:

написано же ReadProcessMemory Reads data from an area of memory in a specified process.

Выше уже ответили как это сделать.

 

Изменено пользователем partoftheworlD
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, partoftheworlD сказал:

temp.lpBaseOfDll будет содержать адрес начала client.dll

почему temp , если lpBaseOfDll относится к MODULEINFO

разве не так должно быть?

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

MODULEINFO moduleinfo = { 0 };
HMODULE hModule = GetModuleHandle("client.dll");
GetModuleInformation(GetCurrentProcess(), hModule, &moduleinfo, sizeof(MODULEINFO));
client_dll = (DWORD)moduleinfo.lpBaseOfDll;

 

 

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

1) Через разыменование указателя и оператор присваивания))

оператор -> и = , это понятно .

Допустим у меня есть client_dll и hp_onl_of (= 0x19c) и как здесь использовать эти операторы?

 

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

 

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, IzerodayI сказал:

разве не так должно быть?

Угу, просто у меня это вынесено как отдельный метод и видимо не заметил.

 

gqm33PnAJ-4.jpg

 

temp.lpBaseOfDll вот примерно так, если в одной картинке.

Изменено пользователем partoftheworlD
0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
47 минут назад, partoftheworlD сказал:

Угу, просто у меня это вынесено как отдельный метод и видимо не заметил.

не подскажешь , что он имел ввиду :

52 минуты назад, IzerodayI сказал:
4 часа назад, rtm сказал:

1) Через разыменование указателя и оператор присваивания))

оператор -> и = , это понятно .

Допустим у меня есть client_dll и hp_onl_of (= 0x19c) и как здесь использовать эти операторы?

? ну или чего я не понимаю ...

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
26 минут назад, IzerodayI сказал:

не подскажешь , что он имел ввиду :

? ну или чего я не понимаю ...

hp = *reinterpret_cast<int*>(client_dll + 0x19c);

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
11 минуту назад, partoftheworlD сказал:

hp = *reinterpret_cast<int*>(client_dll + 0x19c);

Благодарю, все стало понятно:)

0

Поделиться сообщением


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

что бы получить view_matrix(видовую матрицу) достаточно в перехваченном directx создать 

IDerect3DDevice9* dev = (IDerect3DDevice9*) present;
D3DXMATRIX v_m;
dev->GetTransform(D3DTS_VIEW, &v_m);

или надо мыслить глобальней? 

PS   GetTransform :

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

HRESULT GetTransform(
  [in]  D3DTRANSFORMSTATETYPE State,
  [out] D3DMATRIX             *pMatrix
);

pMatrix [out]
Type: D3DMATRIX*
Pointer to a D3DMATRIX structure, describing the returned transformation state.

 

Указатель на структуру D3DMATRIX, описывающий возвращаемое состояние преобразования.

 

0

Поделиться сообщением


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

примерная реализация кода вот такая :

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

void DrawIndicator(void* self) 
{
	IDirect3DDevice9* dev = (IDirect3DDevice9*)self;
	dev->BeginScene();
	GiveMeLineStandart(dev);
	D3DXMATRIX v_m;
	dev->GetTransform(D3DTS_VIEW, &v_m);
	D3DVIEWPORT9 viewport;
	dev->GetViewport(&viewport);
  	FindClientModule();
	float coordX, coordY, coordZ;
	float pOut[3];
	if (indicator)
	{
		for (int i = 1; i < 15; i++)//Да с 1, знаю кто я...(на то есть причина)
		{
			coordX = *reinterpret_cast<float*>(client_dll + player_onl_coordX*i);
			coordY = *reinterpret_cast<float*>(client_dll + player_onl_coordY*i);
			coordZ = *reinterpret_cast<float*>(client_dll + player_onl_coordZ*i);
			if ((coordX == 0) || (coordY == 0)) { continue; }
			World_To_Screen(coordX, coordY, coordZ, &v_m, viewport, pOut);
			m_font1->DrawTextA(0, "just do it", -1, &fontRect1, 0, D3DCOLOR_ARGB(255, 255, 255, 0));
			treangle[0] = D3DXVECTOR2(pOut[0], pOut[1]);
			treangle[1] = D3DXVECTOR2(pOut[0], pOut[1] + 50);
			line->Begin();
			line->Draw(treangle, 2, cool);
			line->End();
		}
     else
     {
        
     }

 

функция GiveMeLineStandart

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

void GiveMeLineStandart(IDirect3DDevice9* device)
{
	D3DXCreateLine(device, &line);
	line->SetWidth(4.0f);
	line->SetPattern(0xffffffff);
	line->SetAntialias(FALSE);
}

 

функция FindClientModule

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

void FindClientModule()
{
	MODULEINFO moduleinfo = { 0 };
	HMODULE hModule = GetModuleHandle("client.dll");
	GetModuleInformation(GetCurrentProcess(), hModule, &moduleinfo, sizeof(MODULEINFO));
	client_dll = (DWORD)moduleinfo.lpBaseOfDll;
}

 

функция World_To_Screen

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

int World_To_Screen(float coordX, float coordY, float coordZ, D3DXMATRIX* vm, D3DVIEWPORT9 viewport, float* pOut)
{
	float w = 0.0f;
	pOut[0] = vm[0][0] * coordX + vm[0][1] * coordY + vm[0][2] * coordZ + vm[0][3];
	pOut[1] = vm[1][0] * coordX + vm[1][1] * coordY + vm[1][2] * coordZ + vm[1][3];
	w = vm[3][0] * coordX + vm[3][1] * coordY + vm[3][2] * coordZ + vm[3][3];
	if (w < 0.01f) { return 0; }
	float intw = 1.0f / w;
	pOut[0] *= intw;
	pOut[1] *= intw;
	int weight = (int)(viewport.Width);//(rect.right - rect.left);
	int height = (int)(viewport.Height);//(rect.bottom - rect.top);
	float x = weight / 2;
	float y = height / 2;
	x += 0.5*pOut[0] + weight + 0.5;
	y -= 0.5*pOut[1] + height + 0.5;
	pOut[0] = x;//+ rect.left
	pOut[1] = y;//+ rect.top
	return 1;
}

 

глобальные переменные

DWORD client_dll;
D3DXVECTOR2 treangle[2];//для рисования
D3DCOLOR cool = D3DCOLOR_ARGB(255, 255, 0, 0);
ID3DXLine *line;
const DWORD player_onl_coordX = 0x1a0;
const DWORD player_onl_coordY = 0x1a4;
const DWORD player_onl_coordZ = 0x1a8;

кто знает , примерно, почему ничего не рисует на экране ?

я предполагаю , что не так нашел 

D3DXMATRIX v_m;
dev->GetTransform(D3DTS_VIEW, &v_m);//view_matrix - видовая матрица
D3DVIEWPORT9 viewport;
dev->GetViewport(&viewport);//для размеров окна игры 

// еще возможно  client_dll не так нашел (где-нибудь ошибка)

MODULEINFO moduleinfo = { 0 };
HMODULE hModule = GetModuleHandle("client.dll");
GetModuleInformation(GetCurrentProcess(), hModule, &moduleinfo, sizeof(MODULEINFO));
client_dll = (DWORD)moduleinfo.lpBaseOfDll;

ещё возможно ошибка в функции World_To_Screen

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
22 часа назад, rtm сказал:

Не, так получишь только дескриптор данной dll

Чавоооо? Ты зачем людей с толку сбиваешь??

GetModuleHandle возвращает HMODULE. HMODULE это HINSTANCE, что по сути представляет собой int pointer, но никак не дескриптор.

В любом проекте вбей

printf( "%X\n", GetModuleHandle( "kernel32.dll" ) );

и он вернет тебе адрес. Поэтому достаточно вызвать эту функцию, чтобы узнать базовый адрес.

95TCOwd.png

0

Поделиться сообщением


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

@IzerodayI, а ты вообще иди тему лучше создай. На кой фиг тут обсуждение вести, если это флудилка?

1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 минуты назад, uhx сказал:

@IzerodayI, а ты вообще иди тему лучше создай. На кой фиг тут обсуждение вести, если это флудилка?

Абсолютно согласен и другим пользователям потом было проще читать, а не выискивать здесь(в этом топике)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
3 часа назад, uhx сказал:

Чавоооо? Ты зачем людей с толку сбиваешь??

GetModuleHandle возвращает HMODULE. HMODULE это HINSTANCE, что по сути представляет собой int pointer, но никак не дескриптор.

В любом проекте вбей


printf( "%X\n", GetModuleHandle( "kernel32.dll" ) );

и он вернет тебе адрес. Поэтому достаточно вызвать эту функцию, чтобы узнать базовый адрес.

95TCOwd.png

A handle to an instance. This is the base address of the module in memory. 

Можно назвать дескриптором, но вот про то, то он совпадает с адресом модуля в памяти - не знал.

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Только что, rtm сказал:

Можно назвать дескриптором, но вот про то, то он совпадает с адресом модуля в памяти - не знал

Потому что это что-то вроде локального дескриптора, который по идее не является объектом ядра (kernel object)

Но на msdn он к ним относится почему-то, хотя к нему нельзя применять стандартные функции под хендлы, типа GetHandleInformation, или наследовать его.

Странная хрень.

0

Поделиться сообщением


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

опубликовал тему =)

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
23 минуты назад, IzerodayI сказал:

опубликовал тему =)

Поправил заголовок в теме: 1. Нарушения правила оформления заголовка тем. Общие правила форума Пункт 1.3

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 минуту назад, Garik66 сказал:

Поправил заголовок в теме: 1. Нарушения правила оформления заголовка тем. Общие правила форума Пункт 1.3

 

@Garik66, спасибо

0

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 минут назад, Garik66 сказал:

Поправил заголовок в теме: 1. Нарушения правила оформления заголовка тем. Общие правила форума Пункт 1.3

Спасибо , что не закрыл :D =)

просто забыл про [...]

Изменено пользователем IzerodayI
0

Поделиться сообщением


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

А как свой блог создать? Или его только одмены могут кому-то выделить? Думал туда всякую фигню скидывать)

А то столько телодвижений делаю в последнее время - на статью вроде не тянет, а вот как заметки какие-то скидывать - самое то)

Изменено пользователем uhx
0

Поделиться сообщением


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

Блоги могут создавать только участники группы "Разработчики". Если предоставишь список своих работ, после проверки будешь переведен в указанную группу и сможешь создать блог.

0

Поделиться сообщением


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

может кому будет интересно поковырять

модули vac3 от 18.7.2017 2:50 steam и csgo c контрольной сумой sha256 и временем последнего обновления

 

29 июня 20:03:08 2017 vac_1_7322f05390a33c7c0adf15531f9d3799498e5cb1f44fa0b2dca4c6c70ece5718.dll

29 июня 19:48:39 2017 vac_2_028885b7bc3ebfa45f9161cba87ab03d210191246a5857af797cbf4b80a9789f.dll

29 июня 19:48:39 2017 vac_3_301de3b6ec0d644e72a2103bb0e255c02439110cdbbb38ab4641e55528ee07d8.dll

29 июня 20:35:06 2017 vac_4_dfe2fa15e22ba9ee8d959ad5a9bddddd36dcb4ae657eb3cf82693ca3cfda016b.dll

29 июня 19:43:59 2017 vac_5_7e11761c31ae54ebaabf7d2dbb226049e5d0b4486ec7bde91aecd8fe7d987a65.dll

29 июня 21:41:32 2017 vac_6_829f4129b2c867434bbe860037477b74a8ad2ee4f9a22448012bda8d06c65c38.dll

29 июня 22:19:10 2017 vac_7_ccf5fbeb474c5affbda9879b85777aa965fb026ff1c5593ac4e2ace5e1fbb5c8.dll

29 июня 19:51:09 2017 vac3_1_e8c3307551c7f72701a136a10c04c8bbaf885e5336981c5e91d2e41f35792d10.dll

29 июня  20:02:58 2017 vac3_2_24d943cc9413f5eaefd9d381109a7ced925cafc291f8f6941225539307f8747e.dll

 

https://mega.nz/#!Bs1mFA5K!YTWkvfFzYSUc3xwn_NgJhiTHG-erl0MJvubod7SvX4Q

 

 

Изменено пользователем partoftheworlD
0

Поделиться сообщением


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

Создайте аккаунт или войдите для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас