Это инструмент, созданный для внедрения строк с использованием кода низкого уровня.
Наша стратегия внедрения строки заключается в создании нового раздела с использованием таких инструментов, как Stud_PE или CFF Explorer, чтобы в исполняемом файле было место для добавления нового кода. Общий метод заключается в замене исходной инструкции и переходе к вашему коду, обычно переход имеет 5 байт, иногда вам нужно заменить более одной инструкции и не забудьте разместить оригинальные инструкции, такие как CMP и TEST, после выполнения вашего кода, если они, конечно, есть.
@StrInject: ;Declare StrInject Label
push EDX ;Backup EDX, ECX, EBX Registers
push ECX
push EBX
push EAX ;The EAX is the string pointer or a unicode character
call GetProc ;Here the Srl.Process Pointer is catched
call EAX
pop EBX ;Restore EDX, ECX, EBX Registers from the "Backup"
pop ECX
pop EDX
jmp RetPnt ;Continue the Execution
У нас есть различные методы перехвата указателя Srl.Process. Этот метод предназначен для игр, которые имеют динамическое размещение основного модуля. Если вы внедрили экспорт в исполняемый файл игры, вы можете использовать Stud_PE или CFF Explorer, чтобы использовать пример ниже. сделайте это. Вам также нужно создать новый раздел исполняемого файла, чтобы добавить наш новый код.
В случае с этим примером адрес Srl.Process в таблице импорта всегда относится к нашему новому разделу исполняемого файла.
В приведенном ниже коде перехваченный EIP относится к «pop EAX», а Srl.Process в таблице импорта — это, например, 0x02B9C400, а «pop EAX» находится по адресу 0x02B9E44C, поэтому... 0x02B9E44C — 0x02B9C400 = 0x204C, теперь, если мы вычтем это значение EIP, и мы получим позицию указатель Srl.Process.
Если вы хотите использовать SRL для размещения символов, отличных от ASCII, вам нужно вызвать Srl.Process и передать ему символ функции GetGlyph.
@GetProc:
call @Nxt ;Call the label Nxt
@Nxt: ;Declare the Nxt label
pop EAX ;Catch the EIP :)
sub EAX , 0x204C ;Subtract the Difference from the EIP and Import Address
mov EAX , [ EAX ] ;Read the import table
ret
После некоторых проблем с играми, которые перезагружают строку внутри цикла, я создал GetDirectProcess. Для импорта этой функции используйте тот же метод SRL.Process, что и выше. Но вы измените GetProc, вот пример кода:
@GetProc:
call @Nxt ;Call the label Nxt
@Nxt: ;Declare the Nxt label
pop EAX ;Catch the EIP :)
cmp dword [ EAX + 0x21 ], 0 ;Verify if already have the Address
jne @Finish
push EAX ;Backup NXT Address
sub EAX , 0x2050 ;Subtract the Difference from the EIP and Import Address
mov EAX , [ EAX ] ;Read the import table
call EAX ;Calls the GetDirectProcess
pop EBX ;Recovery NXT Address
mov [ EBX + 0x21 ], EAX ;Save the Process Address
mov EAX , EBX ;Prepare to Finish
@Finish:
add EAX , 0x21 ;Ajust Pointer
mov EAX , [ EAX ] ;Read the Process Address
ret
@ Ptr :
dd 0 ;Here is the @Nxt: + 0x21
У этого метода нет параметров, просто вызовите и перехватите EAX, EAX — это указатель на функцию Process.
У SRL есть функция автоматической установки SRL в игровой движок, при этом вам не нужно знать, как исправлять игру.
Сначала загрузите SRL ЗДЕСЬ, извлеките его в каталог игры, затем переименуйте SRLWrapper.dll в d3d9.dll; dinput8.dll или любую другую поддерживаемую оболочку. См. здесь, что поддерживается, затем в SRL.ini установите для параметра AutoInstall значение true.
Некоторые игры SoftPal требуют ручной настройки с помощью автоустановщика. Нажмите ниже, чтобы увидеть пример:
Автоустановка EntisGLS позволяет изменять только внутреннюю XML-конфигурацию движка, при этом вы сможете устанавливать собственные шрифты и загружать извлеченные файлы.
Просто добавьте <file path="$(CURRENT)Patch"/>
в сгенерированный файл EntisGLSConfig.xml
, и SRL автоматически заставит игру использовать ваши пользовательские настройки.
Примечание. Приоритет находится в верхних строках, добавьте строку вверху других блоков <file/>
или <archive/>
.
Общей функцией, которую люди хотят от перезагрузки строк, является функция модификатора шрифта. Эта функция работает с большей частью игр, в которых нет предварительно отрисованного шрифта, и ее легко настроить.
Сначала загрузите SRL ЗДЕСЬ, извлеките его в каталог игры, затем переименуйте SRLWrapper.dll в d3d9.dll; dinput8.dll или любая другая поддерживаемая оболочка. См. здесь, что поддерживается.
Теперь вам нужно включить перехватчик CreateFont в SRL.ini. У нас есть 4 варианта CreateFont: CreateFontA, CreateFontW, CreateFontIndirectA и CreateFontIndirectW.
Обычно игра использует только один из этих 4 вариантов. Правильный способ узнать, какой крючок вам необходимо включить, — это найти в исполняемом файле игры строку «CreateFontA», «CreateFontW», «CreateFontIndirectA» или «CreateFontIndirectW»... Или, если вы ленивы или немного сумасшедшие, вы можете просто включить все, но это не рекомендуется.
Когда вы включите перехватчик CreateFont, SRL сможет изменить некоторые параметры игрового шрифта, например размер шрифта (работает не со всеми движками) и сам шрифт.
В конце SRL.ini вы можете найти запись переназначения шрифта «образец» по умолчанию, [Font.0]
. Вы можете добавить дополнительные параметры перезагрузки шрифта, добавив новый блок с увеличенным номером в имени блока, например [Font.1]
, [Font.2]
, [Font.3]
...
В параметре From
вы можете установить имя шрифта «origin», которое будет изменено, где * означает все шрифты.
В FromWidth
или FromHeight
вы можете подобрать изменяемый шрифт, указав его исходный размер. (По умолчанию с комментариями)
В FromCharset
вы можете сопоставить изменяемый шрифт, указав кодировку шрифта. (По умолчанию с комментариями)
В параметре To
вы можете установить название «целевого» шрифта.
В параметре Charset
вы можете принудительно использовать кодировку шрифта, где 0 = авто, комментарий = не изменять, 932 = SJIS, дополнительные значения см. здесь.
В параметрах Width
, Height
вы можете изменить размер шрифта, цифры могут быть абсолютными или относительными, +5
или -1
— относительные значения, которые рассчитываются с использованием исходного значения размера шрифта. .
префикс в значении указывает, что значение является абсолютным значением, тогда .-1
действительно станет -1 без изменения исходного размера шрифта.
Параметры Width
, Height
могут быть еще более динамичными, если хотите. Можно установить значение как выражение, которое будет оцениваться во время выполнения, например, если вы установите для Width
if([Width] < 0, [Width] * -1, [Width])
, это выражение проверит, является ли Ширина отрицательным, и сделает его положительным, в противном случае ничего не делает.
Выражения могут иметь параметры: [Width]
, [Height]
, [Charset]
, [Facename]
. Подробности использования выражения можно проверить здесь.
Также в блоке [StringReloads]
вы можете найти параметр LoadLocalFonts
, если для этого параметра установлено значение true, SRL позволит игре загружать шрифты из каталога (или подкаталога) игры без необходимости устанавливать шрифт на хосте. система.