Il s'agit d'un outil créé pour injecter des chaînes en utilisant du code de bas niveau
Notre stratégie pour injecter la chaîne consiste à créer une nouvelle section à l'aide d'outils tels que Stud_PE ou CFF Explorer pour avoir de l'espace dans l'exécutable pour ajouter le nouveau code, une méthode courante consiste à remplacer une instruction originale et à accéder à votre code, généralement un saut a 5 octets de longueur, vous devez parfois remplacer plus d'une instruction et n'oubliez pas de placer les instructions originales comme CMP et TEST après l'exécution de votre code, bien sûr, si vous en avez une.
@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
Nous avons différentes méthodes pour attraper le pointeur Srl.Process, celle-ci concerne les jeux qui ont une allocation de module principal dynamique, il est possible d'utiliser l'exemple ci-dessous si vous avez injecté l'exportation dans l'exécutable du jeu, vous pouvez utiliser Stud_PE ou CFF Explorer pour Pour ce faire, vous devez également créer une nouvelle section exécutable pour ajouter notre nouveau code.
Dans le cas de cet exemple, l'adresse Srl.Process dans la table d'importation est toujours relative à notre nouvelle section exécutable.
Dans le code ci-dessous, l'EIP capturé est au "pop EAX" et le Srl.Process dans la table d'importation est par exemple 0x02B9C400 et le "pop EAX" est à 0x02B9E44C, donc... 0x02B9E44C - 0x02B9C400 = 0x204C, maintenant si nous soustrayez cette valeur de l'EIP, nous pouvons obtenir la position du Srl.Pointeur de processus.
Si vous souhaitez utiliser le SRL pour mettre des caractères non-ASCII, vous devez appeler le Srl.Process et lui donner le caractère d'une fonction 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
Après quelques problèmes avec les jeux qui rechargent la chaîne à l'intérieur d'une boucle j'ai créé le GetDirectProcess, pour importer cette fonction utilisez la même méthode du SRL.Process ci-dessus, mais vous allez changer le GetProc, voici un exemple de code :
@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
Cette méthode n'a pas de paramètres, il suffit d'appeler et d'attraper l'EAX, l'EAX est un pointeur vers la fonction Process
Les SRL ont une fonctionnalité permettant d'installer automatiquement les SRL dans le moteur de jeu sans que vous ayez besoin de savoir comment patcher le jeu.
Tout d'abord, téléchargez le SRL ICI, extrayez-le dans le répertoire du jeu, puis renommez le SRLWrapper.dll en d3d9.dll ; dinput8.dll ou tout autre wrapper pris en charge. Voir ici ce qui est pris en charge, puis dans le fichier SRL.ini, définissez AutoInstall sur true.
Certains jeux SoftPal nécessitent une configuration manuelle à l'aide de l'auto-installateur, cliquez ci-dessous pour voir l'exemple :
L'installation automatique d'EntisGLS vous permet uniquement de modifier la configuration XML du moteur interne, et avec cela, vous pourrez définir des polices personnalisées et charger les fichiers extraits.
Ajoutez simplement le <file path="$(CURRENT)Patch"/>
dans le fichier EntisGLSConfig.xml
généré et le SRL forcera automatiquement le jeu à utiliser vos paramètres personnalisés.
Remarque : Les priorités sont dans les lignes supérieures, ajoutez la ligne en haut des autres blocs <file/>
ou <archive/>
.
Une fonctionnalité commune que les gens attendent des rechargements de chaînes est la fonction de modification de police. Cette fonctionnalité fonctionne avec la plupart des jeux qui n'ont pas de police pré-rendue et est facile à configurer.
Tout d'abord, téléchargez le SRL ICI, extrayez-le dans le répertoire du jeu, puis renommez le SRLWrapper.dll en d3d9.dll ; dinput8.dll ou tout autre wrapper pris en charge. Voir ici ce qui est pris en charge.
Maintenant, vous devez activer le hook CreateFont dans le SRL.ini, nous avons 4 variantes de CreateFont, CreateFontA, CreateFontW, CreateFontIndirectA et CreateFontIndirectW.
Habituellement, un jeu n'utilise qu'une seule de ces 4 options, la bonne façon de savoir quel hook vous devez activer est de trouver dans l'exécutable du jeu s'il a la chaîne "CreateFontA", "CreateFontW", "CreateFontIndirectA" ou "CreateFontIndirectW"... Ou, si vous êtes paresseux ou un peu fou, vous pouvez simplement tout activer, mais ce n'est pas recommandé.
Lorsque vous activez le hook CreateFont, la SRL pourra modifier quelques éléments dans la police du jeu, comme la taille de la police (ne fonctionne pas avec tous les moteurs) et la police elle-même.
À la fin du fichier SRL.ini, vous pouvez trouver un "exemple" d'entrée de remappage de police par défaut, le [Font.0]
, vous pouvez ajouter plus de paramètres de rechargement de police en ajoutant un nouveau bloc avec un numéro incrémenté dans le nom du bloc, comme [Font.1]
, [Font.2]
, [Font.3]
...
Dans le paramètre From
, vous pouvez définir le nom de la police « origine » à modifier, où * signifie toutes les polices.
Dans FromWidth
ou FromHeight
vous pouvez faire correspondre la police à modifier en spécifiant sa taille d'origine. (Par défaut commenté)
Dans FromCharset
vous pouvez faire correspondre la police à modifier en spécifiant le jeu de caractères de la police. (Par défaut commenté)
Dans le paramètre To
, vous pouvez définir le nom de votre police « cible ».
Dans le paramètre Charset
, vous pouvez forcer l'utilisation du jeu de caractères de la police, où 0 = auto, commenté = ne pas modifier, 932 = SJIS, voir plus de valeurs ici
Dans les paramètres Width
, Height
, vous pouvez modifier la taille de la police, les nombres peuvent être une taille absolue ou relative, +5
ou -1
sont des valeurs relatives qui sont calculées avec la valeur de taille de police d'origine. le .
le préfixe dans la valeur spécifie que la valeur est une valeur absolue, alors .-1
deviendra réellement -1 sans tenir compte de la taille de police d'origine.
Les paramètres Width
, Height
peuvent être encore plus dynamiques si vous le souhaitez, il est possible de définir la valeur comme expression à évaluer pendant l'exécution, par exemple, si vous définissez la Width
sur if([Width] < 0, [Width] * -1, [Width])
, cette expression vérifiera si la largeur est négative, et la rendra positive, sinon, ne fera rien.
Les expressions peuvent avoir les paramètres : [Width]
, [Height]
, [Charset]
, [Facename]
, vous pouvez vérifier les détails de l'utilisation de l'expression ici
De plus, dans le bloc [StringReloads]
, vous pouvez trouver le paramètre LoadLocalFonts
, avec ce paramètre défini sur true, le SRL permettra au jeu de charger des polices depuis le répertoire (ou sous-répertoire) du jeu sans avoir besoin d'installer la police dans l'hôte. système.