본문 바로가기
Programming/Hacking & Security

[Reversing] intro (masm32, odbg 소개) By 용호

by ★용호★ 2010. 5. 14.


2010년 5월 10일



. : 지시자
.model : 메모리의 형태, stdcall은 함수호출 규약
Option casemap:none : - 
.code : 여기부터 코드의 시작
Main proc : main함수 시작
Push ebp : 이전 함수의 stack frame 시작점을 백업
Mov ebp, esp : 새로운 stack frame을 오픈(새로운 함수의 시작점이 ebp에 저장됨 - esp가 최근 데이터의 주소 값을 가지고 있으므로)
→ 여기까지가 함수 프롤로그(prologue)
     - Stack Frame을 설정하는 코드

Mov esp, ebp : esp가 실행 중인 함수의 스택 프레임 시작점을 가리키게됨 이곳에는 이전 함수의 스택프레임 시작 주소가 저장되어 있음
Pop ebp : esp가 가르키는 곳에 저장된 값을 ebp로 pop, 결국 ebp는 이전 함수의 스택 프레임 시작 주소를 가지게 됨
Ret
: 함수 에필로그(Epilogue)
  - Stack Frame을 없애주는 코드

Main endp : main함수 종료
End main : 프로그램 종료



저장할때는 아래와 같이 확장자를 .asm(어셈블리 파일)으로 저장한다.




어셈블리 파일을 컴파일하여 오브젝트 파일을 생성한다.
CLI환경에서 아래와 같은 명령을 내린다.
컴파일
c:\masm32\bin\ml.exe /c /coff /Zi 파일명.asm



컴파일이 정상적으로 완료되면 아래와 같은 오브젝트 파일이 생성된다.  잘못된 코드일 경우에는 에러 메시지를 출력해준다.



생성된 오브젝트 파일을 실행파일로 만들기 위해 다시 링크 과정을 거친다.
링크
c:\masm32\bin\Link.exe /subsystem:windows 파일명.obj



최종적으로 아래와 같이 .exe(실행파일)이 생성된다.


이제 odbg 프로그램을 이용하여 생성한 .exe 파일을 불러오면 아래와 같은 창이 출력된다.


odbg 프로그램을 이용해서 프로그램이 동작되는 원리를 분석할 수가 있다.



댓글