본문 바로가기

쓰기

 

안녕하세요. 아랄 연구실장입니다.

 

오늘은 밖에 천둥번개가 치고 비가 오므로,

 

올리디버거 ATCode를 찾는 강좌를 하겠습니다.

 

오늘의 마루타가 될 게임은 내일의 너와 만나기 위해 입니다.

 

일본이 사람을 마루타로 쓴 것에 비하면, 아랄 연구실장은 양반이죠.

 

, 그럼 우선 전체적인 계획부터 간단하게 설명하겠습니다.

 

1.       게임을 실행하여 최초 대사를 몇 개 수집한다.

2.       게임을 끄고 다시 실행한다.

3.       올리 디버거로 Attach 시킨다.

4.       대사가 있는 메모리에 브레이크 포인트를 잡는다.

5.       게임은 대사를 출력하려고 메모리에 접근한다.

6.       올리디버거한테 딱 잡힌다.

 

이 방법은 간단하면서도 아주 효율적인 방법입니다.

 

위의 6가지 단계를 정확히 머릿속에 그릴 필요는 없습니다.

 

어차피 계획처럼 순조롭게 찾아질 리가 없기 때문이죠 ㅡ,.

 

우선 게임을 시작하여 대사를 수집해야 합니다.

 

걔들이 훈민정음을 모르는 것 처럼, 저 또한 일본어를 전혀 모르기 때문에

 

게임의 대사를 워드 같은 곳에 그대로 타이핑 할 수 없었습니다.

 

그래서 오하라님의 !텍스트후커를 사용하여 텍스트를 수집했습니다.


 

<첫번째 대사>

 


<
두번째 대사>

 


<
세번째 대사>

 


<
!텍스트 후커에 찍힌 문자 데이터>

 


텍스트 후커에 대사가 떴군요.

중간중간 문자가 빠지는 이유는, 게임에서 한 번 출력한 문자를 다시 출력하지 않는
캐시 때문이죠.

 

그래도 우리는 앞의 몇 부분 양호한 텍스트를 얻을 수 있었습니다.

 

이제 이것을 에디트플러스에 복사/붙여넣기 한 후 Shift-JIS 형식으로 저장합니다.




저장 시 변환기에 반드시 Japaness 를 지정해야 합니다.

 

 

, 이제 이 파일을 울트라 에디트로 열어서 16진 코드를 봅시다.

 
 


보시는 것처럼 일본어 코드는 대체로 8x xx 8x xx
이런식입니다.

 

Shift-JIS 코드표는 강좌 게시판에 올려놨으니, 더 궁금하신 분은 보고 참고하시기 바랍니다.

 

 

이제 드디어 올리디버거의 출동입니다!!

 

게임을 종료합니다.

 

그리고 올리디버거를 실행시킨 후 File ? Open 하여 게임 실행파일을 선택합니다.

 

그러면 뭔가 주룩주룩 하면서 실행파일이 분석되고, 게임은 디버깅의 수렁 속에 빠지게 됩니다.

 

준비가 되었으면 F9를 눌러 게임을 시작시킵니다.

 

게임은 시작되고, 타이틀 화면이 나옵니다.

 

아까처럼 새로 시작을 하면 똑 같은 프롤로그가 나옵니다.

 

여기서부터 중요합니다!

 

아까 수집했던 대사를 메모리에서 찾아야 합니다.

 

지금은 첫 대사가 이미 출력되어 버렸으니 다음 대사를 찾아야 겠지요.

 

<다음에 나올 대사>

 


<아까 저장한 텍스트>

 


다음 대사인 8E 76 82 A4 82 B1 을 찾아 봅시다.

 

우선 올리디버거에서 Alt+M 을 눌러봅시다.

 

그러면 현재 사용중인 메모리 조각들이 옹기종기 모여있는 걸 볼 수 있습니다.

 

보여지는 현란한 숫자와 영어들은 무시합니다.

 

그냥 우리는 맨 위의 줄을 마우스로 눌러서 선택한 뒤, Ctrl+B를 누릅니다.

 

그러면 아래와 같은 검색창이 뜨는데, 여기에 우리가 찾을 8E 76 82 A4 82 B1 를 적어줍니다.

 



OK
를 눌러 검색을 시작하면, 주르륵 훑어 가면서 저 문장을 찾기 시작합니다.

 

그러다가 딱 멈추면서 메모리 창을 하나 띄워줍니다.

 

Yes!! 우리가 찾던 바로 그 대사군요.

 

 

대사의 시작 위치부터 00 이 나올 때 까지 긁어서 선택해 줍니다.

 

참고로 00은 문장의 끝을 의미합니다.

 

그 다음 오른쪽 버튼을 눌러 메뉴를 띄운 후, Breakpoint ? Memory, on access 를 클릭해 줍니다.

 

이렇게 하면 게임은 텍스트를 출력하려고 이 메모리를 읽는 순간 브레이크포인트 덫에 걸려듭니다.

 

, 이제 게임에서 다음 대사로 넘어가기 위해 클릭을 살포시 눌러봅시다.

 

그랬더니!!

 


 

역시나 덫에 걸렸군요.

 

00434AA2 코드에서 [ESI] AL(1바이트)을 비교하려고 하고 있군요.

 

ESI에는 우리가 방금 전 찾았던 텍스트 주소, 01B73723이 들어있습니다.

 

BYTE PTR DS:[ESI] 라고 하면 01B73723 번지의 1바이트 값을 뜻하므로, 여기서는 8E가 됩니다.

 

, 바로 윗줄에서 XOR EAX, EAX를 했으니 EAX 0이 됩니다.

 

, 간단하게 말하면 첫 번째 문자가 00인가 검사하려는 찰나였습니다.

 

데이터를 바이트 단위로 검사하고

 

첫 바이트가 00이면 함수 끝자락으로 점프한다

 

냄새가 납니다. 그렇죠? 냄새

 

그렇다면 ESI는 어디서 세팅되는 걸까요?

 

434A90을 이 함수의 시작점이라 볼 때

 

PUSH ECX

PUSH EBX

PUSH ESI

 

사실 요 세 녀석들 때문에 ESP 12만큼 감소되었습니다.

 

(스택 포인터는 자료를 넣을수록 그 값이 감소합니다.)

 

함수 시작점에서는 [ESP+4] 로 얻어올 수 있는 인자였지만, 저 세 번의 푸쉬로 인해 [ESP + 10] 위치가 되었습니다.

 

그럼 실제로 434A90 함수에 브레이크 포인트를 걸고, [ESP+4] 에 텍스트가 넘어오는지 한 번 확인해 보도록 합시다.

 

그 전에 메모리 브레이크포인트를 모두 삭제하고 진행해야 합니다.

 

 


위와 같이 메모리 창에서 오른 버튼 메뉴를 띄운 후, 브레이크를 해제합니다.

 

자 그럼 F9를 눌러 게임을 다시 진행시켜 봅시다!!

 

게임에서 한 번 대사를 넘길 때마다 이 함수에도 브레이크 한 번씩 걸리는 군요.

 

최상의 조건입니다!

 

브레이크 걸렸을 때의 [ESP+4] 메모리 덤프들 입니다.

 



척 봐도 SHIFT-JIS 텍스트들이란 것을 눈으로 알 수 있습니다.

 

따라서 434A90함수 진입점에서 첫 번째 인자, [ESP+4]를 살짝 바꿔주면 번역된 텍스트가 뜨겠군요!

 

종이에 함수와 인자를 적어놓고, 게임과 올리디버거를 종료시킵니다.

 

다시 게임을 실행 시킨 후 AralTrans를 적용시킵니다.




ATCode
옵션창에서 새 후킹주소 434A90을 추가하고

 

인자는 [ESP+4]를 골라줍니다.

 


번역 방식은 메모리 바꿔치기로 하시고

 

이제 게임에 한글이 나오나 확인해 볼까요!

 

두둥~~~~!!!

 

 



!!! 이럴수가

 

번역이 안된 일본어가 보란 듯이 출현했습니다.

 

완벽한 줄 알았는데에에에~~!!!!

 

하지만 확실해 보이는 지점도 이렇게 틀릴 때가 많습니다.

 

찾을 때는 너무나 척척 들어맞고 그럴싸하던 함수가

 

 

다음편 (2)부에서 계속해서 적도록 하겠습니다.

 

List of Articles
번호 제목 글쓴이 날짜 최근 수정일 조회 수
공지 아랄트랜스로 게임하기 앞서 기본 셋팅 확인하기! [4] file TwoComet 2012-08-30 2014-02-26 20:12 40754
공지 아랄트랜스 - 초보자 가이드 [94] file Hide_D 2008-07-16 2015-02-27 18:02 319522
공지 모든 플러그인, 필터 안내 ('09.03.13) [20] Hide_D 2008-10-31 2009-03-13 23:48 191534
공지 아랄트랜스 0.2 - 초보자 가이드 [109] file 아랄 2008-07-16 2013-12-31 09:32 506021
216 AT 코드 찾는 방법 [46] file 아랄 2008-04-21 2021-01-03 13:14 270527
215 기리기리엔진에 대해 여러가지 [3] 고토회복 2012-06-25 2015-12-06 04:09 8455
214 cs2엔진 게임에서 대사창이 안나올경우 file 별초군 2015-12-03 2015-12-03 18:52 692
» [강좌] 올리디버거로 ATCode 코드를 찾아보자 (1) [16] file 아랄 2008-05-18 2015-12-02 16:11 98775
212 Sho&#6489lԀ &#1... AngeliaTolmer6414 2015-11-08 2015-11-08 01:28 378
211 게시물 분류작업 미래도 2015-09-14 2015-09-14 05:09 504
210 [VNR홈페이지]게임이름으로 게임정보 찾기 미래도 2015-09-13 2015-09-13 03:43 3700
209 사진이 깨진 글에서 사진순서 맞추기 file 미래도 2015-09-13 2015-09-13 03:08 441
208 게임 업데이트후 코드먹통될때(예제. FATAL ZERO ACTION) [2] file 두병더더 2012-08-27 2015-09-13 02:52 3156
207 나도 준한글화를 만들어보쟈 ' -' [15] 미히 2009-03-07 2015-08-30 11:00 35841
206 PhantOm:디버깅이 제한된 프로세스 디버깅하기 [1] 미래도 2015-08-23 2015-08-25 19:46 1455
205 SiglusEngine 복불복 막장드립 [5] file 두병더더 2012-08-12 2015-08-11 16:01 7903
204 ATCode 플러그인 - 설명서 [2] file 아랄 2008-04-25 2015-07-25 00:21 65477
203 [번역률향상]Ehnd+꿀도르 설치, 허니엔드 [2] 미래도 2015-04-28 2015-05-08 18:11 35662
202 오토보쿠2 아랄을 후커처럼 사용해보자. [3] file Ria- 2010-07-03 2015-04-23 01:06 6925
201 조금이라도 아랄트랜스를 빨리 쓰고 싶은 사람들을 위한 팁! [2] Hide_D 2009-12-06 2015-04-12 15:59 13196
200 피시의 엔진별 야메찾기 리스트 (11/117) - 120830 update [10] file TwoComet 2012-08-08 2015-02-24 03:31 6980
199 후크하면 아랄트랜스가 소리소문없이 사라지는 분은 [1] 키리아스 2011-01-17 2015-02-11 23:17 5253
198 코드를 찾아 여행하는 히치하이커를 위한 작은 팁 [1] 어린나무 2013-01-22 2014-09-26 16:06 7921