본문 바로가기

쓰기

 

안녕하세요.

 

요즘 들어 일본이 또 독도를 못살게 구는군요.

 

인터넷 상에서도 오래 전부터 독도는 일본땅 이라는 허위 정보를 장기간에 걸쳐 조금씩 조금씩

 

퍼뜨렸다고 합니다.

 

기회만 엿보며 야금야금 남의 땅 뺏어가려는 저 피곤한 소인배들을 어찌해야 한단 말입니까.

 

모든 일본게임에 훈민정음을 박아 주는 그날까지.



 

앞서 강의한 자료에 이어 계속 이어지는 AT코드 찾기 강좌입니다.

 

1편에선 실패했지만

 

이번엔 성공하니까 스크롤 끝까지 내리셔서 확인하실 필요 없습니다. (퍽퍽~!!ㅜㅜ)

 

1편에서 우리는 비록 실패했지만 다음과 같은 과정을 숙지하였습니다.

 


대사 수집
? 다음에 나올 대사의 메모리에 브레이크포인트 ? 브레이크 걸림!


 

왜 실패했나 곰곰히 생각해 보도록 하죠.

 

사실 이유랄건 없습니다.

 

당연히 먹혀야 할 방법인데 안먹힌 것 뿐이고, 우리는 계속해서 찾아나가면 됩니다.

 

앞서 발견한 함수가 대사에 접근하는 것은 맞는데, 출력하는 함수는 아닌가 봅니다.

 

하지만 대사가 있는 메모리는 이곳 하나뿐이기 때문에 어떻게든 화면에 대사를 출력하려면 대사 메모리에 접근해야 할 것입니다.

 

그러면 우리는 2가지 가정을 세울 수 있습니다.

 

1. 진짜 대사 출력 함수가 이 메모리에 다시 접근할 것이다.

 

2. 앞서 찾은 함수는 비록 출력함수는 아니었지만, 대사를 또 다른 메모리 어딘가에 복사하는 함수였다. 따라서 대사 출력 함수는 그 새로운 메모리에 접근 할 것이다.

 

여기서 후자의 경우는 생각하면 복잡해지니, 긍정적인 사고로 1번의 경우라 생각하고 진행합시다.

 

 

강좌 1편과 똑같이 올리디버거로 게임을 시작시킵시다.

 

그리고 게임이 시작되면 새 게임을 선택하여 첫 대사를 출력시킵니다.

 


강좌 1편과 같이 올리디버거로 Alt+M을 눌러 메모리 상태창으로 이동한 뒤, Ctrl+B로 다음의 대사를 찾도록 합시다.

 

아래는 강좌 1편에서 수집한 대사죠.

 

저장해 두셨으리라 믿습니다

 

안 해두셨다면 어쩔 수 없고요 ㅡ,.;;;

 

<두 번째 대사>



<
두 번째 대사의 처음 세 글자의 바이너리 값>

 


자 그럼 8E 76 82 A4 82 B1 을 찾읍시당.

 


 

바이너리 데이터를 입력하시고

 

OK를 누르시면 04B0B763 이란 메모리가 검색되었네요.

 


 
 

찾아진 메모리에 브레이크 포인트를 설정합시다.

 

혹시나 이 대사를 저장하고 있는 메모리가 더 존재하는지 확인하기 위하여, Memory Map 창에서 Ctrl+L 을 눌러 봅시다.

 

그럼 나머지 부분들을 주루룩 찾아 내려 가다가 Item not found 라고 찍히며, 창 하단에 노란색이 잠시 깜빡입니다.

 

, 이곳 외에 대사가 저장된 메모리는 존재하지 않는다는 확실한 증거죠.

 

그럼 안심하고 게임에서 다음 대사로 넘어가기 위해 클릭을 한번 해줍시다.

 

브레이크 포인트가 걸렸습니다.

 


 

앞서 1편에서 찾은 그 함수입니다.

 

별로 반갑지 않은 친구네요.

 

우리는 이 함수가 대사 출력과는 상관이 없다는 것을 1편을 통해 뼈저리게(?) 깨닳았습니다.

 

혹시 이런 질문을 하실 수도 있습니다.

 

이 함수가 직접적으로 대사를 출력하진 않지만, 여기서 다른 함수를 호출하여 거기서 대사를 출력할 수도 있는거 아닌가요?

 

, 좋은 질문입니다.

 

답은 거의 그럴 확률은 1% 미만입니다 .

 

우리는 1편에서 함수 진입점을 후킹했습니다.

 

왜 스택의 감소값까지 역추적해가며 굳이 진입점을 후킹하려 했을까요?

 

함수는 보통 아래와 같이 생겼죠.




콩 심은데 콩 나고, 팥 심은데 팥 난다는 말이 있죠.

 

콩 심는 순간 팥으로 바꿔치기 했는데 함수 중간에 콩 꽃이 피어 올라올 리 없다는 거죠.

 

물론 괴짜 프로그래머나 조잡한 컴파일러를 사용한 경우라면 예외가 있을 수 있겠지만, 이 정도 상용 게임을 출시할 만한 회사가 그런 프로그래머나 컴파일러를 쓸 리 없죠.

 

그리고 함수 진입 시의 인자 조작은 프로그램 흐름상으로도 부작용이 적습니다.

 

함수 중간에 포인터를 바꿔치기 하면, 어떤 재앙이 닥칠지 모릅니다.
 

, 다시 처음의 가정을 다시 상기시켜 봅시다.
 

이 함수가 끝나서 리턴 된 후, 어떤 코드가 또 다시 이 메모리에 접근할 것이다.

그 코드가 대사를 출력하는 코드다.

 

결론이라기 보담은 막연한 기대에 가깝지만 일단 해봅시다.

 

단순하고 쉬운거 부터 먼저 해보는게 소프트웨어 공학의 미덕입니다. ㅎㅎ

 

F9를 눌러 실행을 재개합시다.

 

.. 그런데.

 

방금 전 잡아놓은 메모리 브레이크포인트 때문에 자꾸 이 함수 안에서 브레이크가 걸리는 군요.

 

이 함수가 끝난 후를 노려야 하니, 메모리 브레이크 포인트를 풀어줍시다.

 


 

그리고 함수 끝자락에 브레이크 포인트를 걸어 놓읍시다.

 

함수 끝은 보통 RETN으로 끝이 납니다.

(어셈블러마다 RET, RETN 등 표기법은 다르지만 똑같은 겁니다.)

 



뒤의 8 stdcall 호출규약에서 스택을 +8 만큼 원상복귀 시켜준다는 의미인데,

알 필요 없으니 그냥 넘어갑시다.

 

함수 끝자락에 브레이크포인트를 걸었고, 메모리 브레이크포인트를 해제하였다면 F9를 누릅시다.

 

단숨에 RETN 코드까지 오는군요. ㅎㅎ

 

이제 이 상태에서 대사 메모리에 다시 브포를 겁시다.

(브포 : 브레이크 포인트 ㅡ,.;;;)

 

이제 어떻게 설정하는지 다 아실겁니다.

 

브포를 걸었다면 F9를 눌러 진행해 봅시다.

 

그랬더니!!

 


 

435237이란 코드가 떡밥 넘버 04B0B763을 물었다가 올리에게 낚였습니다.

 

파닥거리는 소리가 들리는듯..


CMP는 두 값을 비교하란 명령입니다. 


BYTE PTR DS:[EDI]
는 대사의 첫 번째 바이트입니다. (, 8E.)

 

CL 현재 0입니다.

 

그 다음 줄엔 JE 특정지점 이 보입니다.

 

, EDI가 가리키는 메모리의 첫 바이트와 0을 비교하여 두 개가 같다면 특정지점으로 짬프(jump)하라는 뜻입니다.

 

보통 C/C++ 같은 언어에선 문장의 끝을 0으로 표시합니다.

첫 바이트부터 0이라면 출력할 필요가 없는 빈 문장이란 뜻이겠죠.

역시나 점프하는 특정지점이란 곳이...

찾아가보니 이 함수의 거의 끝자락이군요.


오호라
냄새가 납니다. (냄새)

 

이 주소를 후킹해 보기로 합시다.

 

그런데 여기서 대사 포인터가 저장되어 있는 EDI의 값은
 
이 함수의 어디서 세팅 되었을까요?

 

함수 내에서 코드를 거슬러 올라가다 보면 아악~~!

 

눈알이 빠질 것 같습니다.

 

겨우 찾아낸 곳이

 


 

함수 진입점 부근이군요.

 

ESP 58, 4, 4, 4, 4 이렇게 감소되었으니 16진수로 총 68이 감소되었습니다.

 

따라서 저기 보이는 [ESP+6C]는 함수 진입점에서는 [ESP+4] 입니다.

 

[ESP+4]는 함수 호출시 첫 번째 인자.

 

여기서 팁을 알려 드리겠습니다.


꼭 위처럼 거꾸로 계산하지 않더라도  콜 스택 이란것을 보면 쉽게 알 수 있습니다.


Alt+K
를 누르시면 콜 스택 창이 뜹니다.

 


 

Arg1 에 대사 메모리 주소가 넘어오고 있군요.

 

콜 스택이란 어떤 함수가 어떤 함수를 호출했고, 호출된 함수가 또 어떤 함수를 호출했고 그런 정보를 보여줍니다.

 

따라서 위의 작품을 설명드리자면

 

436130 함수 내에서 435130 함수를 호출했는데 그 인자로 04B0B763, 0013FE04를 넣었다.

 

라는 겁니다.


하지만 불행히도 콜스택이 항상 이렇게 착한 모습으로 나타나진 않습니다.
 

, 이제 후킹할 함수 지점(435130)도 알았겠다, 그 인자([ESP+4])도 알아냈으니 AT코드에 적용해 봅시다.

 

우선 게임을 다시 실행시킨 후 AT를 먹입니다.




후킹주소 추가를 눌러 우리가 찾은 함수 진입점 435130을 적으시고

 

메모리는 [ESP+0x4]를 선택합니다.

 



그리고 메모리 바꿔치기 방식을 선택해 주세요.

 

! 한글이 출력되나 볼까요~

 

 


!! 이게 모얌~!!

 

뭔가 달라진 것 같은데 네모나라 언어가 출현하네요.

 

SHIFT-JIS 코드 범위에 들어가지 않는 문자는 이런 식으로 필터링 되나 봅니다.

 

당황하지 마시고 옵션에서 한글을 일본 문자셋으로 변환을 체크해 줍시다.

 

짜잔~

 


 

한글 대사가 나옵니다.

 

이름은 여전히 번역이 안되는군요.

 

이름은 다음 강좌에서 찾아보도록 하겠습니다.

 

그럼 3편에서 계속.

 

 

Hide_D

2008.05.22
23:48:03
문장 HEX 변환기
클립보드 후커 제작자님 홈피에 있는 녀석

EditPlus -> UltraEdit 조합보다 한결 편합니다.

안돌아간다면
JRE6을 설치해 주세요

라파에

2008.05.23
11:12:49
헤.. 오늘에서야 강좌를 보게 됏네요

저번에 덧글로 부탁 드렷던 강좌인데 .. 이리 올려주시니 감사할 따름 ㅜㅜ

3편도 기대하며 보겠습니다!

플랑베르

2008.07.21
21:37:54

ㅎ... 고3 때 교과서를 읽는 것보다 더 열심히 읽은 것 같은데 머리에 하나도 안들어 오네요 ㅡㅡ;;

으윽.....내가 이렇게 돌머리 였더가 ㅡ0ㅡ;;;

같이갈래?

2008.07.30
10:42:06

존경합니다... 이 말밖에 할말이 없군요 ㅋㅋ

아자토스

2008.10.14
22:33:51
... 어려워..

마이아크

2008.11.10
05:49:29
죽겄다....머리 아파서

Hide_D

2008.11.23
11:14:50
감사합니다~

이름까지 같이 찾는데 성공했어요!

꿈꾸는아이

2008.12.10
07:50:37
저것들은다 어느나라 말일까???
갑자기 외국에온느낌이...

HaruKaze

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

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

zpdls

2009.02.13
11:16:08
모든 일본게임에 훈민정음을 박아 주는 그날까지.
명대사네요 ㅎㅎ

태상호이

2009.04.02
18:28:16
모든 일본게임에 훈민정음을 하루 빨리 박는 그날이 왔으면 좋겠네요 ^ㅡ^

다커

2009.04.03
00:04:02
메모리 멥에서 메모리가 더있는지 확인할떄 컨트럴 엘 눌렀을때 메모리가 더있는데 이것은 어떻게 하나요?
그 다른것 메모리 브레이크 포인트하면 전에 했던것까지 메모리 브레이크가 되버리는데 ; ㅁㅁ
이거하나가 문제군요 흠....

루시퍼

2010.01.05
01:47:44
생각보다 많이 어렵네요 ㅜㅡ
어셈쪽은 처음이라 뭔말인지.... 그래도 한번 도전 해봐야겠어요 ㅎㅎ
좋은 강의 감사합니다.^^
List of Articles
번호 제목 글쓴이 조회 수 추천 수 날짜 최근 수정일sort
공지 아랄트랜스로 게임하기 앞서 기본 셋팅 확인하기! [4] file TwoComet 40477   2012-08-30 2014-02-26 20:12
공지 아랄트랜스 - 초보자 가이드 [94] file Hide_D 319301   2008-07-16 2015-02-27 18:02
공지 모든 플러그인, 필터 안내 ('09.03.13) [20] Hide_D 191352   2008-10-31 2009-03-13 23:48
공지 아랄트랜스 0.2 - 초보자 가이드 [109] file 아랄 505813   2008-07-16 2013-12-31 09:32
77 글씨가 누워져서 뜰 때 [1] file 처음처럼만 8003   2008-12-12 2009-11-03 15:02
 
76 진연희무쌍 검은화면되면서 팅기는님들.. [1] 소주마스터 6777   2009-08-05 2009-11-03 17:17
아주드문경운데요... 진연희초반에 좀하다가 검은화면되면서 장면넘어갈때 팅기는님들이 2~3명보았는데요 저도;; 그경운데.. 도저히 해결법을 못찾았고있었어요.. 아랄끄고 어플로 게임만 실행해봐도안되고;; 그런데 진연희 폴더디지다가;; 그냥 오프닝 실행해...  
75 彼女×彼女×彼女(년년년 두근두근 AT코드관련 설정법) [6] 디플 9560   2009-11-06 2009-11-07 23:21
음..이게시글을쓰는 사람의 프로필을 쓰겠습니다.. 이런장르의 연얘시물레이션 게임을시작한지 3일이 됬네요 다른때에는 fps게임만하다가온거라 설명이부족할수도있습니다.. 설정은 이렇게해주세요 후크:scp플러그인은 http://polaris.aralgood.com/690189 여...  
74 このままじゃ、姉とSEXしてしまう!? -あれ、弟よ、いま中で出さなかった? 설치 수월하게 하는방법이라고나 할까요... [2] 시명 10038   2009-11-08 2009-11-10 22:29
역시나 techArts사 작품이라서 설치 따로 할필요없이 복사만하면되는데요.. CD가 두장이라서 어떻게 되나 하고 한번 해봤는데..역시나 되더군요-_-;;; 1번CD에서 게임이 들어있는 폴더 복사해서 옮기고... 2번CD에서 역시 게임이 들어있는 폴더 보면 동영상폴...  
73 DAISOUNAN 레벨? 게임핵 주소요 [6] 푸카푸카 6156   2009-03-31 2009-11-13 15:09
게임핵 주소에요 02362258 아래는 치트오메틱 경험치 주소입니다 (위치: x2362258:634) --------------------------------- 체크해주시면 겜하다보면 언젠가 바뀌어 있는걸 보게될거예요; 턴이 지나면 될듯..  
72 아랄트랜스 팅기시는분들 [5] file 이판사판 12837   2009-08-05 2009-11-14 12:48
 
71 시작메뉴 경로 오류로 인한 프로그램 설치 불가 해결 방법 [4] file TheMan 9369   2009-09-06 2009-11-28 03:55
 
70 아랄 컨텍스트 메뉴 지우는 방법 [4] 평군 8149   2009-11-16 2009-12-03 19:14
윈 7 에서는 '처음처럼만'님이 배포한 아랄 컨텍스트 0.9 확장버전이 제대로 설치되지 않습니다. 오히려 이상한 목록이 생겨서 오른쪽메뉴가 더러워지죠... Hide_D님의 버전은 잘 돌아가는 것을 확인했습니다. 히데님의 버전은 제거파일도 있으니 참 쉽죠 =ㅂ...  
69 Xuse와 Eternal의 hr오류는... [4] 평군 7368   2009-11-16 2009-12-04 22:29
까놓고 말해서 유니코드에 의한 현상입니다. 세이나루카나의 경우는 단순히 국가 및 언어에서 [유니코드가 아닌] 지역설정과 표기설정만 일본으로 바꿔주시면 됩니다. [사용한 OS는 Windows Vista] 증상- 세이나루카나의 hr오류 증상은 전투화면의 배경이 검...  
68 유니코드 변경법 [5] file MILD 20455   2008-08-01 2009-12-05 23:06
 
67 비스타에서 어플돌리는 법 [4] file 어잌후 5720   2009-04-24 2009-12-14 06:44
 
66 대악사 대사가 밀리는 듯한 증상의 해결법. [4] 쌀밥줘 10154   2009-03-19 2009-12-29 20:18
막상 언인스톨 하고 나니 그래도 옛 기억에 끌려 다시 인스톨 하고 패치 하는데... 중요한 것을 발견. 그리고 그것을 해결하자, 대사 밀리는 현상이 해결됨... 해결법은. 인스톨된 폴더 안 파일중 大悪司SA.ALD라는 파일이 있다면, 그냥 업데이트 하면 되지만,...  
65 인터넷 익스플로어7,8 최적화 셋팅 & 오류를 없애보자 [6] 암흑마제 11510   2009-05-19 2010-01-02 12:59
인터넷 익스플로어 8은 개인적으로 7 보다 나아졌다고 생각합니다. 좋은 기능도 많이 생겼구요 익스7보다 빠르다고 생각합니다. 하지만 익스7이 더 빠르다고 생각하시는 분들이 계시던데 아무래도 익스8을 최적화 하지 않으셔서 그런가 하는 생각이듭니다. 또,...  
64 시노비류(忍流) 플레이 TIP [5] 마기우스 11172   2009-12-18 2010-01-04 00:04
우선 이걸 어디다 올릴지 고민하다 강좌&팁에 올리기로 했습니다. 공략이라고 하기는 많이 부족한 감이 있어서요. 공략이나 팁 같은 글은 처음으로 써보는 군요. 항상 보기만 하다가 한 번 올려봅니다. 참고로 CG회수나 각 엔딩 조건 같은 건 옆동내 섬나...  
63 자료마당에 존재하는 귀축왕 란스 SSG가 작동하지 않는 분들을 위한 팁 OVER WORLD 10131   2010-01-14 2010-01-14 23:18
자료마당의 이용자자료실에 보면 귀축왕 란스의 SSG가 존재합니다. system3.9 ver.5.49에서만 작동하지요. system3.5에서는 작동하지 않습니다. 그런데 혹시 system3.9 ver.5.49임에도 불구하고 SSG가 작동하지 않는 분들이 계시지 않습니까? 제가 그러했습니...  
62 공주사냥 던전 마이스터 (히메가리) 설치 방법 키리아스 21025   2010-01-16 2010-01-16 16:01
CD 이미지를 툴을 이용해서 디스크에 집어넣고, Setup을 어플로케일로 실행하는건 아시겠지요. 계정이 영문이 아니면 안된다고 합니다. 저는 설치에 별다른 문제는 없었어요. 문제는 패치인데. 패치와 확장팩이 자동 설치이기 때문에, 그냥 실행하면 1152 오류...  
61 인터넷 익스플로러 8에서 겟츄 검색 사용하기 [1] file whoami 9644   2010-01-23 2010-02-01 07:49
 
60 φage엔진 코드 찾기 강좌. [10] file FrigateBird 12515   2010-01-30 2010-02-02 11:53
 
59 꿈의 장인의 이미지 강좌 [3] - 글씨 넣기. [13] file 유메 5931   2009-01-13 2010-04-03 11:53
 
58 꿈의 장인의 이미지 강좌 [1] - 크기 바꾸기 및 사진 자르기. [15] file 유메 5639   2009-01-11 2010-04-03 11:55