Dies ist ein Tool, das zum Einfügen von Zeichenfolgen mithilfe von Low-Level-Code entwickelt wurde
Unsere Strategie zum Einfügen der Zeichenfolge besteht darin, mit Tools wie Stud_PE oder CFF Explorer einen neuen Abschnitt zu erstellen, um in der ausführbaren Datei Platz zum Anhängen des neuen Codes zu schaffen. Eine gemeinsame Methode besteht darin, eine ursprüngliche Anweisung zu ersetzen und zu Ihrem Code zu springen, im Allgemeinen hat ein Sprung 5 Bytes lang, manchmal müssen Sie mehr als eine Anweisung ersetzen und vergessen Sie nicht, Originalanweisungen wie CMP und TEST natürlich nach der Ausführung Ihres Codes einzufügen, falls vorhanden.
@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
Wir haben verschiedene Methoden, um den Srl.Process-Zeiger abzufangen. Diese gilt für Spiele, die über eine dynamische Hauptmodulzuordnung verfügen. Sie können das Beispiel unten verwenden. Wenn Sie den Export in die ausführbare Datei des Spiels eingefügt haben, können Sie dazu Stud_PE oder CFF Explorer verwenden Um dies zu tun, müssen Sie auch einen neuen ausführbaren Abschnitt erstellen, um unseren neuen Code anzuhängen.
Im Fall dieses Beispiels ist die Srl.Process-Adresse in der Importtabelle immer relativ zu unserem neuen ausführbaren Abschnitt.
Im Code unten bezieht sich die erfasste EIP auf den „pop EAX“ und der Srl.Process in der Importtabelle ist zum Beispiel 0x02B9C400 und der „pop EAX“ liegt bei 0x02B9E44C, also … 0x02B9E44C – 0x02B9C400 = 0x204C, wenn wir nun Subtrahieren Sie diesen Wert des EIP, erhalten Sie die Position des Srl.Prozesszeiger.
Wenn Sie das SRL zum Einfügen von Nicht-ASCII-Zeichen verwenden möchten, müssen Sie den Srl.Process aufrufen und ihm das Zeichen einer GetGlyph-Funktion übergeben.
@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
Nach einigen Problemen mit Spielen, die Strings innerhalb einer Schleife neu laden, habe ich GetDirectProcess erstellt. Um diese Funktion zu importieren, verwenden Sie dieselbe Methode wie oben bei SRL.Process. Sie werden jedoch GetProc ändern, hier ein Beispielcode:
@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
Diese Methode hat keine Parameter. Rufen Sie einfach den EAX auf und fangen Sie ihn ab. Der EAX ist ein Zeiger auf die Process-Funktion
Die SRL verfügt über eine Funktion zur automatischen Installation der SRL in der Spiel-Engine, ohne dass Sie wissen müssen, wie man das Spiel patcht.
Laden Sie zuerst die SRL HIER herunter, extrahieren Sie sie in das Spielverzeichnis und benennen Sie dann die SRLWrapper.dll in d3d9.dll um. dinput8.dll oder ein anderer unterstützter Wrapper. Sehen Sie hier, was unterstützt wird, und setzen Sie dann in der SRL.ini AutoInstall auf true.
Einige SoftPal-Spiele erfordern eine manuelle Einrichtung mit Hilfe des Auto-Installers. Klicken Sie unten, um das Beispiel zu sehen:
Mit EntisGLS AutoInstall können Sie nur die interne XML-Konfiguration der Engine ändern und damit benutzerdefinierte Schriftarten festlegen und extrahierte Dateien laden.
Fügen Sie einfach den <file path="$(CURRENT)Patch"/>
in die generierte Datei EntisGLSConfig.xml
ein und das SRL erzwingt automatisch, dass das Spiel Ihre benutzerdefinierten Einstellungen verwendet.
Hinweis: Die Priorität steht in den oberen Zeilen. Fügen Sie die Zeile oben in anderen <file/>
oder <archive/>
Blöcken ein.
Eine gemeinsame Funktion, die sich die Leute von String Reloads wünschen, ist die Font Modifier-Funktion. Diese Funktion funktioniert bei den meisten Spielen, die keine vorgerenderte Schriftart haben, und lässt sich einfach einrichten.
Laden Sie zuerst die SRL HIER herunter, extrahieren Sie sie in das Spielverzeichnis und benennen Sie dann die SRLWrapper.dll in d3d9.dll um. dinput8.dll oder ein anderer unterstützter Wrapper. Sehen Sie hier, was unterstützt wird.
Jetzt müssen Sie den CreateFont-Hook in der SRL.ini aktivieren. Wir haben 4 Varianten von CreateFont: CreateFontA, CreateFontW, CreateFontIndirectA und CreateFontIndirectW.
Normalerweise verwendet ein Spiel nur eine dieser vier Optionen. Der richtige Weg, um herauszufinden, welchen Hook Sie aktivieren müssen, besteht darin, in der ausführbaren Datei des Spiels zu suchen, ob er die Zeichenfolge „CreateFontA“, „CreateFontW“, „CreateFontIndirectA“ oder „CreateFontIndirectW“ hat... Oder, wenn Sie faul oder ein bisschen verrückt sind, können Sie einfach alles aktivieren, aber das wird nicht empfohlen.
Wenn Sie den CreateFont-Hook aktivieren, kann das SRL einige Dinge in der Schriftart des Spiels ändern, wie z. B. die Schriftgröße (funktioniert nicht mit allen Engines) und die Schriftart selbst.
Am Ende der SRL.ini finden Sie einen standardmäßigen „Beispiel“-Schriftart-Neuzuordnungseintrag, [Font.0]
. Sie können weitere Parameter zum erneuten Laden von Schriftarten hinzufügen, indem Sie einen neuen Block mit einer erhöhten Nummer im Blocknamen hinzufügen, z. B. [Font.1]
, [Font.2]
, [Font.3]
...
Im From
Parameter können Sie den zu ändernden Schriftartnamen „Origin“ festlegen, wobei * für alle Schriftarten steht.
In FromWidth
oder FromHeight
können Sie die zu ändernde Schriftart anpassen, indem Sie ihre Originalgröße angeben. (Standardmäßig kommentiert)
Im FromCharset
können Sie die zu ändernde Schriftart anpassen, indem Sie den Zeichensatz der Schriftart angeben. (Standardmäßig kommentiert)
Im Parameter „ To
können Sie den Namen Ihrer „Ziel“-Schriftart festlegen.
Im Charset
-Parameter können Sie die Verwendung des Zeichensatzes für die Schriftart erzwingen, wobei 0 = automatisch, kommentiert = nicht ändern, 932 = SJIS, weitere Werte finden Sie hier
In den Parametern Width
und Height
können Sie die Schriftgröße ändern. Die Zahlen können eine absolute oder relative Größe sein, +5
oder -1
sind relative Werte, die mit dem ursprünglichen Schriftgrößenwert berechnet werden. Die .
Das Präfix im Wert gibt an, dass der Wert ein absoluter Wert ist. Dann wird .-1
tatsächlich zu -1, unabhängig von der ursprünglichen Schriftgröße.
Die Parameter Width
und Height
können bei Bedarf noch dynamischer sein. Es ist möglich, den Wert als Ausdruck festzulegen, der während der Laufzeit ausgewertet wird, wenn Sie beispielsweise „ Width
“ auf if([Width] < 0, [Width] * -1, [Width])
festlegen. if([Width] < 0, [Width] * -1, [Width])
, dieser Ausdruck prüft, ob die Breite negativ ist, und macht sie positiv, andernfalls führt sie nichts aus.
Ausdrücke können die folgenden Parameter haben: [Width]
, [Height]
, [Charset]
, [Facename]
. Einzelheiten zur Verwendung des Ausdrucks können Sie hier überprüfen
Außerdem finden Sie im Block [StringReloads]
den Parameter LoadLocalFonts
. Wenn dieser Parameter auf „true“ gesetzt ist, ermöglicht das SRL dem Spiel, Schriftarten aus dem Spielverzeichnis (oder Unterverzeichnis) zu laden, ohne dass die Schriftart auf dem Host installiert werden muss System.