설치 : 문자깨지던 말던 기본실행(노어플/노넬타)으로 설치 경로는 영문폴더로 지정해주자 //
실행 : 어플 or 유니코드변경 + 최초실행시 세이브폴더 위치를 뭍는데 게임설치된 폴더로 지정해주자.
WHITESOFT.zip
<추가첨부파일
첨부파일에 있는 실행파일로 실행후 아랄적용하시기바랍니다.
________________________
필터
FixLine{}
코드
ENCODEKOR,HOOK(0x004402A0,TRANS([ESP+0x4],PTRCHEAT),RETNPOS(COPY)),FORCEFONT(5),HOOK(0x0046EF10,TRANS([ESP+0xc],PTRCHEAT),RETNPOS(COPY)),HOOK(0x004BAA80,TRANS([ESP+0x8],PTRCHEAT),RETNPOS(COPY)),HOOK(0x0051C834,TRANS([ecx+0x3b4],PTRCHEAT),RETNPOS(COPY))
________________________
ITH 로 확인해보면 Lucifen 엔진이라는것 같다.
선택지빼고 대부분 GetGlypyOutlinA 함수에서 역추적하면 잡힌다.
이름 : CRT+N > lstrcpynA > 커널단에 들어가서 브포걸고 걸러낸다.
세이브로드 화면 : 아랄 자체디버거
선택지 :
//
CRT+N > lstrcpyA > 커널단에 들어가서 브포걸고 역추적한다.
//
바이너리 서치
C2 24 00 90 90 90 90 83 EC 08 53 55 56 8B F1 57
(55) 리턴아래 함수시작위치 인자 [esp+0x8]
대사
//
CRT+N > GetGlyphOutlinA > 두군데 걸리는데 브포걸고 역추적한다.
//
바이너리 서치
85 C0 0F 95 C3 8B 45 EC 80 38 00
(55) 함수시작부분 인자는 F8로 진행시켜보면 알수있다.
+ 개행후 널문자가 들어가기때문에 약간의 수정을 해줘야한다.
함수시작부분 약간 아래에 보면
MOV EAX,DWORD PTR FS:[0]
요러한 명령문이있다 저기서 콜문으로 하단으로 땡겨서 아래와 같이 널문자를 수정해주자.
0051C7FC /$ 64:A1 0000000>MOV EAX,DWORD PTR FS:[0]
0051C802 |. 60 PUSHAD
0051C803 |. 8B91 B4030000 MOV EDX,DWORD PTR DS:[ECX+3B4]
0051C809 |. 8BF2 MOV ESI,EDX
0051C80B |> 803A 00 /CMP BYTE PTR DS:[EDX],0
0051C80E |. 74 03 |JE SHORT UNMEI_GA.0051C813
0051C810 |. 42 |INC EDX
0051C811 |.^ EB F8 |JMP SHORT UNMEI_GA.0051C80B
0051C813 |> 66:813A 005B |CMP WORD PTR DS:[EDX],5B00
0051C818 |. 75 1A |JNZ SHORT UNMEI_GA.0051C834
0051C81A |. C602 0A |MOV BYTE PTR DS:[EDX],0A
0051C81D |. 42 |INC EDX
0051C81E |. 42 |INC EDX
0051C81F |. 8B02 |MOV EAX,DWORD PTR DS:[EDX]
0051C821 |> 803A 00 |/CMP BYTE PTR DS:[EDX],0
0051C824 |. 75 03 ||JNZ SHORT UNMEI_GA.0051C829
0051C826 |. C602 0A ||MOV BYTE PTR DS:[EDX],0A
0051C829 |> 42 ||INC EDX
0051C82A |. 48 ||DEC EAX
0051C82B |. 85C0 ||TEST EAX,EAX
0051C82D |.^ 75 F2 |\JNZ SHORT UNMEI_GA.0051C821
0051C82F |. 803A 00 |CMP BYTE PTR DS:[EDX],0
0051C832 |.^ 75 D7 \JNZ SHORT UNMEI_GA.0051C80B
0051C834 |> E8 08000000 CALL UNMEI_GA.0051C841
0051C839 |. 61 POPAD
0051C83A \. C3 RETN
0051C83B 90 NOP
0051C83C 90 NOP
0051C83D 90 NOP
0051C83E 90 NOP
0051C83F 90 NOP
0051C840 90 NOP
0051C841 /$ 8BB1 B4030000 MOV ESI,DWORD PTR DS:[ECX+3B4]
0051C847 |> 803E 0A /CMP BYTE PTR DS:[ESI],0A
0051C84A |. 75 03 |JNZ SHORT UNMEI_GA.0051C84F
0051C84C |. C606 00 |MOV BYTE PTR DS:[ESI],0
0051C84F |> 46 |INC ESI
0051C850 |. 803E 00 |CMP BYTE PTR DS:[ESI],0
0051C853 |.^ 75 F2 \JNZ SHORT UNMEI_GA.0051C847
0051C855 \. C3 RETN
51C803 주소와 51C841 주소에서 대사주소를 레지에 옮겨서 작업하는건데 요부분만 다른게임에서 수정해주면 될듯하다.
후킹위치는 51C834 인자는 [ECX+0X3B4] < 요부분은 아마 변동될테니 수정
//수정문내용
널문자뒤에 [ (5B) 가있을경우 개행문처리가 되는문인데
여기서 5B 뒤에 있는 HEX값이 다음대사 위치를 가르킨다. 중간의 공백을 0A로 채워넣고 번역후 0A를 다시 널문자로 만드는 수정문이다.
바이너리
64 A1 00 00 00 00 60 8B 91 B4 03 00 00 8B F2 80 3A 00 74 03 42 EB F8 66 81 3A 00 5B 75 1A C6 02
0A 42 42 8B 02 80 3A 00 75 03 C6 02 0A 42 48 85 C0 75 F2 80 3A 00 75 D7 E8 08 00 00 00 61 C3 90
90 90 90 90 90 8B B1 B4 03 00 00 80 3E 0A 75 03 C6 06 00 46 80 3E 00 75 F2 C3
일부채도값으로 01 A9 A9 A9 가 쓰이는데 A9는 한글 상위바이트에 행당하는 HEX값이라 일본어문자셋 변환체크시 한글로 인식되어버려서
채도가약간 망가지는 현상이있다. 요건 그냥 패스...