낮은 수준의 코드를 사용하여 문자열을 주입하기 위해 만들어진 도구입니다.
문자열을 삽입하는 우리의 전략은 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 탐색기를 사용할 수 있습니다. 이렇게 하려면 새 코드를 추가하기 위해 새 실행 가능 섹션도 만들어야 합니다.
이 샘플의 경우 가져오기 테이블의 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 AutoInstall을 사용하면 내부 엔진 XML 구성만 수정할 수 있으며 이를 통해 사용자 정의 글꼴을 설정하고 추출된 파일을 로드할 수 있습니다.
생성된 EntisGLSConfig.xml
파일에 <file path="$(CURRENT)Patch"/>
추가하기만 하면 SRL이 자동으로 게임에서 사용자 정의 설정을 사용하도록 합니다.
참고: 우선순위는 위쪽 줄에 있습니다. 다른 <file/>
또는 <archive/>
블록의 위쪽에 줄을 추가하세요.
사람들이 String Reloads에서 원하는 일반적인 기능은 글꼴 수정자 기능입니다. 이 기능은 사전 렌더링된 글꼴이 없고 설정하기 쉬운 게임의 주요 부분에서 작동합니다.
먼저 여기에서 SRL을 다운로드하고 게임 디렉터리에 압축을 푼 다음 SRLWrapper.dll의 이름을 d3d9.dll로 바꿉니다. dinput8.dll 또는 기타 지원되는 래퍼 지원되는 내용은 여기를 참조하세요.
이제 SRL.ini에서 CreateFont 후크를 활성화해야 합니다. CreateFont에는 CreateFontA, CreateFontW, CreateFontIndirectA 및 CreateFontIndirectW의 4가지 변형이 있습니다.
일반적으로 게임은 4가지 옵션 중 하나만 사용합니다. 어떤 후크를 활성화해야 하는지 알 수 있는 올바른 방법은 "CreateFontA", "CreateFontW", "CreateFontIndirectA" 또는 "CreateFontIndirectW" 문자열이 있는 게임 실행 파일에서 찾는 것입니다. 또는 게으르거나 약간 미쳤다면 모든 것을 활성화할 수 있지만 권장되지는 않습니다.
CreateFont 후크를 활성화하면 SRL은 글꼴 크기(일부 엔진에서는 작동하지 않음) 및 글꼴 자체와 같은 게임 글꼴의 몇 가지 사항을 수정할 수 있습니다.
SRL.ini의 끝에서 기본 '샘플' 글꼴 재맵핑 항목인 [Font.0]
을 찾을 수 있습니다. [Font.1]
과 같이 블록 이름에 증가된 숫자가 있는 새 블록을 추가하여 더 많은 글꼴 재로드 매개변수를 추가할 수 있습니다. [Font.1]
, [Font.2]
, [Font.3]
...
From
매개변수에서 수정될 '원본' 글꼴 이름을 설정할 수 있습니다. 여기서 *는 모든 글꼴을 의미합니다.
FromWidth
또는 FromHeight
에서 원래 크기를 지정하여 수정할 글꼴을 일치시킬 수 있습니다. (기본적으로 주석 처리됨)
FromCharset
에서는 글꼴 문자 집합을 지정하여 수정할 글꼴을 일치시킬 수 있습니다. (기본적으로 주석 처리됨)
To
매개변수에서 '대상' 글꼴 이름을 설정할 수 있습니다.
Charset
매개변수에서 글꼴 문자 세트를 강제로 사용할 수 있습니다. 여기서 0 = 자동, 주석 처리됨 = 수정 안 함, 932 = SJIS, 여기에서 더 많은 값을 참조하세요.
Width
, Height
매개변수에서 글꼴 크기를 수정할 수 있습니다. 숫자는 절대 크기 또는 상대 크기일 수 있습니다. +5
또는 -1
은 원래 글꼴 크기 값으로 계산되는 상대 값입니다. .
값의 접두어는 값이 절대값임을 지정합니다. 그러면 .-1
실제로 원래 글꼴 크기에 관계없이 -1이 됩니다.
원하는 경우 Width
, Height
매개변수를 더욱 동적으로 설정할 수 있습니다. 예를 들어 Width
if([Width] < 0, [Width] * -1, [Width])
로 설정하면 런타임 중에 평가할 표현식으로 값을 설정할 수 있습니다. if([Width] < 0, [Width] * -1, [Width])
이 표현식은 Width가 음수인지 확인하고 양수로 만들고, 그렇지 않으면 아무 작업도 수행하지 않습니다.
표현식에는 [Width]
, [Height]
, [Charset]
, [Facename]
매개변수가 있을 수 있습니다. 여기에서 표현식 사용법에 대한 자세한 내용을 확인할 수 있습니다.
또한 [StringReloads]
블록에서 LoadLocalFonts
매개변수를 찾을 수 있습니다. 이 매개변수를 true로 설정하면 SRL은 게임이 호스트에 글꼴을 설치할 필요 없이 게임 디렉터리(또는 하위 디렉터리)에서 글꼴을 로드할 수 있게 만듭니다. 체계.