(제거중...)
분 쟁 절 대 엄 금
2013.04.06 16:28
(제거중...)
조회 수 159 추천 수 0 댓글 15
Who's 자본주의자
-
?
닭갚어가 재밌나 봐요?
-
?
마도교각 폰트 문제는 현재로서는 0.3을 써야 이상하게 나오지 않습니다. 전작들과 같죠.
후킹지점도 전작들처럼 아랄 디버깅으로 쉽게 검색됩니다.
다만 치명적인 문제가 새로 생겼습니다.
체험판 at코드를 찾아서 해보신 분들은 아시겠지만 에우슈리 게임 엔진이 좀 바뀌어서 다른건 다 똑같은데 이번 마도교각부터 대사 부분의 전문(전체문장) 출력이 안 됩니다.
창각의 아테리얼까지의 에우슈리 엔진의 문장 출력은 다음과 같습니다.
1. 요미가나가 없는 문장 : 개행없이 한번에 전문 출력. 개행은 자동개행
2. 요미가나가 있는 문장 : 1과 같이 출력하지만 요미가나 부분에서 끊어서 출력. 그래서 요미가나가 들어가는 부분은 약간 번역이 이상해진다. 다만 끊는 부분은 개행을 하지 않음.
여기에 마도교각부터는 하나가 추가됩니다.
3. 모든 문장은 요미가나 여부와는 별개로 개행에 맞게 스크립트 단계에서 잘려서 출력된다. 읽기 전에 스크립트에서부터 잘려 있다.
전문출력이 아니기 때문에 한글로 번역시 대부분의 문장이 1줄->2줄이 되어 긴 문장은 뒷부분이 잘립니다. 잘려도 읽을 수 있는 부분은 그나마 다행인데 마도교각은 상황에 따라 2행출력과 3행출력을 병행하기 때문에 2행출력 부분은 상당수의 대사가 잘리는 사태가 발생합니다.
현재로서는 제품판도 체험판과 같을 확률이 매우 높아 보입니다.
해결책은 몇 가지 방법이 있습니다.
1. 커스텀 스크립트 필터로 게임 전체를 준한글화 : 개노가다지만 유효한 방법
2. 문장 자동개행 부분을 찾아서 문장 끝에서만 실행하도록 수정 : 번역이 약간 이상한 것을 감수하면 유효한 방법. 하지만 해당 부분을 찾지 못함
3. 스크립트 읽어오는 부분을 전문을 읽어오도록 수정 : 2보다 더한 난이도. 최선의 방법이지만 이게 가능한 분은 소수일 듯.
4. 에그헤드 병행 : 위의 방법이 안 되면 현실적인 방법. 대사 부분만 에그헤드로 번역. 다만 사용자사전을 따로 작업해줘야 하는 불편함이 있음.
아마 현실은 4의 방법을 쓰겠죠. 제품판에서는 전문 출력이 되면 베스트겠지만요. -
오옹..... 그렇군요. AralTrans 0.3에서는 안튕기나 보네요..ㅇ.ㅇ
개조로 그런 자질구레한 개행을 없앨수 있나 살펴보겠습니다.ㅇㅇㅋ
....
egghead+ITH는 싫어서리....
(PS. 올리 등으로 자세히 살펴보셨나요...ㅇ.ㅇ?)
..............................................................................
있네요....-.-
그냥 NOT으로 초간단암호화 되어있어서 잘 안보이는 것일 뿐, 스크립트째로 옮겨서 붙여 번역후 쪼개면 만사OK겠네요.ㅇ.ㅇ
-
?
올리로 보긴 했지만 제 실력으로 2나 3을 하기엔 무리인 것 같네요.
일단 마도교각 체험판의 경우 대사 부분은 고정스택(66F040)을 사용하고 있어서 충분히 개조의 여지는 있습니다. 꼭 개행 여부의 변경만이 아니라 스크립트를 맞게 읽어올 수 있다면 스택 내용을 바꿔버리면 되니까요.
다만 생각보다 쉽지 않은 게 스크립트가 저장된 스택 부분을 살펴보니 전작들과는 다르게 스크립트 자체가 잘려 있습니다. 이걸 알맞게 불러오기가 어렵네요. 스크립트를 읽어오는 부분은 41A9FB부터 읽는 것 같더군요.(스크립트는 문자가 비트 반전되어 있습니다.) -
음..... 스크립트 포인터에 연관된 내용이 담긴 메모리를 덮었다가, 0041E1D0라는 함수를 지날때 복원해주면 될듯 하네요.ㅇ.ㅇ
올리 상에서 수행해본 결과, 잘 됩니다.... 이를 개조식으로 구현하면 만사 OK일듯합니다. -
먼가........먼가........말이 어렵다!!!!!!!!! 이런 ㅠㅠㅠㅠㅠ
-
..................분석 및 개조 코드 짜는데에 7시간 이나 걸렸군요.-.-;
..... 이걸 디버거에 넣으면 되는건가!
------------------------------메모장--------------------------------------한 라인당 길이 한계 0x32, 3라인 초과 시 튕김, 폰트 문제는 없음6E 00 00 00 00 00 00 00 00 00 00 00 02 00 00 002D 7E 01 00루비96 01 00 00 00 00 00 00 00 00 00 00 02 00 00 0033 7E 01 00 02 00 00 00 34 7E 01 00아래 위6E 00 00 00 00 00 00 00 00 00 00 00 02 00 00 0036 7E 01 0096 01 00 00 00 00 00 00 00 00 00 00 02 00 00 0037 7E 01 00 02 00 00 00 38 7E 01 006E 00 00 0000 00 00 00 00 00 00 00 02 00 00 003A 7E 01 006F 00 00 00 00 00 00 00 00 00 00 006E 00 00 00 00 00 00 00 00 00 00 00 02 00 00 0040 7E 01 0072 00 00 00func(메모리 덮어쓰기){nopnopnopnopnopretn 4}func(포인터 배열 생성){push ebxmov EBX, dword ptr ds:[edx]select(EBX)case 6Emov ebx,dword ptr ds:[EDX+0x10]mov dword ptr ds:[edi], eBXadd edi, 4mov EAX, 5case 196mov ebx,dword ptr ds:[EDX+0x10]mov dword ptr ds:[edi], eBXadd edi, 4mov EAX, 7case 6Fmov EAX, 3case 72mov EAX, 1elsemov EAX, 0pop ebx}0041DE60: 체크=>pushadmov ebp, espcmp dword ptr ds:[00659100], 1 //첫 줄이 아닌 경우 돌아간다je run to hell:MOV ECX,DWORD PTR DS:[ESI+5D450]MOV EDX,ECXSHL EDX,4SUB EDX,ECXLEA ECX,[EDX*8+ESI]MOV EBX,DWORD PTR DS:[ECX+5D468] //계산된 EBX가 현재 "포인터 스크립트" 위치push ecx //[local.1]MOV ECX,DWORD PTR DS:[ECX+5D464]mov edi, 00659200 // 포인터 배열mov EDX, EBXloop(){CALL 포인터 배열 생성TEST EAX, EAXJZ run to hell: //return to original code, if return value is zerocmp eax, 1je start:LEA EDX, [EDX+EAX*4]}run to hell:mov esp, ebppopadretnstart:sub edx, ebxmov dword ptr [edi], 0 //포인터 배열 마지막을 00 00 00 00으로 한다.mov esi, 00659200mov edi, 00659300push edxloop(){mov eax, dword ptr ds:[esi]TEST EAX, EAXJZ collecting done:LEA EAX,[EAX*4+ECX]//반전 복사 루프mov dl, byte ptr ds:[eax]cmp dl, FFJE 탈출not dlmov byte ptr ds:[edi], dlinc eaxinc edijmp 루프맨위add esi, 4}collecting done://이 상황에서는 00659300에 원문이 풀로 모여있게 된다. (최대 길이 0x100)//여기서 번역을 돌리자.mov eax, dword ptr ds:[00659300]push 00659300CALL 메모리 덮어쓰기 //픽스라인 이용 개행문자: %0A (한 라인당 길이 한계 0x32, 3라인 초과 시 튕김을 주의)mov edx, dword ptr ds:[00659300]cmp eax, edxje run to hell: //번역이 안된다면 귀환mov dword ptr ds:[00659100], 1 // 스크립트 덮어쓰기 플래그 셋mov ecx, dword ptr ss:[ebp-4]lea eax, [ECX+5D468]mov dword ptr ds:[00659104], EAX // "포인터 스크립트"의 포인터 위치 저장pop edxmov dword ptr ds:[00659108], EDX // 복구할 "포인터 스크립트"의 포인터 값 저장mov dword ptr ds:[0065910C], EBX // 덮어쓰기 시작할 "포인터 스크립트" 시작 위치 저장 (백업은 00659400에 0x60 만큼)MOV ECX,DWORD PTR DS:[ECX+5D464]mov eax, dword ptr ds:[00659200]mov dword ptr ds:[00659110], EAX // "포인터 스크립트"의 시작 값 저장LEA EAX,[EAX*4+ECX]mov dword ptr ds:[00659114], EAX // 덮어쓰기 시작할 스크립트 시작 위치 저장 (백업은 00659500에 0xC0 만큼)mov esi, mov dword ptr ds:[0065910C] //백업1mov edi, 00659400mov ecx, 18rep MOVS DWORD PTR [EDI], DWORD PTR [ESI]mov esi, mov dword ptr ds:[00659114] //백업2mov edi, 00659500mov ecx, 30rep MOVS DWORD PTR [EDI], DWORD PTR [ESI]xor ebx,ebxmov edi, mov dword ptr ds:[00659114]mov esi, 00659300lea edx, [edi+0xc0]#4 inc ebxxor ecx, ecx#3 mov al, byte ptr ds:[esi+ecx]test al, aljz #1:cmp al, 0aje #2:not almov byte ptr ds:[edi], alinc ecxinc edijmp #3#2 mov al, ff#5 mov byte ptr ds:[edi], alinc ecxinc edicmp ecx, 40jne #5inc esicmp ebx, 3je #7jmp #4#1 mov al, ff#6 mov byte ptr ds:[edi], alinc edicmp edx, edijne #6#7 //mov dword ptr ds:[00659118], EBX // 덮어쓴 스크립트 줄 수 저장 (백업은 00659500에 0xC0 만큼)mov edi, mov dword ptr ds:[0065910C]mov eax, dword ptr ds:[00659110]xor ecx,ecx#9 inc ecxmov edx, 6emov dword ptr ds:[edi], edxmov dword ptr ds:[edi+0x4], 0mov dword ptr ds:[edi+0x8], 0mov dword ptr ds:[edi+0xc], 2mov dword ptr ds:[edi+0x10], eaxinc edxcmp ecx, ebxjne #8add edx, 3#8 mov dword ptr ds:[edi+0x14], edxmov dword ptr ds:[edi+0x18], 0mov dword ptr ds:[edi+0x1c], 0add edi, 20lea eax, [eax+0x10]cmp ecx, 3jne #9jmp run to hell:0041E1D0: 체크=>pushadmov ebp, espcmp dword ptr ds:[00659100], 1 //덮어쓰지 않은 경우 그냥 간다.jne run to hell2:mov dword ptr ds:[00659100], 0mov edi, mov dword ptr ds:[0065910C] //복원1mov esi, 00659400mov ecx, 18rep MOVS DWORD PTR [EDI], DWORD PTR [ESI]mov edi, mov dword ptr ds:[00659114] //복원2mov esi, 00659500mov ecx, 30rep MOVS DWORD PTR [EDI], DWORD PTR [ESI]mov EAX, dword ptr ds:[00659104] //"포인터 스크립트" 의 포인터 복원mov EDX, dword ptr ds:[00659108]mov dword ptr ds:[eax], edxrun to hell2:mov esp, ebppopadretn------------------------------메모장 end-------------------------------------- -
?
전부 싫어하는 류라 NTR이나 능욕쪽이면 모를까.... 순애는 그다지....순애는 좋아하시는분들이
많아서 도와주실분이 많을거라 저는 패스... -
?
오오 맨위랑 아래에서 3번째는 미묘하게 rpg 필이나네요.
아니면뭐..말고. 수고하셧습니다 -
음 수고 많으셔요~~
-
중요한건 5월이죠 ㅋㄷㅋㄷㅋ
-
자폰회피기를 익히셨군요 ㅎㅎ
-
다 귀찮아...
-
?
그냥 안하거나
일본어 배워서 하거나
ith로 하거나
아니면 라인 출력하기 전의 전문 후킹하세염
위대하신 자본주의님을 겨를자 누구인갓!!!!
일단 다카포만 기달리는 1人