Перейти к содержимому

Фотография

Вскрываем визуалки


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 27

#21 dsp8195

dsp8195
  • Старожилы
  • PipPipPip
  • Отаку

  • Cообщений: 449
0
Обычный

Отправлено 16 Март 2008 - 06:26

И еще один вопрос: что представляет из себя поставляемый с бинарниками онскриптера шрифт default.ttf? Он вообще фиксированной или переменной ширины? =)

Фиксированной. И в этом главный бич nScripter'а и OnScripter'а (поэтому я и дал исходники POnScripter'а).

Вообще, хотелось бы заиметь хоть какой-нибудь мануал по командам/функциям ONScripter'а. Смог найти только перечень с кратким описанием на сайте Haeleth. Кстати, и этот перечень неплохо было бы иметь в виде CHM-файла или хотя бы HTMLок...


Держи:
  • 0

#22 Solanacean

Solanacean
  • Активные участники
  • PipPip
  • Soulless & fractured

  • Cообщений: 111
0
Обычный

Отправлено 16 Март 2008 - 09:35

Фиксированной. И в этом главный бич nScripter'а и OnScripter'а (поэтому я и дал исходники POnScripter'а).

Этот "главный бич" сильно упрощает задачу...

Пришел к неутешительному для себя выводу, что для того, чтобы полноценно хакнуть этот ужас, потребуется как минимум месяц работы. И это только для того, чтобы заставить движок понимать ASCII-строки. Код парсинга строк в NScripter'е размазан тоненьким слоем по всему движку.

В общем, этим путем я решил не идти. =) Английский текст, как и японский, будет в Shift-JIS, врезать в движок код, осуществляющий преобразование символов из Shift-JIS в ASCII перед выводом их на экран, думаю, будет несложно. Есть и другая, совершенно фантастическая по степени извращенности идея - врезать в код движка свой парсер. Английский текст будет, как ему и полагается, в ASCII, при загрузке скрипта, после его декодирования, управление получит мой парсер, который строку за строкой просмотрит весь скрипт и заменит предваренный символом '`' ASCII-текст на аналогичный текст в Shift-JIS...

Большое спасибо за списочек команд. :)

Сообщение отредактировал Serke: 16 Март 2008 - 09:38

  • 0

#23 dsp8195

dsp8195
  • Старожилы
  • PipPipPip
  • Отаку

  • Cообщений: 449
0
Обычный

Отправлено 16 Март 2008 - 11:27

Большое спасибо за списочек команд.

Ммм... в дистрибутиве nScripter'а есть и более свежий ( [url="http://www.nscripter.com/nscr.lzh" target="_blank" rel="nofollow">http://www.nscripter.com/nscr.lzh[/url] ). На японском, но это лечится Atlas'ом...

Сообщение отредактировал WinKi-тян: 16 Март 2008 - 11:30

  • 0

#24 Zakonnic

Zakonnic
  • Старожилы
  • PipPipPip
  • Какая-то морда...

  • Cообщений: 313
0
Обычный

Отправлено 18 Март 2008 - 01:53

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

Это не то случаем? ->
Спойлер
Если под автором имеется ввиду непосредственный автор программы, то ему нужно просто в функции CreateFont() использовать нужный параметр, определяющий Charset. А если вы хотите исправить уже откомпилированный файл, то нужно найти место в программе, где вызывается функция CreateFont(), и подредактировать место, где определяются параметры для этой функции. Для этого лучше использовать дизассемблер и шестнацетиричный редактор. Дело в том, что у функции CreateFont очень много параметров, и для втоматического исправления кода нужен достаточно надежный анализатор этого кода. На создание такого анализатора вы потратите уйму времени, а на анализ кода при помощи дизассемлера требуется от силы полчасика.

Итак, приступим к изучению программы.

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

2. Нужно найти библиотеки импорта. Для этого можно использовать depends.exe от microsotf. Эта программа показывает все библиотеки и импортируемые программой функции из этих библиотек (в упакованном виде весит примерно 380 Кб, могу выслать). Нас интересует библиотека GDI32.DLL и функция CreateFont().

3. Теперь о функциях API создания шрифта. Это могут быть
CreateFontA() / CreateFontW()
CreateFontIndirectA() / CreateFontIndirectW()
CreateFontIndirectExA() / CreateFontIndirectExW()
Поясню: CreateFontA() и CreateFontW() это разные реализации одной и той же функции, т.е. они выполняют одну и ту же работу, только отличаются типом параметров. CreateFontA() в качестве строкового параметра принимает ANSI строки, а CreateFontW() - строки в Юникоде. С остальными функциями - так же.
У функции CreateFont() очень много параметров-14, а все остальные принимают только указатель на структуру, в которой уже собраны все эти парамеры.С антиспаем - используется CreateFontA().

4. Теперь про CreateFontA().
BOOL CreateFont(int nHeight, // определяет высоту шрифта в логических единицах
int nWidth, // определяет ширину шрифта, (обычно равен 0,ширина по умолчанию)
int nEscapement, // наклон в десятых градуса базовой линии текста (обычно 0)
int nOrientation, // наклон в десятых градуса базовой линии символа (обычно 0)
int nWeight, // вес символа (жирность) (обычно 400)
BYTE bItalic, // курсив (обычно 0)
BYTE bUnderline, // подчеркивание (обычно 0)
BYTE cStrikeOut, // зачеркивание (обычно 0)
BYTE nCharSet, // определяет национальность шрифта (то что нам нужно)
BYTE nOutPrecision, // без комментариев (можно 0)
BYTE nClipPrecision, // без комментариев (можно 0)
BYTE nQuality, // без комментариев (можно 0)
BYTE nPitchAndFamily, // без комментариев (можно 0)
LPCTSTR lpszFacename);// название шрифра (например "Arial")

5. Нашли нужную функцию в импорте - теперь нужно найти место в программе, где она вызывается, проанализировать её парамеры, и попытаться исправить nCharSet. Здесь нужен какой либо дизассемблер. В антиспае - nCharSet равен 0, что соответсвует америке. А нам нужен RUSSIAN_CHARSET, его значение 204 или 0CCh. Как исправить? Для передачи параметров функции используется стек, первым с стек помещается последний параметр функции (lpszFacename), последним - первый (nHeight), а затем call [адрес в таблице импорта].
Трудность исправления значений параметров заключается в том, что много нулевых параметров и оптимизатор кода при компиляции программы сделал следующим образом: обнулил какой то регистр (например ebx), а затем, когда требуется записать в стек 0, выполняется команда push ebx. Эта команда занимает только один байт. Команда push 204 занимает уже два байта, и просто так ей не вставишь (нет места). Я же сделал так: nPitchAndFamily не был нулевым, и на него тратилось два байта, я его обнулил (заменил на push ebx), а освободившийся байт использовал для nCharSet. При этом все параметры между ними сместились на один байт. Это я проделал в двух местах. Для этого нужен шестнадцатиричный редактор. И все - антиспай у меня стал показывать нормальный текст.

Всего хорошего. На описание того что я сделал потребовалось больше времени, чем на сам патч.

  • 0

#25 Solanacean

Solanacean
  • Активные участники
  • PipPip
  • Soulless & fractured

  • Cообщений: 111
0
Обычный

Отправлено 19 Март 2008 - 17:31

Это не то случаем? ->
Спойлер

Какой "умник" это писал?!
  • 0

#26 Zakonnic

Zakonnic
  • Старожилы
  • PipPipPip
  • Какая-то морда...

  • Cообщений: 313
0
Обычный

Отправлено 19 Март 2008 - 21:56

Какой "умник" это писал?!

Ээээ... Не знаю ;) Это вообще левый текст, посвященный исправлению шрифта в одной левой программе. Просто было похоже на то, что требуется.

Но нет так нет. И обьяснять почему-то никто ничего не хочет...
  • 0

#27 Littm

Littm
  • Старожилы
  • PipPipPipPipPipPip
  • Я не умею менять статус

  • Cообщений: 3 539
93
Няшка

Отправлено 24 Декабрь 2008 - 01:32

Тэкс, ещё раз, но только в соответствующей теме - кто работал с RealLive ?
  • 0

#28 000

000
  • Старожилы
  • PipPipPipPipPip
  • <засекреченно>

  • Cообщений: 1 582
3
Обычный

Отправлено 12 Январь 2009 - 21:21

Может, кому пригодится: http://www.solelo.com/p4s/
набор программок для работы с разными ВН (+ исходники)
  • 0




Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных