Сейчас на форуме: Lohmaty, tyns777, cppasm (+7 невидимых)

 eXeL@B —› Вопросы новичков —› Патчинг разрешения в EXE
Посл.ответ Сообщение

Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 04 февраля 2018 22:14
· Личное сообщение · #1

Исследую Exe 3D игры,
Хочу добиться статичного разрешения, т.е. чтобы со стороны программы не было влияния на этот характер.
Что было предпринято мной?
0. exe не запакован ничем. Т.е. после печки Visual Studio 08 года
Во первых поиск по HEX результата не дало, скорее всего функция забивается в память и выполняется из памяти.
Во вторых ollyDbg также желаемого результата не даёт. Плох тот момент что нельзя отследить по методу message box, т.е. разрешение меняется через 3 секунды в меню игры и соответственно не за что отследить, разве что как то угадать по времени.

Вопрос, какие шаги мне следует предпринять? Создавать дамп памяти, или лучше поискать функцию которая собственно меняет разрешение, но как сделать это эффективно?
Благодарю.



Ранг: 18.3 (новичок), 6thx
Активность: 0.030.02
Статус: Участник

Создано: 04 февраля 2018 23:00
· Личное сообщение · #2

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



Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 04 февраля 2018 23:24 · Поправил: dosprog
· Личное сообщение · #3

Если отменить установку разрешения экрана, которую делает для себя программа,
то скорей всего она не будет работать или станет глючить. Там же не зря такое сделано.





Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 05 февраля 2018 11:42
· Личное сообщение · #4

ainuribn пишет:
Хочу добиться статичного разрешения, т.е. чтобы со стороны программы не было влияния на этот характер.

так для начала необходимо найти соответствующие вызовы
или winapi:
Code:
  1. LONG ChangeDisplaySettings(
  2.   _In_ DEVMODE *lpDevMode,
  3.   _In_ DWORD   dwflags
  4. );

или DirectX:
Code:
  1. d3d9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_mainWindow,
  2.                vp, &d3dpp, &m_pDevice)))
  3.  D3DDISPLAYMODE DisplayMode;
  4.             d3d9->EnumAdapterModes( D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, iMode, &DisplayMode );
  5. ...
  6.  d3d9->Release();

если виндовс игрушка, то DirectX очевидно

| Сообщение посчитали полезным: Gideon Vi

Ранг: 95.1 (постоянный), 247thx
Активность: 0.260.01
Статус: Участник

Создано: 05 февраля 2018 14:30 · Поправил: unknownproject
· Личное сообщение · #5

CreateWindowExA(W). И выставлять в качестве аргументов ширины и высоты любое из того, что требуется. Таким путем даже во всяком OpenGL говне можно разрешение входное менять, минуя конфиги.
Ну, а если хочется, чтобы разрешение было совсем статичным, то искать функцию, которая читает конфиг, и выпиливать из нее параметры разрешения, тогда уже наверняка заполнения нужной пары параметров ненужными данными не будет.
Большинство движков работают по такому принципу:
-Создали окно нужного разрешения;
-Развернули на полный экран (некоторые движки создают стандартное окно, а потом переключают его в полноэкранный режим);
-Создали и нарисовали ddraw/d3d объект;
-Поехали рисовать все остальное и извлекать в память скрипты, видосики и прочие шняги.

-----
TEST YOUR MIGHT


| Сообщение посчитали полезным: Gideon Vi

Ранг: 431.7 (мудрец), 390thx
Активность: 0.730.32
Статус: Участник

Создано: 05 февраля 2018 15:01
· Личное сообщение · #6

Ну, будет у игрули отображаться только четверть поля, или вся она будет на четверти окна, в лучшем случае - что толку?



Ранг: 95.1 (постоянный), 247thx
Активность: 0.260.01
Статус: Участник

Создано: 05 февраля 2018 15:02 · Поправил: unknownproject
· Личное сообщение · #7

Это от движка зависит. К совсем говеным старым играм подход другой нужен в этом плане. Более или менее адекватные движки нормально все воспримут, а если будут мессаджбоксы а-ля -разрешение не поддерживается вашей картой (такое я встречал на старых двиглах), то это патчится все достаточно легко, включая битность цветов и т.д. В частном случае можно даже аэро интерфейс форсировать у неподдерживаемой игры, если хочется играть в оконном режиме. Я бы не стал все это писать, если бы оно не было проверено на практике, и далеко не на одной игре. И я делаю патчи под все ос обычно. Геймеры это любят

Я, кстати, не просто так упомянул оконный режим. Встречаются и такие экземпляры, которые будут плеваться и выдавать ошибки рендеринга при более высоком разрешении в полноэкранном режиме и сие решалось форсированием оконного. В DieByTheSword, например.

-----
TEST YOUR MIGHT




Ранг: 173.8 (ветеран), 208thx
Активность: 0.120.36
Статус: Участник

Создано: 05 февраля 2018 16:01
· Личное сообщение · #8

В целом unknownproject правильно все говорит. В свое время делал фиксы для widescreen формата играм нативно его не поддерживающим.
Вообще было бы проще, если бы знать о какой именно игре мы тут "рассуждаем"



Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 06 февраля 2018 23:47 · Поправил: ainuribn
· Личное сообщение · #9

Lambda,
unknownproject,
VOLKOFF,
http://multi-up.com/1186232



Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 08 февраля 2018 16:44 · Поправил: ainuribn
· Личное сообщение · #10

ELF_7719116 пишет:
или DirectX:
Code:
  1. Code:
  2. d3d9->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, m_mainWindow,
  3.                vp, &d3dpp, &m_pDevice)))
  4.  D3DDISPLAYMODE DisplayMode;
  5.             d3d9->EnumAdapterModes( D3DADAPTER_DEFAULT, D3DFMT_X8R8G8B8, iMode, &DisplayMode );
  6. ...
  7.  d3d9->Release();

Пока не нашёл подобие этого..

Скачавшие, кому-то удалось ещё найти это место?



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 08 февраля 2018 19:20
· Личное сообщение · #11

Есть Direct3DCreate9 и строка DX9DisplaySettings:
Code:
  1. .text:009FB1EE                 push    offset aDx9displaysett ; "DX9DisplaySettings"
  2. .text:009FB1F3                 push    eax 
  3. ...
  4. .text:009FB26D                 push    20h             ; SDKVersion
  5. .text:009FB26F                 call    Direct3DCreate9

а там можно ловить, какие функи вызываются в d3dx10_42 и d3dx9_42




Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 08 февраля 2018 20:23
· Личное сообщение · #12

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

Тут походу не важно что вдуть, это всё равно останется не понятным. Пожалейте мой разум

-----
vx




Ранг: -0.7 (гость), 170thx
Активность: 0.540
Статус: Участник

Создано: 08 февраля 2018 20:53
· Личное сообщение · #13

difexacaw пишет: Тут походу не важно что вдуть, это всё равно останется не понятным

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



Ранг: 1.8 (гость)
Активность: 0.010
Статус: Участник

Создано: 08 февраля 2018 22:47 · Поправил: 0xC3
· Личное сообщение · #14

КлероИндеопять после раеабилитации неадекват? ))



Ранг: 18.3 (новичок), 6thx
Активность: 0.030.02
Статус: Участник

Создано: 09 февраля 2018 05:13
· Личное сообщение · #15

0xC3, кто бы говорил. Лучше расскажи как ты кидал людей и почему ты все время пытаешься задеть Indy? =)



Ранг: 1.6 (гость)
Активность: 0.010
Статус: Участник

Создано: 09 февраля 2018 12:21
· Личное сообщение · #16

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

Всем удачи


 eXeL@B —› Вопросы новичков —› Патчинг разрешения в EXE
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати