티스토리 뷰

어쩌다가 발견한 거라 남겨 둠.


다음은 http://reversing.kr 에서 출제한 Easy_CrackMe 파일의 어셈블리 코드 중 일부이다.


1. Ollydbg


2. IDA



먼저 올리디버거 에서는 일반적으로 표시하듯이 ESP + n 형태로 메모리 주소를 가리키고 있는데, 

IDA 에서는 ESP + 현재 스택 포인터 + var_? 형태로 표시하고 있다.


언뜻 보기에 왜 저렇게 표시했을까 싶은데, IDA 에서 자동으로 스택의 사용을 조사해서 지역 변수를 찾아내는데 용이하게 만든 것이다.

IDA의 디스어셈블러 화면 시작 부분을 보면 이렇게 var_? 형태로 특정 값이 설정되어 있는데, 이는 함수 시작 시

EBP 의 주소를 기준으로 스택 상에 변수가 위치하는 오프셋 값이다.





String, var_63, var_62, var_60 은 함수의 지역 변수이므로 EBP 보다 더 낮은 메모리 주소에 위치하고 있으므로 음수 값을 가지며,

hDlg은 함수 호출부에서 볼 수 있듯이 인자 값이므로 EBP 보다 더 높은 메모리 주소에 위치하고 있는 것을 알 수 있다.


윈하는 지역 변수를 선택하고 단축키 "x" 를 누르면 해당 지역 변수가 또 다른 어디에서 참조되었는지 볼 수 있다.

지역 변수를 선택하고 "Enter"를 누르면 "Stack of ..." 창이 뜨며, 해당 함수에서 추측된 스택 프레임을 보여준다. 

경계값 체크를 하지 않아 발생하는 스택 버퍼 오버플로우 공격을 구현할 때 return address가 저장된 곳과의 오프셋을 구하는데 유용하게 사용될 수 있다.




'Reversing > Tool' 카테고리의 다른 글

IDA - 셋팅, 플러그인 모음  (1) 2016.04.29
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함