Сейчас на форуме: asfa (+6 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› Как найти байт, отвечающий за кодировку |
Посл.ответ | Сообщение |
|
Создано: 16 сентября 2013 17:01 · Поправил: strelokhalfer · Личное сообщение · #1 Привет всем! Собственно вопрос, есть один японский движок игр, предназначенный для визуальных новелл(KiriKiri). Вскрывается он легко, все лежит на виду. Но есть одно но, а именно: Заменив в скриптах все шрифты на кириллические игра продолжает использовать японский моноширинный шрифт. Я выяснил, что нужно найти и изменить байт charset и ищется он как то через CreateFontIndirectA в Ollydbg. Но вот дальше я не могу разобраться. Изначально меню на английском, проблем нет. Но как только добавить рядом файл патча patch.xp3 из папки xp3tools пункты меню становятся на русском, но из за кодировки шрифты моноширинны(несмотря на правку в скриптах) Помогите пожалуйста разобраться с принципом работы! ![]() |
|
Создано: 16 сентября 2013 21:10 · Личное сообщение · #2 |
|
Создано: 16 сентября 2013 21:37 · Поправил: LinXP · Личное сообщение · #3 ![]() что не так? ps: WinXP sp3 Simplix ps2: а тем у кого проблемы, достаточно один раз подлечить винду вручную или воспользоваться программкой ![]() |
|
Создано: 17 сентября 2013 00:51 · Поправил: ylproduction · Личное сообщение · #4 старнно, у нас все норм, а у ОПа какие-то проблемы Win xp sp2 ![]() Поиграйся с реестром так: [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage] по умолчанию "1250"="c_1250.nls" "1252"="c_1252.nls" иногда для совместимости кодировки и вообще для уменьшения гемора делают так [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage] "1250"="c_1251.nls" "1252"="c_1251.nls" проверь эти ветки и если нужно поменяй изменения вступят после перезагрузки <-------------------upd---------------------> Я понял, тебя не устраивает расстояние между буквами ![]() тогда это дело не в кодировке 100% ![]() |
|
Создано: 17 сентября 2013 09:58 · Поправил: strelokhalfer · Личное сообщение · #5 Потому что сп2, а не сп3 или выше, Не в них дело, в Zver они уже подменены И абракилом тут никак не помочь. ylproduction, а ты русификацию ставил? Проблема именно с кириллицей, английские буквы во всех японских шрифтах нормальной ширины, а русские если и есть, то в основном моноширинны (как иероглифы) Хотя я не тестировал на русской локали(На семерке только), а на японской, можно попробовать. Но если и прокатит, то только для XP, а нужно и для висты и для семерки. ![]() ![]() |
|
Создано: 17 сентября 2013 11:42 · Поправил: strelokhalfer · Личное сообщение · #6 ylproduction пишет: <-------------------upd---------------------> Я понял, тебя не устраивает расстояние между буквами тогда это дело не в кодировке 100% Именно в кодировке. Кодировка по дефолту ВСЕГДА японская. Расстояние между буквами можно менять в движке, но оно как видно на нуле.(Можно убедиться разобрав под японской локалью(ибо кракозябли вылезут) data.xp3 с помощью craas[файл защищен, поэтому xp3-extract.exe не распакует, что то с заголовком файла]{у меня этот файл есть в патче и уже распакованный в папке patch} и найдя строку ;defaultPitch = 0; в файле.) Собственно, сравнивая два exe файла от одной игры(патченый и нет) я нашел нужный байт. В хекс редакторе ищем байты Code:
Тогда в русской локали будет все нормально отображаться. Из слов авторов русификации игры, в которой я и нашел методом сравнения искомый байт, благо exe у разных игр идентичны, что байт нашелся с помощью отладчика через createfontindirecta. Вот и решил попросить умельцев, как в будущем найти этот байт в любой другой программе. Погуглив нашел только для createfonta. ![]() |
|
Создано: 17 сентября 2013 11:49 · Личное сообщение · #7 strelokhalfer как-как? головой. http://vsokovikov.narod.ru/New_MSDN_API/Fonts_text/fn_createfontindirect.htm Указатель на структуру LOGFONT: http://vsokovikov.narod.ru/New_MSDN_API/Fonts_text/str_logfont.htm Code:
lfCharSet Устанавливает набор символов. Нижеследующие значения предопределены. Просто найти где это значение заносится в структуру перед вызовом данной функции. ----- [nice coder and reverser] ![]() |
|
Создано: 17 сентября 2013 12:01 · Поправил: strelokhalfer · Личное сообщение · #8 |
|
Создано: 17 сентября 2013 12:04 · Личное сообщение · #9 |
|
Создано: 17 сентября 2013 12:30 · Личное сообщение · #10 |
|
Создано: 07 декабря 2013 23:05 · Поправил: wower · Личное сообщение · #11 Дабы не создавать новую тему пишу здесь. Как я понял, байт храниться по адресу EAX+17 То есть перед вызовом функции createfontindirect нужно где то прописать Code:
но Олька умеет только заменять, подскажите как можно ее вставить? Каждый раз менять в Ольке вручную не вариант) ![]() |
|
Создано: 08 декабря 2013 00:59 · Личное сообщение · #12 |
|
Создано: 08 декабря 2013 01:27 · Личное сообщение · #13 |
|
Создано: 08 декабря 2013 01:28 · Личное сообщение · #14 |
|
Создано: 08 декабря 2013 09:34 · Поправил: wower · Личное сообщение · #15 |
|
Создано: 08 декабря 2013 13:25 · Личное сообщение · #16 |
|
Создано: 08 декабря 2013 18:38 · Поправил: wower · Личное сообщение · #17 JKornev пишет: Делаешь JMP на свободную область Так я делал, я не могу найти место, с которого она джампает на call gdi32.createблаблабла Может заскриншотишь? UPD Попробую заменит call на джамп и в патче его вызвать, затем вернуться UPD 2 На ольке 2 не получается сохранить добавленный код, только замененный, попробую через первую сделать. ![]() |
|
Создано: 18 декабря 2013 04:07 · Личное сообщение · #18 |
![]() |
eXeL@B —› Вопросы новичков —› Как найти байт, отвечающий за кодировку |