본문 바로가기

쓰기

안녕하세요.

많은 분들이 어려워 하시는데 혹시 도움이 될 수 있을까 해서 적어요.

글재주가 없어서 많이는 적지 못해요.



시작하기에 앞서

 본 글은 응용편이므로, AT코드를 적어도 4-5회 이상 찾아본 사람이 읽어야 이해 할 수 있는 내용을 포함하구 있구요,

프로그램은 이뮤니티 디버거를 사용하였으나, 이것은 그냥 제 눈이 편해서 이므로 프로그램을 가리실 필요는 없어요.

 이 글에서는 미육의 향기를 샘플로 삼았구요, 이유는 콜스택 보면서 거슬러가기, 인자값 계산하기에 비교적 간단하면서 이해하기 쉬운 구조를 갖고 있기 때문이에요.


 여기서 다루는게 모든 게임에 적용되지는 않을 것이며, 혹은 제가 설명 도중 잘못 이해하거나 알 수 없는 횡설 수설을 할 수도 있겠지만 너그러이 이해해 주시길 바래요.

그럼 시작할께요.



1. 대사 선정

 대사 선정은 아무렇게나 해도 되지만, 자체 디버거로 대사열을 찾을 수 있을경우 자체 디버거에서 못찾는 대사를 골라 주는것이 더 유리해요. 그렇게 해서 찾는 코드가 완성도가 더 높거든요.


 저는 기존 미육의 향기에서 번역이 되지 않았던

早々と会長職も退き、今は悠々自適の生活。

를 샘플로 채택했어요.

HEX코드는 

9181 8158 82C6 89EF 92B7 9045 82E0 91DE 82AB 8141 8DA1 82CD 9749 8158 8EA9 934B 82CC 90B6 8A88 8142 




2. 멤브레이크 걸기

해상 대사를 찾아서 브레이크를 걸고 게임을 진행했어요.

대사 브레이크 건 지점을 메모해두면 좋아요.

나중에 브레이크 지점에서 레지스터 덤프를 보지 않더라도 대사값이 있는지 없는지를 한눈에 알 수 있게 되거든요.

(메모리 대사들을 대충 어디에 넣었는지 알게 됨으로서 레지스터 옆의 주소만 보고도 이게 내가 원하는값인지 아닌지 여부를 빨리 알 수 있게 된다는 이야기에요)


1.jpg


 다음 위치에서 브레이크가 걸렸어요.

 브레이크 지점을 보면 MOV AL, BYTE PTR DS:[EDX+EAX] 라고 되어있죠.

 컴퓨터를 전혀 모르는 사람을 위해, 수식으로 만들어 보면

 AL = EDX + EAX 가 되요.

 그러니까 EDX + EAX에 대사가 있어서 브레이크가 걸린 것이겠죠?

 일단은 여기까지만 생각해두기로 해요.


3. 콜스택 보기


alt+k를 누르면 콜스택 창이 열려요.


2.jpg


 Procedure / arguments 창은 현재 호출된곳 인자들이에요.

 이곳은 중요하지 않지만 그냥 설명하면, 첫째열의 Includes AI6WIN.00472036을 보면 해당 브레이크가 걸린곳은

 AI6WIN.00472036에 해당되는 곳이고 , 3줄 아래 보시면 Arg1이 보이는데 인자를 뜻해요.

 Arg1은 esp 0x4, Arg2는 esp 0x8...이런씩으로 달려요. 크게 중요하지는 않아요.



 콜스택을 연 이유는 메모리 브레이크가 걸린곳이 아랄트랜스를 붙이기 적당하지 않은 지점으로 판단했기 때문이에요.

 나중에 해보시면 알겠지만 첫 브레이크가 걸리는 지점은 접근 빈도가 너무 높거나,  글자를 다른곳으로 복사하는 중이거나, 모든 텍스트를 다루기 때문에 (게임 내부 커맨드라고 칭할께요) 아랄트랜스로 번역을 했을때 원하지 않는 값이 번역 될 확률이 대단히 높기 때문이에요.


 그럼 본 함수를 호출한 곳으로 가면 무엇이 좋아지느냐?

 빨간 사각형이 호출한 곳인데요, 472030을 호출한 4245D4지점으로 가볼께요.


3.jpg


 복잡하죠?

 근데 애석하게도 여기도 아랄 트랜스를 붙이기에는 적당해 보이지 않네요.
제일 윗라인을 찍어보니 Local calls from 004234E8, 0042350D가 보이실꺼에요.

 본 함수를 저 두군대에서 호출한다. 라는 뜻인데요.

 한단계 더 앞으로 가봐야 겠네요.

 콜스택 다음 라인에 있던 4234E8로 가볼께요.


4.jpg


 흠.. 이 이상 앞으로 가기는 무리겠네요.
 일단 위쪽에서 대사값을 입력하는걸로 의심되는 부분이 몇개 보이구요, 함수가 윗쪽으로 너무 길어서 귀찮네요 더이상은....

 여기까지만 올라가보기로 하구요.

 각각 지점에 브레이크를 걸어볼께요
 472036, 4245D4 , 4234E8
 그리고 대사를 한줄 넘기면서 각각 브레이크가 몇번씩 걸리는지 세보는거에요.


 결과는
 472036, 4245D4 ->천만번 (실은 세다가 걍 포기)
 4234E8 ->한번 (굿)

 일단 임시로 4234E8을 훅 지점으로 잡기로 해요.

 여기까지는 그다지 머리 쓸일이 없구요 문제는 이제부터에요.



4. 즐거운 계산하기

 문제는 이거에요

 EDX+EAX가 4234E8에서는 어떤값이 었을까? 라고 계산을 해주는거에요.

 아
 글쓰기 싫다 존나 이짓거리 또할라니까 짱나네여...


 볼드체로 되있는데는 콜 지점을 뜻해요.

00472030   MOV EDX,DWORD PTR DS:[ECX+10]                 =>[ECX+0X10]+[ECX+0XC]
00472033   MOV EAX,DWORD PTR DS:[ECX+C]                   =>EDX+[ECX+0XC]
00472036   MOV AL,BYTE PTR DS:[EDX+EAX]                     =>EDX+EAX
00472039   PUSH ESI
0047203A  MOV ESI,DWORD PTR SS:[ESP+8]
0047203E  ADD EDX,ESI
00472040   MOV DWORD PTR DS:[ECX+10],EDX
00472043   POP ESI
00472044   RETN 4

이제 요쪽은 계산끝났구요. 요걸 콜한 애쪽으로 가서 또 계산해야겠죠


00424570   PUSH ECX                                                                    =>[EDI+0X10]+[EDI+0XC]
00424571   PUSH ESI
00424572   CALL AI6WIN.0040C820
00424577   MOV ESI,DWORD PTR DS:[EAX+38]
0042457A  TEST ESI,ESI
0042457C   JE SHORT AI6WIN.004245E3
0042457E   MOV EAX,DWORD PTR DS:[ESI+50]
00424581   TEST EAX,EAX
00424583   JE SHORT AI6WIN.004245E3
00424585   MOV ECX,DWORD PTR DS:[ESI+54]
00424588   SUB ECX,EAX
0042458A  MOV EAX,66666667
0042458F   IMUL ECX
00424591   SAR EDX,4
00424594   MOV EAX,EDX
00424596   SHR EAX,1F
00424599   ADD EAX,EDX
0042459B   JE SHORT AI6WIN.004245E3
0042459D   CMP EAX,32
004245A0   JA SHORT AI6WIN.004245A7
004245A2   CALL AI6WIN.00485686
004245A7   MOV EAX,DWORD PTR DS:[ESI+50]
004245AA  MOV ECX,DWORD PTR DS:[EAX+7D8]
004245B0   SHR ECX,7
004245B3   AND CL,1
004245B6   JE SHORT AI6WIN.004245E3
004245B8   CALL AI6WIN.0040C820
004245BD  PUSH 100
004245C2   CALL AI6WIN.0040D760
004245C7   TEST AL,AL
004245C9   JE SHORT AI6WIN.004245E3
004245CB   MOV EDX,DWORD PTR DS:[EDI]
004245CD  MOV EAX,DWORD PTR DS:[EDX+4]
004245D0   PUSH 0
004245D2  MOV ECX,EDI                                                               =>[EDI+0X10]+[EDI+0XC]
004245D4   CALL EAX                                                                     =>[ECX+0X10]+[ECX+0XC]
004245D6   MOV ECX,DWORD PTR SS:[ESP+C]
004245DA  PUSH EAX
004245DB   MOV EAX,DWORD PTR DS:[ECX+3C]
004245DE  CALL AI6WIN.004227E0
004245E3   MOV EDX,DWORD PTR DS:[EDI]
004245E5  POP ESI
004245E6   ADD ESP,4
004245E9   MOV DWORD PTR SS:[ESP+4],1
004245F1   MOV ECX,EDI
004245F3   MOV EAX,DWORD PTR DS:[EDX+4]
004245F6  JMP EAX

 운이 좋았네요 여기는
 [EDI+0X10]+[EDI+0XC] 이후로 EDI를 건드리는곳이 보이질 않네요.
 하지만 이건 어디까지나 운이 좋았던 것이구요.

 빨간 볼드체로 해놓은 곳, 그리고 몇몇 점프 지점이 계산을 추가/추감 해줘야 할 케이스도 있어요.
 하지만 제 인내심이 다했으므로 그냥 앞쪽으로 또 넘어갈께요.


004234CD MOV EDI,DWORD PTR SS:[ESP+40]
004234D1  MOV ESI,EAX
004234D3  CALL AI6WIN.004598A0
004234D8 MOV ESI,DWORD PTR SS:[ESP+38]
004234DC MOV EDI,DWORD PTR SS:[ESP+1C]
004234E0  PUSH ESI
004234E1  MOV DWORD PTR SS:[ESP+9C],EAX
004234E8  CALL AI6WIN.00424570                                =>[EDI+0X10]+[EDI+0XC]


 위쪽으로 뭐가 존나 더 많았는데
 제 목표는 04234E8에서 EDX+EAX가 뭐였는지 알아내는 것이었으므로 여기까지 할께요.


 결국 아랄 트랜스를 붙일 곳으로

 0x004234E8 에 [EDI+0x10] + [EDI+0xC] 가 된거에요.



5. 마무리


코드를 넣고 안정성 테스트를 해봐요.
전 스킵 눌러놓고 딴걸 하곤 해요.

백로그, 선택지가 안나오면 추가로 코드를 찾아주고
나오는데 문제가 있으면 필터를 양념삼아 마무리를 해주시면 되요.

본 게임의 코드는 백로그가 중복 해석되어서 코필터를 추가 해주었어요.


최종코드:

ENCODEKOR,HOOK(0x004234E8,TRANS([EDI+0x10]+[EDI+0xC],SOW))

KoFilter{}



List of Articles
번호 제목 글쓴이 날짜 최근 수정일 조회 수sort
공지 아랄트랜스로 게임하기 앞서 기본 셋팅 확인하기! [4] file TwoComet 2012-08-30 2014-02-26 20:12 40495
공지 아랄트랜스 - 초보자 가이드 [94] file Hide_D 2008-07-16 2015-02-27 18:02 319320
공지 모든 플러그인, 필터 안내 ('09.03.13) [20] Hide_D 2008-10-31 2009-03-13 23:48 191377
공지 아랄트랜스 0.2 - 초보자 가이드 [109] file 아랄 2008-07-16 2013-12-31 09:32 505845
196 유니코드 변경법 [4] file MILD 2008-08-01 2009-02-06 14:00 60219
195 [0.3]CmdFilter로 RemoveSpace 기능을 임시로 넣기.. [2] 유피에르 2009-12-22 2009-12-23 02:02 58416
194 [강좌] TAT플러그인 사용법 1/2 [2] file my Vagina 2008-07-19 2009-01-06 00:59 53002
193 읽으면 더 헤맬지도 모를 프군의 코드 범죄강좌 (1) [13] file 프군 2009-03-16 2009-10-06 14:29 51762
192 클립보드로 복사된 내용을 ClipHooker EX! 로 깨짐 없이 보는법 [6] file Hide_D 2008-06-19 2008-12-23 17:32 50451
191 다국어도구 AppLocale 설치와 사용법 [3] file 야라토 2008-08-16 2008-08-26 23:57 48689
» AT코드 찾기 -응용편- [22] file my vagina 2009-01-25 2009-03-26 05:24 48528
189 SHIFT-JIS 코드표 [2] file 아랄 2008-05-12 2009-03-18 19:17 43635
188 아랄트랜스 강제종료에 대하여 [5] 지나가는 이 2008-08-25 2011-10-19 18:07 43324
187 息子の友達に犯されて(아들의 친구에게 범해져) 코드 적용하는 법 [2] file 암흑마제 2009-01-15 2009-01-15 15:03 42225
186 필터 강의 - Deny Word [12] file Hide_D 2009-03-18 2009-03-25 22:56 41107
185 [팁] 아랄트랜스 바로가기 파일 - 등록정보 대에서.. [1] file 아랄 2008-05-24 2008-11-11 17:34 40927
184 [강좌] TAT플러그인 사용법 2/2 [2] file my Vagina 2008-07-19 2009-01-06 00:59 40363
183 techarts社게임들을 수월하게 까는방법이라고나할까요... [7] file 막장트리 2009-03-22 2009-03-22 19:23 40344
182 [해결방안]노을빛으로 물드는 언덕 팅김 현상 해결 방안.[수정] [9] file 아스트라알 2008-11-07 2012-02-22 13:26 39582
181 [팁] 자동 업데이트 설정 방법 file 아랄 2008-04-27 2013-02-25 02:51 36150
180 나도 준한글화를 만들어보쟈 ' -' [15] 미히 2009-03-07 2015-08-30 11:00 35805
179 [번역률향상]Ehnd+꿀도르 설치, 허니엔드 [2] 미래도 2015-04-28 2015-05-08 18:11 35336
178 세이나루 카나 인스톨파일이 실행 안될때 해결방법... [1] ghba 2009-04-02 2009-04-02 17:23 35269