본문 바로가기

쓰기

 vol. 2

디버거 프로그램(Debugger)

기본적으로는 프로그램의 오류를 해명하고 그것을 해결하기 위한 목적으로 쓰이는 프로그램이다. 그것이 하는 일은 실행중인 프로세스를 기계어->어셈블리어로 번역해 표기하고 그를 통한 대상프로그램의 정밀한 분석 및 구조 개선이겠지만 우리들은 그 기능을 이용해 게임의 후킹 지점을 찾는 것(코드 파인드)이 주 용도로 쓰이게 된다.

디버거 프로그램의 종류로는 올리디버거, 이뮤니티 디버거, 윈디버거 등이 존재한다.

그 중에서 올리디버거에 대해 살펴보도록 하자.


강좌1.jpg 

올리디버거의 각 창은 이렇게 표기할 수 있다.


세그먼트

하나의 프로세스에 할당되는 특정 메모리 영역으로 크게 코드 세그먼트, 데이터 세그먼트, 스택 세그먼트가 존재한다.


 


코드 세그먼트

강좌2.jpg


메모리상에 올라간 실행중인 프로세스의 기계어 코드가 존재하는 영역이다. 이 코드 세그먼트에 위치하는 코드에 의해

프로세스는 구동되어지는 것이다. 사진에서 보듯 기계어 명령이 나열되어있고 저것을 계단식으로 실행해 간다는 것이다.

가령 현재 프로시저가

00401000   55               PUSH EBP
를 수행하고 있다면

00401001   8BEC             MOV EBP,ESP
그 다음으로 이것을 실행한다는 것이다.



데이터 세그먼트


메모리상에 올라간 실행중인 프로세스가 사용 중인 여러 데이터가 존재하고 있는 영역이다.

일반적으로 코드 파인드시 접하게 되는 대사들이 이 영역에 존재하게 된다.


 강좌4.jpg


올리디버거의 메모리 창은 사실 데이터 세그먼트 영역만이 아닌 스택, PE헤더 등등 모든 메모리 정보를 알 수 있도록 만들어져 있다.

이를 통해 보다 간단히 우리는 메모리의 정보를 파악할 수 있다.


스택 세그먼트


강좌5.jpg

 

실행중인 프로세스가 임시로 어떠한 데이터를 저장할 필요가 있거나 함수가 사용할 각종 인자값이 오갈 때 사용되는 메모리 영역이다.

이 스택 메모리 구조는 전형적인 FILO(First In Last Out)이다. 즉 먼저 들어간 데이터가 나중에 나온다는 의미인데 예를 들어 설명하면

 

가 나 다 라 -> STACK -> 라 다 나 가

 

의 순서대로 데이터가 유동한다고 하는 것이다.


레지스터

CPU가 자체적으로 가지는 일종의 캐쉬 메모리다. 현세대 CPU에 있어서 각 레지스터는 32비트의 크기를 가지는 일종의 임시 메모리 공간이며 CPU는 이 임시 저장 공간을 통해 산술연산부터 주소 연산까지 많은 연산을 수행해 간다.

종류로는 범용 레지스터, 세그먼트 레지스터, 포인터 레지스터, 인덱스 레지스터, 플래그 레지스터가 존재한다. 여기서는 코드파인드에서 주로 쓰이게 되는 부분만을 조명하도록 하자.

 

강좌3.jpg  


범용레지스터

EAX, EBX, ECX, EDX의 네가지 레지스터로 구분되어진다. 이들 레지스터는 산술 연산 및 결과 값 저장 등 여러 가지 용도로 쓰이게 된다.


EAX

산술연산에 주로 사용되어지는 레지스터다. 대부분의 덧셈, 곱셈, 나눗셈 등의 산술연산에서 무조건 적으로 사용되어진다.

EAX는 32비트(4바이트)사이즈이며 그 전체를 사용 시에는 EAX로서 쓰인다.

16비트(2바이트)만을 사용 시에는 AX로서 쓰인다.

8비트(1바이트)만을 사용 시에는 AL 혹은 AH로서 쓰인다.

이런 식으로 구분되는 것을 기억하도록 하자.


EBX

EAX를 보조하는 산술연산에 사용되거나 여러 주소 연산에서 사용되어지는 레지스터이다.

EAX의 구조와 마찬가지로

 

32비트(4바이트)영역을 사용 시 EBX

16비트(2바이트)영역을 사용 시 BX

8비트(1바이트)영역을 사용 시 BL 혹은 BH로서 쓰인다.

 

ECX

ECX는 일반적으로 루프(Loop)의 반복횟수를 의미하는데 쓰이게 된다. 하지만 그것만이 용도는 아니고

많은 산술 연산 및 주소연산에도 공통으로 사용되게 된다.

32비트(4바이트)영역을 사용 시 ECX

16비트(2바이트)영역을 사용 시 CX

8비트(1바이트)영역을 사용 시 CL 혹은 CH로서 쓰인다.


EDX

EDX는 큰 수의 산술연산, 즉 32비트 레지스터간의 곱하기 등의 최대 레지스터 용량 범위를 넘어가는 .

연산을 보조하기 위해 사용되는 레지스터이다.

32비트(4바이트)영역을 사용 시 EDX

16비트(2바이트)영역을 사용 시 DX

8비트(1바이트)영역을 사용 시 DL 혹은 DH로서 쓰인다.

 

기본적으로 이상의 범용 레지스터들은 일단 그 사용 용도가 정해져있다고 하지만 실제로는 범용인지라

어떻게 어떤 형태로 사용 되도 이상하지 않다.

 

포인터(주소) 레지스터

포인터 레지스터에는 ESP,EBP, EIP 가 존재한다.


강좌3.jpg 


ESP

그 특성상 다음 강좌에서 설명하도록 하겠다.

단지 이것은 스택 메모리에 있어서 대단히 중요한 레지스터이다

 

EBP

그 특성상 다음 강좌에서 설명하도록 하겠다.

이 역시 스택 메모리에 관여하는 레지스터이다.

 

EIP

EIP는 다음에 수행되어야할 명령의 주소를 가리키고 있다. CPU는 이 EIP가 가리키는 주소에 의해서만 코드를 실행하게 되며 따라서 이것은 프로그래머가 임의로 변경할 수 없는 부분이기도 하다. 물론 디버거를 이용한 변경은 가능하지만 그 경우 어떤 문제가 일어날지 장담할 수 없게 된다.


인덱스 레지스터

인덱스 레지스터에는 EDI와 ESI가 존재한다.

이들 레지스터는 대부분이 문장 처리에 관여한다. 보통으로는 ESI가 소스주소를 EDI가 목적지 주소를 가리키는 데

이들 레지스터는 ESI(문장위치주소) -> EDI(문장을 옮길 주소)의 방식으로 사용되는 것이 일반 적이다. 하지만 그 외에도 가끔 산술연산에 사용되어지기도 한다.

 

플래그 레지스터

플래그 레지스터는 다시 두개의 분류로 구분 할 수 있다. 상태 플래그와 제어 플래그가 바로 그 것인데 코드파인드시 주로 보게 될 상태 플래그를 보도록 하자.

강좌3.jpg


CF(Carry Flag)

연산 명령 실행 후 그 결과 값의 최상위비트(가장 왼쪽의 비트)에 덧셈에 의한 자리올림 혹은 뺄셈에 의한 빌림이 발생시 1로 세팅되어진다.

PF(Parity Flag)

연산 결과 값의 1비트들의 개수를 나타낸다. 그 개수가 짝수인 경우 1로 세팅되고 홀수인 경우 0으로 세팅된다.

AF(Auxiliary carry Flag)

특수화된 산술에서 세팅되어지며 주로 10진 연산처리 시 발생한다.

ZF(Zero Flag)

연산의 결과 값이 0일시 1로 세팅되어지고 0이 아닐시엔 0으로 세팅되어진다.

OF(Over Flag)

연산의 결과가 부호 발생 시 세팅되어진다.

 

플래그 레지스터의 경우는 설명을 듣는 것보다 직접 체감하는 것이 훨씬 와닿을 것이다. 사실 모든 게 다 그렇지만[...]


차후 vol.3에서는 간략한 예제를 통한 직접적인 구동 방식을 보도록 하자.

사실 여기까지 봤으면 대체 이게 뭐얔ㅋㅋㅋㅋ하고 있을게 뻔하다 못해 아주 눈에 서릴 지경이지만 다음의 직접 돌아가는 모습을 보면

어느정도 감이 잡힐 것이다. 따라서 이 상기 내용들을 꼭 외울 필요는 없고 이런 게 있다고만 알아두도록 하자.

이 강좌를 끝으로 아마 어지간해선 코드를 올리진 않겠지


혹여 질문이 있다면 리플을 달아둔다면 그 즉시 응답하도록 하겠다. ㅡㅡㅋ

Shana

2010.02.01
03:05:27

머엉..........

G2m

2010.02.02
13:51:34

어, 어렵나요...?

카즈냥

2010.02.01
06:36:44

1?!?!?!

G2m

2010.02.02
13:52:33

이게 일단 생 기초이긴 한데;;;;;;;;;;;;;;;

디쿠

2010.02.01
08:37:25

됴쿤

G2m

2010.02.02
13:52:57

ㅈㅈ;;;;;;;;;;;;;;;;;;;;

roman

2010.02.02
02:34:25

요즘 이게임 저게임 이것저것 쑤셔보기만 하면서 이런 올리디버거나 명령어에 관해 설명된 글을 보고싶었는데


이번에 그런 종류의 글이 새로 올라왔군요.


정말 감사히 보겠습니다 .

G2m

2010.02.02
13:53:19

뭐어 본격적은 다음 강좌부터니까 기대해 주세요~


열심히 작성중입니다;

Rynie

2010.02.03
15:54:36

수고스, 잘봤음여, 아직까진 뭐 무난하게 스윽

Hide_D

2010.02.07
01:40:45

중요한 내용들이 많이 담겨있네요.

추천 한방!


난이도 : 중 [...]

화눙이

2010.02.18
00:05:54

강좌 기대하고 있습니다... (올리디버거로 파인딩 여러번 좌절중...)

아크트루스

2010.02.23
18:48:07

이부분을 아직 못배워서 이해는 못하겟네요 그래도 어느정도는 알것같기도하고요

 

고로고로스루

2010.03.06
15:35:03

삐질삐질...

로키

2010.03.16
10:01:34

엄청 자세하게 다뤄주셨네요 다음에는 예시를 통한 실전 코드파인딩을 보여주시면 안될까요 ㅠㅠ

프시쵸

2010.05.02
22:20:38

프로그램 언어를 그래도 안다고 하는 분들이나 알아들을 듯 하네요. 그래도 아주 유용한 정보입니다.

止水

2010.06.04
22:07:15

왠지 어셈블리 같은 느낌이 풀풀풀...

착착감겨요

2010.07.27
04:52:06

흠 .. 이건 대학교 1학년과정 컴퓨터구조 기초.....

 

유현

2010.08.15
03:22:43

역시 여기서 멍...

그래도 항상 이걸 다시 보기는하는..

체육복萌!!

2010.08.31
15:52:36

쉽게 설명해주 셨네요 ㄳ,리버싱에 부족한게 많았는데 ㄳㄳ 

합리적사고

2010.09.26
09:59:10

강좌 3도 기대하겠습니다. 

설명이 저에게 있어선 매우 잘되있던데

매우 유용했습니다 수고하셨습니다~

미스릴

2010.11.14
10:49:13

이해하기 난해했지만, 간단한 예제로 퍼즐조각 맞추듯이 각 기능들을 나열해 몇가지 해보면 괜찮을듯 하네요,,

잘읽고 갑니다~간단하고 읽기 편해요.

마도곰

2010.12.14
22:59:53

어렵네요....ㄷㄷ

고토회복

2011.03.06
16:55:10

담부분이 넘넘 기대 된다는...

아주 듁갔네여 .. 무지함속에 있으니 답답해서

Strange

2011.03.12
09:56:04

16진수가 판을치는 마당이 버틸 수가 없다!!!!

애수

2011.04.03
04:14:15

즉......

컴퓨터 프로그래밍에 관련한 지식이 없으면

코드를 못찾는다는 건가요;;;

 

 

포기해야겠군...

리넬

2011.08.05
03:39:34

시간나서 읽어보는중인데-프로그래밍 지식이 없으면 못 알아듣는게 정상인거...맞죠?

Breaker

2011.09.10
07:37:58
잘보고 가요~

먹구르름

2011.11.08
00:55:31
컴공에서 배우는게 나오네요 와우 재밌당~~ 어셈블리어라.. ㅋㅋ
List of Articles
번호 제목 글쓴이 조회 수sort 추천 수 날짜 최근 수정일
공지 아랄트랜스로 게임하기 앞서 기본 셋팅 확인하기! [4] file TwoComet 40505   2012-08-30 2014-02-26 20:12
공지 아랄트랜스 - 초보자 가이드 [94] file Hide_D 319366   2008-07-16 2015-02-27 18:02
공지 모든 플러그인, 필터 안내 ('09.03.13) [20] Hide_D 191390   2008-10-31 2009-03-13 23:48
공지 아랄트랜스 0.2 - 초보자 가이드 [109] file 아랄 505865   2008-07-16 2013-12-31 09:32
217 필터 강의 - FixLine [작성중] secret Hide_D 1   2009-04-07 2009-04-07 01:42
비밀글입니다.  
216 필터 강의 - FixLine [작성중] secret Hide_D 4   2009-04-07 2009-04-07 01:42
비밀글입니다.  
215 Sho&#6489lԀ &#1... AngeliaTolmer6414 364   2015-11-08 2015-11-08 01:28
ShoᥙlԀ уоu lоvᥱⅾ thiѕ ρоѕt and үоս ѡɑnt tο гесеіνe tоɗⲟ mоrе infօ гᥱǥагding Ореracjɑ Ⲣlаstуczna Nοѕa Ꮯᥱnnіκ (Http://Www.Dbamy.Pl/) aѕsᥙrе ѵiѕіt ⲟսг οᴡn աeb-ѕitᥱ.  
214 사진이 깨진 글에서 사진순서 맞추기 file 미래도 431   2015-09-13 2015-09-13 03:08
 
213 게시물 분류작업 미래도 494   2015-09-14 2015-09-14 05:09
게시물 분류작업입니다. 주석달기전에 일단 분류부터.. http://lab.aralgood.com/index.php?mid=board_lecture&document_srl=게시물번호 게시물번호에 해당 번호 복붙해서 들어가면됩니다. 찾아보니, 똑같은 게시물이 두개있는경우가 있더군요. 과거 폴라...  
212 에우슈리 & 아나스타샤 게임에서 오류가 뜨시는분 Peith 530   2013-08-07 2013-08-07 00:49
이런 에러가 뜨시는분 전에 질문을 올렷는데 더미컷 버전이라 그렇다고 하시더군요 근데 제가알기론 타유우타랑 명색의 예희는 더미컷 버전이 아닌데 말이죠 환린이랑 전여신은 잘 모르겟지만 그것들도 더미컷이 아닐겁니다 설치하는데 필요한 용량과 게임 파...  
211 cs2엔진 게임에서 대사창이 안나올경우 file 별초군 681   2015-12-03 2015-12-03 18:52
 
210 PhantOm:디버깅이 제한된 프로세스 디버깅하기 [1] 미래도 1438   2015-08-23 2015-08-25 19:46
사실 VNR 스크립트 주석에서 퍼옴 椎名里緒, 시나리오 엔진의 경우 Themida로 디버깅을 막았습니다.(다른 디버깅방지 엔진도 비슷할꺼라 생각함) - OllyDbg로 열 때, 게임이 실행되지 않는다. - 게임 모듈 메모리 공간이 수정하는 것을 막는다. 대체로 이런 특...  
209 [팁]단순후커사전SDK 두통 1455   2013-07-06 2013-07-08 20:42
[후커사전] 단순후커사전 SDK Ver1.00 자료실에 올릴까 하다가 그냥 방문해서 이것저것 봐보는게 좋을듯싶어서 링크 다른건 모르겠는데 ezTransMini 요놈 쓸만하네요.  
208 컴플리트사의 C4엔진 간단한 검색법.. [1] file 유피에르 1816   2012-08-25 2012-08-26 00:09
 
207 올리 디버거 기능중 스탭인투와 스탭오버 file Wales 2047   2012-09-12 2012-09-20 15:27
 
206 CS2엔진 야매+ file 두병더더 2315   2012-09-16 2012-09-24 12:09
 
205 U・Me SOFT사 코드 찾기 간단한 방법(편법)... 유피에르 2488   2012-10-14 2012-10-14 23:52
FORCEFONT(5),ENCODEKOR,FONT(HY엽서M,-13),HOOK(0x0042A6A0,TRANS(EAX,PTRCHEAT),RETNPOS(COPY)),HOOK(0x0040459A,TRANS(ESI,OVERWRITE(IGNORE)),RETNPOS(COPY)) 이게 무슨 게임 코드였는지는 까먹었는데..;; U・Me SOFT게임의 코드입니다.. (쿨럭쿨럭.. 적용...  
204 NTLEA GUI 0.92 이상을 쓰시는 분은 필히 보시기 바랍니다. [5] TwoComet 2879   2013-02-01 2013-07-29 03:13
현재 NTLEA 0.87 beta 를 쓰고 있었다가 저걸로 한번 사용하게 되었었습니다. 근데 큰 문제가 생깁니다. 어플로케일의 AlLayer.dll 가 인젝션 되지 않는 사태가 벌어지는군요. 솔직히 기능면에서는 0.87 beta 나 0.92 GUI 나 같습니다. 만약 0.92을 인스톨하여...  
203 아랄로 만든 바로가기 파일이 깨질때. TwoComet 2930   2012-08-30 2012-08-30 15:55
일부 게임이 아랄트랜스로 바로가기를 만들었을때 해당 바로가기가 제대로 동작하지 않는 게임들이 있습니다. 그런 경우는 대부분 3가지로 나눠서 생각할 수 있습니다. 첫째, 게임 엔진 중에 최초 실행시 아랄과 같은 후킹 프로그램이 동작하는지 검사하는 경...  
202 게임 업데이트후 코드먹통될때(예제. FATAL ZERO ACTION) [2] file 두병더더 3142   2012-08-27 2015-09-13 02:52
 
201 미연시 플레이시 특히 오프닝 엔딩영상에서 강제종료 되는문제. 소라노카제 3282   2013-04-13 2013-04-13 11:40
많은 미연시 플레이어들이 겪으시는 문제인데.... 해결책을 아는 분이 적네요..... 저만 모르던가요. 어째든 최근들어 알게 된겁니다만............. "그리자이아의 과실" 과 "지금 당장 오빠에게 여동생이라고 말하고 싶어" 밑 여러 작품에서 이유없는 강제 ...  
200 http://www.dlsite.com/maniax/ 들어가는데 팁 [2] file nicday1234 3673   2012-09-17 2012-09-18 00:34
 
199 [VNR홈페이지]게임이름으로 게임정보 찾기 미래도 3684   2015-09-13 2015-09-13 03:43
게임 정보를 빠르게 찾는 법에 대해 소개합니다. 개인적으로 엔진정리와 작업을 하고 있으나.. 금칙어 크리때문에.. VNR 홈페이지에서 일종의 데이터베이스를 제공합니다. 물론 정보를 수집해서 올려놓은 것이기에 플레이하지 않은 것은 지원하지 않습니다. 주...  
198 카미 육성 팁 입니다 [2] 력현 4008   2011-06-19 2012-01-14 13:44
캐릭을 그나마 효율 적으로 성장 시킬려면 마르웰을 초기 부터 장비 합니다 경험치 보석 4개다 장착하고 사냥 보다는 투기장에서 몹을 잡는 쪽으로 하지요 초기칭호는 15L때 히로인들은 획득이 가능 합니다 중요한것은 15L 의 초기 칭호를 얻기 전에 성장석을 ...