본문 바로가기

쓰기

 

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

 

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

 

올리디버거 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)부에서 계속해서 적도록 하겠습니다.

 

MILD

2008.05.18
17:00:42
드디어!! 정말 수고 많으십니다~

아르젤

2008.05.19
23:50:59

관리자님 항상 수고가 많으시네요 ^^

배고파요

2008.05.20
17:19:18

이해안되는거 열심히 읽었는데 끝이 허무하군여 ㅋㅋㅋ 수고많으시네요 ^^

은수저군

2008.06.24
23:54:42
Breakpoint ? Memory, on access  다음부터 어셈블리어가 난무.... 초보자들은 하나도 모르겠군요. orz
어쨌든 수고하십니다;;

련화

2008.07.26
20:58:31

우클릭 메뉴가 많이 다르네요;;
어려워도 한번 따라해보려고 했는데 브포가 안나와서 막히는군요 ㅠ_ㅠ

rsil

2008.09.16
22:01:44

으아.. 초보자가 건드릴게 아닌가 Breakpoint ? Memory, on access 를 클릭 이후 뭔소린지 도통..
따라해보려 했는데 답이 없네요..

?;

2008.10.04
01:20:23
초보자는 가있을게요 [...]

나나나~

2008.10.23
09:28:54
올리디버거를 켜서 파일을 열면 module '00000' has entry point outsidecode(as specfied in the PE header). maybe this file is self-extracting or self-modifying. please keep it in mind when setting breakpoints!라고 뜹니다 확인을 누르면 코드들은 뜨는데 F9를 누르면 please turn off debugger! and try again이  뜨네요 게임은 실행이 안되구요 왜이러죠?

HaruKaze

2008.12.16
16:50:04
메뉴얼 잘 보았습니다. 많은 도움이 되었습니다.

감사합니다...(_ _)

데드스페이스

2009.01.31
23:57:56
너무 어렵네요ㅜㅜ

다커

2009.04.02
00:51:55
오른쪾 클릭 메뉴가 너무 달러서... 윽 버전이 어떻게 되시길레 흑..;

류나이트

2014.10.13
14:59:57

먼저 이렇게 친절한 강좌글 올려주셔서 너무 감사하다는 인사를 올리면서 한가지 여쭙자면, 


AT디버거로는 선택지주소가 안나와서 올리디버거로 해보려는데 사진이 다 짤려서 따라하기가 너무 힘드네요, 


브레이크 포인트, 메모리 엑세스


까지는 글자만 보고 따라했는데 , 여기서 다시 그 대사를 띄운 다음


어느 창을 봐야 말씀하신 주소가 나오는건지를 모르겠네요. 혹시 짤린 사진을 다시 살릴 방법이나.


다른 따라해볼 만한 게시글을 추천해주신다면 아주 큰 도움이 될거 같네요. 


다시한번 여러가지로 감사드립니다. 

달빛가

2015.01.03
19:36:06
이미지 안나오는데 해결좀요 url도 찾을수없다는게 제 컴문제가 아닌거같은데 ;

ckdnlfyd

2015.01.11
00:05:20

이미지가 뜨는게 하나도없네 이사이트...

분쇄

2015.06.15
19:26:27

올리디버거로 코드 찾는 방법 좀 배워볼려고 무장적 따라해봤지만 결과는 실패... 슬프다. ㅠ

뉘유밍

2015.12.02
16:11:53

아!!!!!!!!!!!!!!!!! 스샷 복구 가 필요합니다 ㅠㅠ

List of Articles
공지 아랄트랜스로 게임하기 앞서 기본 셋팅 확인하기! 4 file
TwoComet
40728   2012-08-30 2014-02-26 20:12
공지 아랄트랜스 - 초보자 가이드 94 file
Hide_D
319498   2008-07-16 2015-02-27 18:02
공지 모든 플러그인, 필터 안내 ('09.03.13) 20
Hide_D
191519   2008-10-31 2009-03-13 23:48
공지 아랄트랜스 0.2 - 초보자 가이드 109 file
아랄
506001   2008-07-16 2013-12-31 09:32