eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: AE, SDK (+6 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Помогите понять, где программе поменять разрешение.
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 2.8 (гость)
Статус: Участник

Создано: 3 октября 2018 14:20 · Поправил: dzikar New!
Цитата · Личное сообщение · #1

Приветствую всех. Есть исполняемый файл игры. Японская визуальная новелла. Сама игра старая, начала двухтысячных, но есть издание для xbox и PS3 в HD. Нужно ей сменить разрешение в оконном режиме с 800x600 на 1280x720. В коде нашел что отвечает за отрисовку экрана, пришлось читать про ассамблер. Всё бы хорошо, но вот откуда туда приходит размер экрана, совсем неясно. Пробовал дебажить cheat engine`ом, нашёл две переменные отвечающие за вывод содержимого окна, но там, если смотреть в radare2 или IDA, вместо значения, такое ?? . Пробовал развернуть игру в fullscreen, нашёл ещё два места где отображается изменение экрана, но они не в зелёной области вывода C.E..
Объясните мне где и что рыть. Есть подозрение что в экзешнике может какая dll зашита или ещё какой код запакован.

Ссылочка на экзешник https://yadi.sk/d/UJcJzDDwtXfv9A

Ранг: 133.4 (ветеран)
Статус: Участник

Создано: 3 октября 2018 18:36 New!
Цитата · Личное сообщение · #2

Ранг: 2.8 (гость)
Статус: Участник

Создано: 3 октября 2018 19:59 New!
Цитата · Личное сообщение · #3

VOLKOFF пишет:
--> Link <--

 Там про порт игры с Xbox.


Ранг: 587.1 (!)
Статус: Модератор
Research & Development

Создано: 3 октября 2018 22:00 New!
Цитата · Личное сообщение · #4

dzikar пишет:
начала двухтысячных

2008 - это конец 2000-х

dzikar пишет:
В коде нашел что отвечает за отрисовку экрана

Ты либо публикуй всё, что нашёл, либо топай в запросы.
Пока твой пост выглядит как "что-то нашёл, но что именно - не покажу, подскажите сами".

dzikar пишет:
Там про порт игры с Xbox.

Там явно сказано, что разрешение в файле игры захаркодено.
Скорее всего, в коде просто использовался #define

Ранг: 2.8 (гость)
Статус: Участник

Создано: 4 октября 2018 02:59 New!
Цитата · Личное сообщение · #5

Ну конец двухтысячных. Разница.

В общем, завтра после работы проверю одну гипотезу. Однако пришёл к выводу что есть три разных вида экрана. Сам экрана в разрешении 0x258 и 0x320 (при этом где хранятся переменные, неясно). Полноэкранный режим, откуда получает программа размеры, одному ассамблеру известно. Окно сообщения???, размер там тоже свой.

Кстати, разрешения игры там ещё и в скриптах много. Но на окно не влияет.

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


Ранг: 220.3 (наставник)
Статус: Участник

Создано: 4 октября 2018 03:04 New!
Цитата · Личное сообщение · #6

dzikar пишет:
Но на окно не влияет.

В direct3d в оконном режиме разрешения как такового нету, картинка подгоняется под размеры окна, в которое выводится.


Ранг: 587.1 (!)
Статус: Модератор
Research & Development

Создано: 4 октября 2018 10:17 New!
Цитата · Личное сообщение · #7

f13nd пишет:
В direct3d


Там сплошной GDI

Ранг: 11.9 (новичок)
Статус: Участник

Создано: 7 октября 2018 16:35 New!
Цитата · Личное сообщение · #8

dzikar пишет:
но они не в зелёной области вывода C.E..


Да ну...придётся искать указатель на значение,он по любому есть и будет зелёным.

dzikar пишет:
Ну мой запрос выглядит не покажите а подскажите куда и как рыть.


Попробуй подружиться с Olly Dbg,думаю что она больше расскажет тебе,чем Cheat Engine,хотя и последний крут...и без ассма не обойтись,если работаешь под отладчиком.

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


Ранг: 67.5 (постоянный)
Статус: Участник

Создано: 7 октября 2018 17:09 · Поправил: Boostyq New!
Цитата · Личное сообщение · #9

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

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


Ранг: 2.8 (гость)
Статус: Участник

Создано: 28 сентября 2019 17:14 New!
Цитата · Личное сообщение · #10

Да стану я некромантом! Стряхнув пыль с папочки на компе, продолжу искать что где уже из спортивного интереса. Поюзал я олли, после cutter сильно непривычно. В общем решил уточнить у народа, как можно обойти IsDebuggerPresent (разрешения окна, я тебя найду!). Циферку где то внутри сменил с 01 на 00, тем самым перестало вылетать сразу но ушло в бесконечный цикл (Так-то каждое обновление окна, происходит проверка на отладку). Каким то макаром в регистры EDI пробирается адрес в котором чёрным по белому пишется ollyDbg. Если адрес сместить что бы на соседа указывало, программа вешается. Что видно отличнейше.
По поводу изучения C++ меня хватает только на то что бы писать прошивки для контроллеров, но на программы сил уже нет.

PS ПОдскажите что может сдавать отладчик программе кроме IsDebuggerPresent? Или я что то упустил? Инструкция с сайта wasm.


Ранг: 220.3 (наставник)
Статус: Участник

Создано: 28 сентября 2019 17:35 New!
Цитата · Личное сообщение · #11

dzikar, такое ощущение, что ты о протектор головой бьешься, гугли ScyllaHide или TitanHide.


Ранг: 303.8 (мудрец)
Статус: Участник

Создано: 28 сентября 2019 17:45 New!
Цитата · Личное сообщение · #12

dzikar пишет:
PS ПОдскажите что может сдавать отладчик программе кроме IsDebuggerPresent?

IsDebuggerPresent()
CheckRemoteDebuggerPresent(GetCurrentProcess(), &bBeingDebugged)
NtQueryInformationProcess(GetCurrentProcess(), ProcessDebugObjectHandle, &DebugHandle, sizeof(HANDLE), NULL);
NtSetInformationThread(GetCurrentThread(), ThreadHideFromDebugger, NULL, 0);

Ранг: 2.8 (гость)
Статус: Участник

Создано: 29 сентября 2019 10:50 · Поправил: dzikar New!
Цитата · Личное сообщение · #13

Хех. Кстати да. Запакован aPLib. А внутри так безобидно выглядит. Пока поищу как распаковать.

Добавлено спустя 1 час 16 минут
Попробую описать своё затруднение в поисках высоты окна программы. Расписав шаги поиска нужного значения.
1) Первым делом я стал искать класс отвечающий за создание окна CreateWindowExA (в Cuetter искал перекрёстные ссылки). Однако все переменные отвечающие за создание окна по нулям. Есть стиль, ссылка на имя, имя класса и по мелочи. Всего создаётся два окна. Основное окно и вспомогательное, которое запускается по нажатии кнопки Esc или когда процесс хотят закрыть Alt+F4. В итоге ничего не обнаружив, полез уже к следующему классу.
2) Итак, потерпел поражение в разделе создания окна, перебрался к SetRect И обрадовался. Чуть ли не взлетая со стула, сменил значения yButtom и xRight. И о чудо, окно растянулось! Однако не без проблем. Картинке внутри окна, оказалось пофиг на мои старания и она не изменилась. Полез далее, нашёл ещё несколько мест. После одного изменения, картинка стала в полную ширину окна, но высота не изменилась, хотя параметры парами. Изменил второе, картинка появляющаяся при выходе тоже растянулась. третьем месте после долгого размышления менять ничего не стал. Там как будто для создания мелкого окна или панели для текста.
3) После всех изменений решил отладить и вот до сих пор отладку не освоил что-бы найти что я упустил или где кроется собака. Максимум до чего я шагами дошёл, создание неких файлов или папок при запуске. При этом каждый раз прыгает на место проверки дебага программы. Но там я уже по инструкции, обнаружил место где нужно сменить 01 на 00. Всё бы ничего но где-то как-то, появляется в регистрах значение адреса которое подписано как ollyDbg. Отладка работающего процесса тоже невозможна, потому что любое действие с программой, вызывает проверку дебажат ли её и только потом отклик на действие.

Ну как то так выглядит моя эпопея.

Ранг: 42.7 (посетитель)
Статус: Участник

Создано: 29 сентября 2019 13:02 New!
Цитата · Личное сообщение · #14

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

Ранг: 2.8 (гость)
Статус: Участник

Создано: 29 сентября 2019 13:21 New!
Цитата · Личное сообщение · #15

Adler пишет:
Или интересно все самому?


Как раз интересно самому. Кто-то вроде что то сделал. Уже. Но уже просто интерес взял. Что я пропустил. Был бы лучше знаком с С++ может такой загвоздки не произошло. Но я всё же больше под C#. Если бы была возможность просмотреть по шагам как создаётся окно, это было бы полезно и возможно бы не создавал тему. По факту разок у меня всё же вышло растянуть экран, но на персональном компе диск посыпался. Несколько папок превратились в мусор. Тогда я взял таймаут, плюс смена работы и подзабыл капитально. Вот сейчас и хочу добить.


Ранг: 538.4 (!)
Статус: Участник
оптимист

Создано: 29 сентября 2019 13:29 New!
Цитата · Личное сообщение · #16

dzikar пишет:
Был бы лучше знаком с С++ может такой загвоздки не произошло. Но я всё же больше под C#


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

Ранг: 2.8 (гость)
Статус: Участник

Создано: 29 сентября 2019 14:50 · Поправил: dzikar New!
Цитата · Личное сообщение · #17

ClockMan пишет:
прочитав это я сразу понял что дальше блокнота вы не продвинулись.................

О майн гот. Как вы правы. Vim такой сложный, только хватает сил на nano.

Все ловушки обошёл антиатладки. Вроде дошёл до чтения файла. Уже прогресс. И нашёл точные размер клиентской области. Даже увидел что игра параноит на антивирус.

Ранг: 42.7 (посетитель)
Статус: Участник

Создано: 29 сентября 2019 17:32 New!
Цитата · Личное сообщение · #18

dzikar пишет:
Как раз интересно самому. Кто-то вроде что то сделал. Уже.

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

Ранг: 2.8 (гость)
Статус: Участник

Создано: 29 сентября 2019 19:58 New!
Цитата · Личное сообщение · #19

Adler пишет:
dzikar пишет:
Как раз интересно самому. Кто-то вроде что то сделал. Уже.
Ну так может проще от обратного, имея заведомо рабочее решение разобраться как к этому придти?

Ну так пока превода не будет они и не выложат экзешник. А мне интересно и для другого файла более свежей версии движка знания потом перенести. На работе всё равно делать нечего до начала рабочего дня и после.

Ранг: 379.5 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 29 сентября 2019 21:07 · Поправил: ELF_7719116 New!
Цитата · Личное сообщение · #20

очередной топик из серии: перечитай 10 раз и не пойми ничего, бери отладчик и разбирайся

dzikar пишет:
800x600 на 1280x720

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

по существу:
игра накрыта каким-то самопальным китай протом (на последние версии SecuROM 8 несколько похоже с переходниками в секцию прота по WinAPI), который нормально должен анпакаться и лечится - там ничего страшного, на первый взгляд, нет. нужно быть аккуратней с crc-участков кода (software bp).
анпакается код тута:
Code:
  1. 00579F8C     | add edx,dword ptr ss:[ebp-39C]         |
  2. 00579F92     | push edx                               |
  3. 00579F93     | call chaoshead.5FDF30                  | //unpack code
  4. 00579F98     | add esp,C                              |
  5. 00579F9B     | jmp chaoshead.579ED2                   |

OEP здесь:
Code:
  1. 004B93F2     | call chaoshead.4C3260                  |
  2. 004B93F7     | jmp chaoshead.4B9212                   |

если ловить CreateWindowExA, то здесь #1:
Code:
  1. 0047489F <ch | mov edx,dword ptr ds:[56669C]          |
  2. 004748A5     | push 0                                 |
  3. 004748A7     | push edx                               |
  4. 004748A8     | push 0                                 |
  5. 004748AA     | push 0                                 |
  6. 004748AC     | push F0                                | //параметры окна по высоте
  7. 004748B1     | push 140                               | //параметры окна по ширине
  8. 004748B6     | push 0                                 |
  9. 004748B8     | push 0                                 |
  10. 004748BA     | push CA0000                            |
  11. 004748BF     | push chaoshead.56F6B0                  |
  12. 004748C4     | push chaoshead.4F9324                  | 4F9324:"NitroplusSystem2.0"
  13. 004748C9     | push 0                                 |
  14. 004748CB     | mov dword ptr ds:[56F7C0],0            |
  15. 004748D5     | call dword ptr ds:[4E026C] //jmp to  CreateWindowExA           |

уже теплее - CreateWindowExA, вызов #2:
Code:
  1. 00474984     | push 0                                         |
  2. 00474986     | push edx                                       |
  3. 00474987     | mov edx,dword ptr ss:[esp+20]                  |
  4. 0047498B     | sub edx,dword ptr ss:[esp+18]                  |
  5. 0047498F     | push 0                                         |
  6. 00474991     | push eax                                       |
  7. 00474992     | push ecx                                       |
  8. 00474993     | push edx                                       |
  9. 00474994     | push 0                                         |
  10. 00474996     | push 0                                         |
  11. 00474998     | push CA0000                                    |
  12. 0047499D     | push chaoshead.56F6B0                          | 56F6B0:"Chaos;Head"
  13. 004749A2     | push chaoshead.56F5B0                          | 56F5B0:"N2System"
  14. 004749A7     | push 0                                         |
  15. 004749A9     | mov dword ptr ds:[56F7C4],0                    |
  16. 004749B3     | call dword ptr ds:[4E026C] //jmp to  CreateWindowExA                      |

естественно последние два пасты кода выше можно увидеть только после распаковки.
дальше игрушка вылетает ... наверняка из-за отсутствия остальных файлов (send any files?). Но очевидно, что дальше идет работа DirectX 9 - либы уже подгрузились.

difexacaw пишет:
Ей нужен \system\system.ini

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


Ранг: 313.7 (мудрец)
Статус: Участник

Создано: 29 сентября 2019 21:35 New!
Цитата · Личное сообщение · #21

ELF_7719116

Ей нужен \system\system.ini
Сигнатура NPSF", а содержимое хз.

Ранг: 85.5 (постоянный)
Статус: Участник

Создано: 29 сентября 2019 21:58 New!
Цитата · Личное сообщение · #22

difexacaw пишет:
Ей нужен \system\system.ini

https://www81.zippyshare.com/v/QleaC5jo/file.html
или вся игра https://rutracker.org/forum/viewtopic.php?t=3352636


Ранг: 313.7 (мудрец)
Статус: Участник

Создано: 29 сентября 2019 23:03 New!
Цитата · Личное сообщение · #23

LinXP

Виснет, видимо нужно устанавливать.

ELF_7719116

> естественно последние два пасты кода выше можно увидеть только после распаковки.

Можно увидеть есчо проще --> Link <--

Логгер стек сохранит, останется там найти CreateWin.. и посмотреть откуда вызовы

Ранг: 2.8 (гость)
Статус: Участник

Создано: 29 сентября 2019 23:37 · Поправил: dzikar New!
Цитата · Личное сообщение · #24

LinXP пишет:
Ей нужен \system\system.ini


Я уже и забыл что там закидывал. По факту, все ресурсы игры запакованы в архивах с ключом или как то так, но для запуска достаточно system.npa nss.npa и cg.npa (три картинки из архива.) Там ничего интересного нет. Хотя там разрешение тоже местами есть. Но то когда новелла уже запущена.
Спасибо за наводку. Завтра к обеду постараюсь отписать мои похождения по коду. ЗАодно почитаю как в олли каталогизировать все шаги отладчика.


Кстати, ничего устанавливать не нужно. Только нужные архивчики и всё. https://yadi.sk/d/8hpQfYM_pT9TdQ убрал почти всё лишнее, но крупноват архивчик.

Ранг: 379.5 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 30 сентября 2019 00:05 New!
Цитата · Личное сообщение · #25

LinXP пишет:
https://www81.zippyshare.com/v/QleaC5jo/file.html

спасибо, но в моем случае оно всё равно до меню не доходит и валится где-то в kernel32 - или из-за говнистости Win10 или из-за костылей в ноут видео-боард.

difexacaw

Where to get GFlags
GFlags is included in the Debugging Tools for Windows 10 (WinDbg).

так а что, sudo apt get install GFlags, не? Микрософт еще в прошлом веке застряла - самого нужного в винде, как всегда нет

Ранг: 85.5 (постоянный)
Статус: Участник

Создано: 30 сентября 2019 00:06 · Поправил: LinXP New!
Цитата · Личное сообщение · #26

dzikarна рутрекере версия где все скрипты и ресы анпакнуты
в system.ini есть кусок отвечающий как раз за разрешение окна
[ウィンドウ]
;ウィンドウの横幅(無効)
width = 800
;ウィンドウの縦幅(無効)
height = 600
;ウィンドウのタイトル
title = CHAOS;HEAD English RC2
но 無効 - переводится переводчиком как Invalid, unavailable

попробуйте min-комплект, запускается, показывает лого и начальное меню (win7 x64)
https://www99.zippyshare.com/v/NZPPDaQG/file.html

Ранг: 2.8 (гость)
Статус: Участник

Создано: 30 сентября 2019 00:47 · Поправил: dzikar New!
Цитата · Личное сообщение · #27

LinXP пишет:
dzikarна рутрекере версия где все скрипты и ресы анпакнуты
в system.ini есть кусок отвечающий как раз за разрешение окна

но 無効 - переводится переводчиком как Invalid, unavailable

попробуйте min-комплект, запускается, показывает лого и начальное меню (win7 x64)
https://www99.zippyshare.com/v/NZPPDaQG/file.html

Переводится как "Незадействовано". Например в версии 2, движка, этими циферками можно менять разрешение.

Ранг: 2.8 (гость)
Статус: Участник

Создано: 2 октября 2019 08:51 · Поправил: dzikar New!
Цитата · Личное сообщение · #28

Подскажите, что может рисовать пнг картинку в окне? Какаята функция директа или вин апи хитро задействован? Просто Всё что смотрел, имеет правленую высоту 720. Вроде уже все функции user32.dll прошерстил и так не нашёл ничего путного. В памяти картинка цельная, без обрезок. А нет, всё же режет в момент загрузки ресурсов похоже. Деление на страницы что ли по 600 строк на картинку....

В BitBlt что то похожее есть.


Ранг: 303.8 (мудрец)
Статус: Участник

Создано: 2 октября 2019 13:52 New!
Цитата · Личное сообщение · #29

dzikar пишет:
Подскажите, что может рисовать пнг картинку в окне?

gdi+

Добавлено спустя 35 минут
Картинку рисует метод DrawImage() класса GdiPlus::Graphics

Добавлено спустя 36 минут
Хотя может там быть реализовано и на OpenGL и на DirectX

Ранг: 379.5 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 2 октября 2019 15:15 New!
Цитата · Личное сообщение · #30

dzikar пишет:
Подскажите, что может рисовать пнг картинку в окне?

Приложите, пожалуйста, скриншот окна с отрисованной картиной.
Если менять разрешение самой png картинки, что то меняется при отрисовке?
. 1 . 2 . >>
 eXeL@B —› Вопросы новичков —› Помогите понять, где программе поменять разрешение.

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS