Skip to content

폴라리스 ~Polaris~

분 쟁 절 대 엄 금
2013.04.06 16:28

(제거중...)

?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부

(제거중...)

  • profile
    KoNaTa 2013.04.06 16:57
    오호 엄청난 작품들이군요 +ㅅ + 대단하심..역시
    위대하신 자본주의님을 겨를자 누구인갓!!!!
    일단 다카포만 기달리는 1人
  • ?
    굴러가는시간 2013.04.06 18:16
    닭갚어가 재밌나 봐요?
  • ?
    viorate 2013.04.06 18:55
    마도교각 폰트 문제는 현재로서는 0.3을 써야 이상하게 나오지 않습니다. 전작들과 같죠.
    후킹지점도 전작들처럼 아랄 디버깅으로 쉽게 검색됩니다.
    다만 치명적인 문제가 새로 생겼습니다.

    체험판 at코드를 찾아서 해보신 분들은 아시겠지만 에우슈리 게임 엔진이 좀 바뀌어서 다른건 다 똑같은데 이번 마도교각부터 대사 부분의 전문(전체문장) 출력이 안 됩니다.
    창각의 아테리얼까지의 에우슈리 엔진의 문장 출력은 다음과 같습니다.
    1. 요미가나가 없는 문장 : 개행없이 한번에 전문 출력. 개행은 자동개행
    2. 요미가나가 있는 문장 : 1과 같이 출력하지만 요미가나 부분에서 끊어서 출력. 그래서 요미가나가 들어가는 부분은 약간 번역이 이상해진다. 다만 끊는 부분은 개행을 하지 않음.
    여기에 마도교각부터는 하나가 추가됩니다.
    3. 모든 문장은 요미가나 여부와는 별개로 개행에 맞게 스크립트 단계에서 잘려서 출력된다. 읽기 전에 스크립트에서부터 잘려 있다.
    전문출력이 아니기 때문에 한글로 번역시 대부분의 문장이 1줄->2줄이 되어 긴 문장은 뒷부분이 잘립니다. 잘려도 읽을 수 있는 부분은 그나마 다행인데 마도교각은 상황에 따라 2행출력과 3행출력을 병행하기 때문에 2행출력 부분은 상당수의 대사가 잘리는 사태가 발생합니다.
    현재로서는 제품판도 체험판과 같을 확률이 매우 높아 보입니다.

    해결책은 몇 가지 방법이 있습니다.
    1. 커스텀 스크립트 필터로 게임 전체를 준한글화 : 개노가다지만 유효한 방법
    2. 문장 자동개행 부분을 찾아서 문장 끝에서만 실행하도록 수정 : 번역이 약간 이상한 것을 감수하면 유효한 방법. 하지만 해당 부분을 찾지 못함
    3. 스크립트 읽어오는 부분을 전문을 읽어오도록 수정 : 2보다 더한 난이도. 최선의 방법이지만 이게 가능한 분은 소수일 듯.
    4. 에그헤드 병행 : 위의 방법이 안 되면 현실적인 방법. 대사 부분만 에그헤드로 번역. 다만 사용자사전을 따로 작업해줘야 하는 불편함이 있음.
    아마 현실은 4의 방법을 쓰겠죠. 제품판에서는 전문 출력이 되면 베스트겠지만요.
  • profile
    자본주의자 2013.04.06 18:59

    오옹..... 그렇군요. AralTrans 0.3에서는 안튕기나 보네요..ㅇ.ㅇ

    개조로 그런 자질구레한 개행을 없앨수 있나 살펴보겠습니다.ㅇㅇㅋ

    ....

    egghead+ITH는 싫어서리....


    (PS. 올리 등으로 자세히 살펴보셨나요...ㅇ.ㅇ?)

    ..............................................................................

    있네요....-.-

    그냥 NOT으로 초간단암호화 되어있어서 잘 안보이는 것일 뿐, 스크립트째로 옮겨서 붙여 번역후 쪼개면 만사OK겠네요.ㅇ.ㅇ

  • ?
    viorate 2013.04.06 19:21
    올리로 보긴 했지만 제 실력으로 2나 3을 하기엔 무리인 것 같네요.
    일단 마도교각 체험판의 경우 대사 부분은 고정스택(66F040)을 사용하고 있어서 충분히 개조의 여지는 있습니다. 꼭 개행 여부의 변경만이 아니라 스크립트를 맞게 읽어올 수 있다면 스택 내용을 바꿔버리면 되니까요.
    다만 생각보다 쉽지 않은 게 스크립트가 저장된 스택 부분을 살펴보니 전작들과는 다르게 스크립트 자체가 잘려 있습니다. 이걸 알맞게 불러오기가 어렵네요. 스크립트를 읽어오는 부분은 41A9FB부터 읽는 것 같더군요.(스크립트는 문자가 비트 반전되어 있습니다.)
  • profile
    자본주의자 2013.04.06 20:30
    음..... 스크립트 포인터에 연관된 내용이 담긴 메모리를 덮었다가, 0041E1D0라는 함수를 지날때 복원해주면 될듯 하네요.ㅇ.ㅇ
    올리 상에서 수행해본 결과, 잘 됩니다.... 이를 개조식으로 구현하면 만사 OK일듯합니다.
  • profile
    KoNaTa 2013.04.06 20:43
    먼가........먼가........말이 어렵다!!!!!!!!! 이런 ㅠㅠㅠㅠㅠ
  • profile

    ..................분석 및 개조 코드 짜는데에 7시간 이나 걸렸군요.-.-;

    ..... 이걸 디버거에 넣으면 되는건가!

    ------------------------------메모장--------------------------------------

    한 라인당 길이 한계 0x32, 3라인 초과 시 튕김, 폰트 문제는 없음

    6E 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00
    2D 7E 01 00

    루비
    96 01 00 00 00 00 00 00 00 00 00 00 02 00 00 00
    33 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 00
    36 7E 01 00

    96 01 00 00 00 00 00 00 00 00 00 00 02 00 00 00
    37 7E 01 00 02 00 00 00 38 7E 01 00

    6E 00 00 0000 00 00 00 00 00 00 00 02 00 00 00
    3A 7E 01 00

    6F 00 00 00 00 00 00 00 00 00 00 00

    6E 00 00 00 00 00 00 00 00 00 00 00 02 00 00 00
    40 7E 01 00

    72 00 00 00

    func(메모리 덮어쓰기)
    {
    nop
    nop
    nop
    nop
    nop
    retn 4
    }

    func(포인터 배열 생성)
    {
    push ebx
    mov EBX, dword ptr ds:[edx]
    select(EBX)
    case 6E
    mov ebx,dword ptr ds:[EDX+0x10]
    mov dword ptr ds:[edi], eBX
    add edi, 4
    mov EAX, 5
    case 196
    mov ebx,dword ptr ds:[EDX+0x10]
    mov dword ptr ds:[edi], eBX
    add edi, 4
    mov EAX, 7
    case 6F
    mov EAX, 3
    case 72
    mov EAX, 1
    else
    mov EAX, 0
    pop ebx
    }



    0041DE60: 체크=>
    pushad
    mov ebp, esp
    cmp dword ptr ds:[00659100], 1 //첫 줄이 아닌 경우 돌아간다
    je run to hell:

    MOV ECX,DWORD PTR DS:[ESI+5D450]
    MOV EDX,ECX
    SHL EDX,4
    SUB EDX,ECX
    LEA 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, EBX
    loop()
    {
    CALL 포인터 배열 생성
    TEST EAX, EAX
    JZ run to hell:    //return to original code, if return value is zero
    cmp eax, 1
    je start:
    LEA EDX, [EDX+EAX*4]
    }
    run to hell:
    mov esp, ebp
    popad
    retn

    start:
    sub edx, ebx

    mov dword ptr [edi], 0 //포인터 배열 마지막을 00 00 00 00으로 한다.
    mov esi, 00659200
    mov edi, 00659300
    push edx
    loop()
    {
    mov eax, dword ptr ds:[esi]
    TEST EAX, EAX
    JZ collecting done:
    LEA EAX,[EAX*4+ECX]
    //반전 복사 루프
    mov dl, byte ptr ds:[eax]
    cmp dl, FF
    JE 탈출
    not dl
    mov byte ptr ds:[edi], dl
    inc eax
    inc edi
    jmp 루프맨위
    add esi, 4
    }
    collecting done:

    //이 상황에서는 00659300에 원문이 풀로 모여있게 된다. (최대 길이 0x100)
    //여기서 번역을 돌리자.
    mov eax, dword ptr ds:[00659300]
    push 00659300
    CALL 메모리 덮어쓰기 //픽스라인 이용 개행문자: %0A  (한 라인당 길이 한계 0x32, 3라인 초과 시 튕김을 주의)
    mov edx, dword ptr ds:[00659300]
    cmp eax, edx
    je 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 edx
    mov 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] //백업1
    mov edi, 00659400
    mov ecx, 18
    rep MOVS DWORD PTR [EDI], DWORD PTR [ESI]

    mov esi, mov dword ptr ds:[00659114] //백업2
    mov edi, 00659500
    mov ecx, 30
    rep MOVS DWORD PTR [EDI], DWORD PTR [ESI]

    xor ebx,ebx
    mov edi, mov dword ptr ds:[00659114]
    mov esi, 00659300

    lea edx, [edi+0xc0]


    #4 inc ebx
    xor ecx, ecx
    #3 mov al, byte ptr ds:[esi+ecx]
    test al, al
    jz #1:
    cmp al, 0a
    je #2:
    not al
    mov byte ptr ds:[edi], al
    inc ecx
    inc edi
    jmp #3
    #2 mov al, ff
    #5 mov byte ptr ds:[edi], al
    inc ecx
    inc edi
    cmp ecx, 40
    jne #5
    inc esi
    cmp ebx, 3
    je #7
    jmp #4

    #1 mov al, ff
    #6 mov byte ptr ds:[edi], al
    inc edi
    cmp edx, edi
    jne #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 ecx
    mov edx, 6e
    mov dword ptr ds:[edi], edx
    mov dword ptr ds:[edi+0x4], 0
    mov dword ptr ds:[edi+0x8], 0
    mov dword ptr ds:[edi+0xc], 2
    mov dword ptr ds:[edi+0x10], eax
    inc edx
    cmp ecx, ebx
    jne #8
    add edx, 3
    #8 mov dword ptr ds:[edi+0x14], edx
    mov dword ptr ds:[edi+0x18], 0
    mov dword ptr ds:[edi+0x1c], 0
    add edi, 20
    lea eax, [eax+0x10]
    cmp ecx, 3
    jne #9
    jmp run to hell:



    0041E1D0: 체크=>
    pushad
    mov ebp, esp
    cmp dword ptr ds:[00659100], 1 //덮어쓰지 않은 경우 그냥 간다.
    jne run to hell2:
    mov dword ptr ds:[00659100], 0

    mov edi, mov dword ptr ds:[0065910C] //복원1
    mov esi, 00659400
    mov ecx, 18
    rep MOVS DWORD PTR [EDI], DWORD PTR [ESI]

    mov edi, mov dword ptr ds:[00659114] //복원2
    mov esi, 00659500
    mov ecx, 30
    rep MOVS DWORD PTR [EDI], DWORD PTR [ESI]

    mov EAX, dword ptr ds:[00659104] //"포인터 스크립트" 의 포인터 복원
    mov EDX, dword ptr ds:[00659108]
    mov dword ptr ds:[eax], edx

    run to hell2:
    mov esp, ebp
    popad
    retn

    ------------------------------메모장 end--------------------------------------
  • ?
    nicday1234 2013.04.06 19:13
    전부 싫어하는 류라 NTR이나 능욕쪽이면 모를까.... 순애는 그다지....순애는 좋아하시는분들이
    많아서 도와주실분이 많을거라 저는 패스...
  • ?
    폭우 2013.04.06 19:50
    오오 맨위랑 아래에서 3번째는 미묘하게 rpg 필이나네요.
    아니면뭐..말고. 수고하셧습니다
  • profile
    이드도둑 2013.04.06 20:03
    음 수고 많으셔요~~
  • profile
    一片丹心마시로♡ 2013.04.06 20:11
    중요한건 5월이죠 ㅋㄷㅋㄷㅋ
  • profile
    리드맨 2013.04.07 00:38
    자폰회피기를 익히셨군요 ㅎㅎ
  • profile
    Wales 2013.04.07 01:15
    다 귀찮아...
  • ?
    굴러가는시간 2013.04.07 01:50
    그냥 안하거나
    일본어 배워서 하거나
    ith로 하거나

    아니면 라인 출력하기 전의 전문 후킹하세염

잡담게시판

공지사항을 숙지해주세요.

List of Articles
번호 제목 글쓴이 날짜
공지 아청법에 저촉되는 이미지,글을 올리지 말아주세요. 5 애로앙 2013.08.19
공지 폴라리스 통합 공지사항. -필독- 10 애로앙 2013.03.03
964 (등뒤) 우리애 옷좀 골라보았습니다. 4 반디 2015.03.20
963 (스압?) 파일 정리 전 저도 투척 한줄 콩줄 삼줄 당연하지만 짤방 최근 통 안지움+ 최근엔 움짤이 많음 그래서 중복이 많을겁니다 14 file 一片丹心마시로♡ 2013.10.19
962 (스크롤 압박 및 후방주의!) 피규어 리뷰. 6/1 그라비아 슈퍼 소니코(B&W) , c`m gutto kuro super sonico (약간의 수정) 6 반디 2013.10.09
961 (약간의 스크롤 압박) 코스프레 들 img src="http://fc02.deviantart.net/fs70/i/2013/119/b/0/mirai_nikki_yuno_gasai_cosplay_by_multipack223-d63eix6.jpg" />' target=_self> img src="http://fc09.deviantart.net/fs70/f/2013/052/c/9/mondaiji_01... 5 반디 2013.06.21
960 (유머)열도의 흔한 택시 CLrum 2013.03.30
959 (제거중...) (제거중...) 16 file 자본주의자 2013.03.17
958 (제거중...) 8 자본주의자 2013.03.04
957 (제거중...) (제거중...) 19 file 자본주의자 2013.03.07
956 (제거중...) 5 자본주의자 2013.03.03
955 (제거중...) (제거중...) 11 file 자본주의자 2013.03.09
954 (제거중...) 7 자본주의자 2013.03.18
953 (제거중...) 8 자본주의자 2013.03.28
952 (제거중...) 23 자본주의자 2013.04.11
951 (제거중...) 19 자본주의자 2013.04.29
950 (제거중...) 7 자본주의자 2013.05.02
949 (제거중...) 14 자본주의자 2013.05.06
948 (제거중...) 6 자본주의자 2013.05.31
947 (제거중...) 5 자본주의자 2013.07.11
946 (제거중...) 9 자본주의자 2013.03.19
» (제거중...) (제거중...) 15 file 자본주의자 2013.04.06
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 11 12 ... 49 Next
/ 49

Recent Articles

Recent Comment

Logged Members

modified by 애로앙 / in 2013.03