Esta es una herramienta creada para inyectar cadenas usando código de bajo nivel.
Nuestra estrategia para inyectar la cadena es crear una nueva sección usando herramientas como Stud_PE o CFF Explorer para tener espacio en el ejecutable para agregar el nuevo código, un método común es reemplazar una instrucción original y saltar a su código, generalmente un salto tiene 5 bytes de longitud, a veces necesitas reemplazar más de una instrucción y no olvides colocar instrucciones originales como CMP y TEST después de la ejecución de tu código, por supuesto, si tienes una.
@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
Tenemos varios métodos para capturar el puntero Srl.Process, este es para juegos que tienen una asignación dinámica del módulo principal, es posible usar el ejemplo a continuación si ha inyectado la exportación en el ejecutable del juego, puede usar Stud_PE o CFF Explorer para Para hacer esto, también necesita crear una nueva sección ejecutable para agregar nuestro nuevo código.
En el caso de este ejemplo, la dirección Srl.Process en la tabla de importación siempre es relativa a nuestra nueva sección ejecutable.
En el código siguiente, el EIP capturado está en "pop EAX" y el Srl.Process en la tabla de importación es, por ejemplo, 0x02B9C400 y el "pop EAX" está en 0x02B9E44C, entonces... 0x02B9E44C - 0x02B9C400 = 0x204C, ahora si restando este valor del EIP podemos obtener la posición del Srl.Puntero de proceso.
Si desea utilizar SRL para colocar caracteres que no sean ASCII, debe llamar a Srl.Process y darle el carácter de una función 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
Después de algunos problemas con juegos que recargan cadenas dentro de un bucle, creé GetDirectProcess, para importar esta función use el mismo método de SRL.Process anterior, pero cambiará GetProc, aquí un código de ejemplo:
@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
Este método no tiene parámetros, simplemente llama y captura el EAX, el EAX es un puntero a la función Proceso
La SRL tiene una función para instalar automáticamente la SRL en el motor del juego sin que necesites saber cómo parchear el juego.
Primero, descargue el SRL AQUÍ, extráigalo al directorio del juego y luego cambie el nombre de SRLWrapper.dll a d3d9.dll; dinput8.dll o cualquier otro contenedor compatible. Vea aquí lo que se admite y luego, en SRL.ini, configure AutoInstall en verdadero.
Algunos juegos SoftPal necesitan una configuración manual con la ayuda del Autoinstalador, haga clic a continuación para ver el ejemplo:
EntisGLS AutoInstall solo le permite modificar la configuración XML del motor interno y, con eso, podrá configurar fuentes personalizadas y cargar archivos extraídos.
Simplemente agregue el <file path="$(CURRENT)Patch"/>
en el archivo EntisGLSConfig.xml
generado y SRL forzará automáticamente que el juego use su configuración personalizada.
Nota: La prioridad está en las líneas superiores, agregue la línea en la parte superior de otros bloques <file/>
o <archive/>
.
Una característica común que la gente quiere de String Reloads es la función Modificador de fuente, esta característica funciona con la mayor parte de los juegos que no tienen una fuente pre-renderizada y es fácil de configurar.
Primero, descargue el SRL AQUÍ, extráigalo al directorio del juego y luego cambie el nombre de SRLWrapper.dll a d3d9.dll; dinput8.dll o cualquier otro contenedor compatible. Consulte aquí lo que se admite.
Ahora, debe habilitar el gancho CreateFont en SRL.ini, tenemos 4 variantes de CreateFont, CreateFontA, CreateFontW, CreateFontIndirectA y CreateFontIndirectW.
Generalmente un juego usa solo una de esas 4 opciones, la forma correcta de saber qué gancho debes habilitar es buscar en el ejecutable del juego si tiene la cadena "CreateFontA", "CreateFontW", "CreateFontIndirectA" o "CreateFontIndirectW"... O, si eres vago o estás un poco loco, puedes simplemente habilitar todo, pero no es recomendable.
Cuando habilitas el gancho CreateFont, SRL podrá modificar algunas cosas en la fuente del juego, como el tamaño de fuente (no funciona con todos los motores) y la fuente misma.
Al final de SRL.ini, puede encontrar una entrada de reasignación de fuente de 'muestra' predeterminada, [Font.0]
. Puede agregar más parámetros de recarga de fuente agregando un nuevo bloque con un número incrementado en el nombre del bloque, como [Font.1]
, [Font.2]
, [Font.3]
...
En el parámetro From
puede configurar el nombre de la fuente 'origen' que se modificará, donde * significa todas las fuentes.
En FromWidth
o FromHeight
puede hacer coincidir la fuente que se va a modificar especificando su tamaño original. (Por defecto comentado)
En FromCharset
puede hacer coincidir la fuente que se va a modificar especificando el juego de caracteres de la fuente. (Por defecto comentado)
En el parámetro To
, puede establecer el nombre de la fuente 'destino'.
En el parámetro Charset
puede forzar el uso del juego de caracteres de fuente, donde 0 = auto, comentado = no modificar, 932 = SJIS, vea más valores aquí
En los parámetros Width
, Height
, puede modificar el tamaño de fuente, los números pueden ser un tamaño absoluto o relativo, +5
o -1
son valores relativos que se calculan con el valor del tamaño de fuente original. el .
El prefijo en el valor especifica que el valor es un valor absoluto, entonces .-1
realmente se convertirá en -1 independientemente del tamaño de fuente original.
Los parámetros Width
y Height
pueden ser aún más dinámicos si lo desea, es posible establecer el valor como una expresión que se evaluará durante el tiempo de ejecución, por ejemplo, si establece el Width
en if([Width] < 0, [Width] * -1, [Width])
, esta expresión verificará si el Ancho es negativo y lo hará positivo; de lo contrario, no hace nada.
Las expresiones pueden tener los parámetros: [Width]
, [Height]
, [Charset]
, [Facename]
, puede consultar los detalles del uso de la expresión aquí
Además, en el bloque [StringReloads]
, puedes encontrar el parámetro LoadLocalFonts
, con este parámetro configurado en verdadero, el SRL hará que el juego pueda cargar fuentes desde el directorio (o subdirectorio) del juego sin necesidad de instalar la fuente en el host. sistema.