Recommended Posts

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
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

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


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

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

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

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

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

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

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

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

 

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


Ссылка на сообщение
Поделиться на других сайтах
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

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


Ссылка на сообщение
Поделиться на других сайтах
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

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


Ссылка на сообщение
Поделиться на других сайтах
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 Благодарю за ответы 

 

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


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

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

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

 

gqm33PnAJ-4.jpg

 

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

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

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


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

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

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

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

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

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

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

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

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


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

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

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

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

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


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

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

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

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


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

что бы получить 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, описывающий возвращаемое состояние преобразования.

 

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


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

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

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

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

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


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

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

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

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

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

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

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

95TCOwd.png

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


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

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

  • Upvote 1

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


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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
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. 

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

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


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

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

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

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

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

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


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

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

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

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


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

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

 

@Garik66, спасибо

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


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

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

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

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

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

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


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

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

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

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

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


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

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

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


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

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

модули 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

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


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

Подскажите где купить/зарегистрировать домен 2го уровня с именем города. Впервый сталкиваюсь с такой нуждой поэтому решил спросить сначала у Вас =)

интересует такой имяфирмы.balabanovo.ru

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


Ссылка на сообщение
Поделиться на других сайтах
Гость
Эта тема закрыта для публикации сообщений.