티스토리 뷰
어쩌다가 발견한 거라 남겨 둠.
다음은 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 |
---|