Создано: 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
Ранг: 598.8 (!) Статус: Модератор Research & Development
Создано: 3 октября 2018 22:00 New! Цитата · Личное сообщение · #4
dzikar пишет: начала двухтысячных 2008 - это конец 2000-х
dzikar пишет: В коде нашел что отвечает за отрисовку экрана Ты либо публикуй всё, что нашёл, либо топай в запросы. Пока твой пост выглядит как "что-то нашёл, но что именно - не покажу, подскажите сами".
dzikar пишет: Там про порт игры с Xbox. Там явно сказано, что разрешение в файле игры захаркодено. Скорее всего, в коде просто использовался #define
Создано: 4 октября 2018 02:59 New! Цитата · Личное сообщение · #5
Ну конец двухтысячных. Разница.
В общем, завтра после работы проверю одну гипотезу. Однако пришёл к выводу что есть три разных вида экрана. Сам экрана в разрешении 0x258 и 0x320 (при этом где хранятся переменные, неясно). Полноэкранный режим, откуда получает программа размеры, одному ассамблеру известно. Окно сообщения???, размер там тоже свой.
Кстати, разрешения игры там ещё и в скриптах много. Но на окно не влияет.
Ну мой запрос выглядит не покажите а подскажите куда и как рыть.
Создано: 4 октября 2018 03:04 New! Цитата · Личное сообщение · #6
dzikar пишет: Но на окно не влияет. В direct3d в оконном режиме разрешения как такового нету, картинка подгоняется под размеры окна, в которое выводится.
Создано: 7 октября 2018 16:35 New! Цитата · Личное сообщение · #8
dzikar пишет: но они не в зелёной области вывода C.E..
Да ну...придётся искать указатель на значение,он по любому есть и будет зелёным.
dzikar пишет: Ну мой запрос выглядит не покажите а подскажите куда и как рыть.
Попробуй подружиться с Olly Dbg,думаю что она больше расскажет тебе,чем Cheat Engine,хотя и последний крут...и без ассма не обойтись,если работаешь под отладчиком.
Создано: 7 октября 2018 17:09 · Поправил: Boostyq New! Цитата · Личное сообщение · #9
Не пытайся менять значения после создания окна, возможно ты найдешь данные какого-нибудь класса, которые в данный момент не используются/или используются для других вещей, и изменив их ты не изменишь размер окна Потому что для смены нужна процедура, в которой происходит пересоздание девайса, возможно подгрузка других текстур и т.п. Вообщем, если в коде игры такой процедуры нет и другой софт для смены разрешения d3d приложений не подоходит, то единственный вариант патчить при создании окна Но при этом могут возникать артефакты, как то растянутые текстуры или гуй может работать криво, т.е. править нужно во всех местах и до создания окна
Создано: 28 сентября 2019 17:14 New! Цитата · Личное сообщение · #10
Да стану я некромантом! Стряхнув пыль с папочки на компе, продолжу искать что где уже из спортивного интереса. Поюзал я олли, после cutter сильно непривычно. В общем решил уточнить у народа, как можно обойти IsDebuggerPresent (разрешения окна, я тебя найду!). Циферку где то внутри сменил с 01 на 00, тем самым перестало вылетать сразу но ушло в бесконечный цикл (Так-то каждое обновление окна, происходит проверка на отладку). Каким то макаром в регистры EDI пробирается адрес в котором чёрным по белому пишется ollyDbg. Если адрес сместить что бы на соседа указывало, программа вешается. Что видно отличнейше. По поводу изучения C++ меня хватает только на то что бы писать прошивки для контроллеров, но на программы сил уже нет.
PS ПОдскажите что может сдавать отладчик программе кроме IsDebuggerPresent? Или я что то упустил? Инструкция с сайта wasm.
Создано: 29 сентября 2019 10:50 · Поправил: dzikar New! Цитата · Личное сообщение · #13
Хех. Кстати да. Запакован aPLib. А внутри так безобидно выглядит. Пока поищу как распаковать.
Добавлено спустя 1 час 16 минут Попробую описать своё затруднение в поисках высоты окна программы. Расписав шаги поиска нужного значения. 1) Первым делом я стал искать класс отвечающий за создание окна CreateWindowExA (в Cuetter искал перекрёстные ссылки). Однако все переменные отвечающие за создание окна по нулям. Есть стиль, ссылка на имя, имя класса и по мелочи. Всего создаётся два окна. Основное окно и вспомогательное, которое запускается по нажатии кнопки Esc или когда процесс хотят закрыть Alt+F4. В итоге ничего не обнаружив, полез уже к следующему классу. 2) Итак, потерпел поражение в разделе создания окна, перебрался к SetRect И обрадовался. Чуть ли не взлетая со стула, сменил значения yButtom и xRight. И о чудо, окно растянулось! Однако не без проблем. Картинке внутри окна, оказалось пофиг на мои старания и она не изменилась. Полез далее, нашёл ещё несколько мест. После одного изменения, картинка стала в полную ширину окна, но высота не изменилась, хотя параметры парами. Изменил второе, картинка появляющаяся при выходе тоже растянулась. третьем месте после долгого размышления менять ничего не стал. Там как будто для создания мелкого окна или панели для текста. 3) После всех изменений решил отладить и вот до сих пор отладку не освоил что-бы найти что я упустил или где кроется собака. Максимум до чего я шагами дошёл, создание неких файлов или папок при запуске. При этом каждый раз прыгает на место проверки дебага программы. Но там я уже по инструкции, обнаружил место где нужно сменить 01 на 00. Всё бы ничего но где-то как-то, появляется в регистрах значение адреса которое подписано как ollyDbg. Отладка работающего процесса тоже невозможна, потому что любое действие с программой, вызывает проверку дебажат ли её и только потом отклик на действие.
Создано: 29 сентября 2019 13:02 New! Цитата · Личное сообщение · #14
dzikar, а не пробовали поискать готовое решение по конкретной игре? Многие тащатся от старых японских игрушек и не раз встречал целые сайты с репаками и модами. Или интересно все самому?
Создано: 29 сентября 2019 13:21 New! Цитата · Личное сообщение · #15
Adler пишет: Или интересно все самому?
Как раз интересно самому. Кто-то вроде что то сделал. Уже. Но уже просто интерес взял. Что я пропустил. Был бы лучше знаком с С++ может такой загвоздки не произошло. Но я всё же больше под C#. Если бы была возможность просмотреть по шагам как создаётся окно, это было бы полезно и возможно бы не создавал тему. По факту разок у меня всё же вышло растянуть экран, но на персональном компе диск посыпался. Несколько папок превратились в мусор. Тогда я взял таймаут, плюс смена работы и подзабыл капитально. Вот сейчас и хочу добить.
Создано: 29 сентября 2019 13:29 New! Цитата · Личное сообщение · #16
dzikar пишет: Был бы лучше знаком с С++ может такой загвоздки не произошло. Но я всё же больше под C# прочитав это я сразу понял что дальше блокнота вы не продвинулись.................
Создано: 29 сентября 2019 14:50 · Поправил: dzikar New! Цитата · Личное сообщение · #17
ClockMan пишет: прочитав это я сразу понял что дальше блокнота вы не продвинулись.................
О майн гот. Как вы правы. Vim такой сложный, только хватает сил на nano.
Все ловушки обошёл антиатладки. Вроде дошёл до чтения файла. Уже прогресс. И нашёл точные размер клиентской области. Даже увидел что игра параноит на антивирус.
Создано: 29 сентября 2019 17:32 New! Цитата · Личное сообщение · #18
dzikar пишет: Как раз интересно самому. Кто-то вроде что то сделал. Уже. Ну так может проще от обратного, имея заведомо рабочее решение разобраться как к этому придти?
Создано: 29 сентября 2019 19:58 New! Цитата · Личное сообщение · #19
Adler пишет: dzikar пишет: Как раз интересно самому. Кто-то вроде что то сделал. Уже. Ну так может проще от обратного, имея заведомо рабочее решение разобраться как к этому придти? Ну так пока превода не будет они и не выложат экзешник. А мне интересно и для другого файла более свежей версии движка знания потом перенести. На работе всё равно делать нечего до начала рабочего дня и после.
Ранг: 390.3 (мудрец) Статус: Участник "Тибериумный реверсинг"
Создано: 29 сентября 2019 21:07 · Поправил: ELF_7719116 New! Цитата · Личное сообщение · #20
очередной топик из серии: перечитай 10 раз и не пойми ничего, бери отладчик и разбирайся
dzikar пишет: 800x600 на 1280x720 уточните, пожалуйста, в какой именно момент менять? появляется окно игры - его нужно запатчить или дождаться меню игрушки и в нем поменять разрешение экрана?. два разных подхода.
по существу: игра накрыта каким-то самопальным китай протом (на последние версии SecuROM 8 несколько похоже с переходниками в секцию прота по WinAPI), который нормально должен анпакаться и лечится - там ничего страшного, на первый взгляд, нет. нужно быть аккуратней с crc-участков кода (software bp). анпакается код тута:
004749B3|calldwordptrds:[4E026C]//jmp to CreateWindowExA |
естественно последние два пасты кода выше можно увидеть только после распаковки. дальше игрушка вылетает ... наверняка из-за отсутствия остальных файлов (send any files?). Но очевидно, что дальше идет работа DirectX 9 - либы уже подгрузились.
difexacaw пишет: Ей нужен \system\system.ini ага. но для загрузки и появления на экране игрового меню (have шанс, что там разрешение тоже меняется в видео настройках, как обычно), судя по всему, потребуется больше файлов
Создано: 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
Создано: 29 сентября 2019 23:37 · Поправил: dzikar New! Цитата · Личное сообщение · #24
LinXP пишет: Ей нужен \system\system.ini
Я уже и забыл что там закидывал. По факту, все ресурсы игры запакованы в архивах с ключом или как то так, но для запуска достаточно system.npa nss.npa и cg.npa (три картинки из архива.) Там ничего интересного нет. Хотя там разрешение тоже местами есть. Но то когда новелла уже запущена. Спасибо за наводку. Завтра к обеду постараюсь отписать мои похождения по коду. ЗАодно почитаю как в олли каталогизировать все шаги отладчика.
Кстати, ничего устанавливать не нужно. Только нужные архивчики и всё. https://yadi.sk/d/8hpQfYM_pT9TdQ убрал почти всё лишнее, но крупноват архивчик.
Ранг: 390.3 (мудрец) Статус: Участник "Тибериумный реверсинг"
Создано: 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, не? Микрософт еще в прошлом веке застряла - самого нужного в винде, как всегда нет
Создано: 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
Создано: 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 октября 2019 08:51 · Поправил: dzikar New! Цитата · Личное сообщение · #28
Подскажите, что может рисовать пнг картинку в окне? Какаята функция директа или вин апи хитро задействован? Просто Всё что смотрел, имеет правленую высоту 720. Вроде уже все функции user32.dll прошерстил и так не нашёл ничего путного. В памяти картинка цельная, без обрезок. А нет, всё же режет в момент загрузки ресурсов похоже. Деление на страницы что ли по 600 строк на картинку....
Ранг: 390.3 (мудрец) Статус: Участник "Тибериумный реверсинг"
Создано: 2 октября 2019 15:15 New! Цитата · Личное сообщение · #30
dzikar пишет: Подскажите, что может рисовать пнг картинку в окне? Приложите, пожалуйста, скриншот окна с отрисованной картиной. Если менять разрешение самой png картинки, что то меняется при отрисовке?