Back to user mode
Reverse Engineering 2019. 2. 10. 22:21 |프로세서가 kernel mode에서 user mode로 변경되는 시점을 간단히 찾을 수 있다. (User mode and kernel mode)
예를 들어 Message box가 종료되는 지점을 찾아 보자. ollydbg에서 분석할 프로그램을 열어 준다.
(password: lena)
F9를 눌러 실행 한다.
아래와 같은 Message box가 나타난다.
F12를 눌러 정시 시킨다.
아래와 같은 곳으로 이동 된다.
Alt + F9를 눌러 back to user mode를 실행 한다.
오른쪽 아래에 Till user가 표시 된다.
'Register Me' 메세지 박스에서 '확인'을 클릭하면 아래와 같이 MessageBoxA CALL 이 종료되는 시점에서 정지 된다.
이번엔 scanf 가 종료되는 지점을 찾아 보자. 아래와 같은 소스로 실행 파일을 만들어 준다. (
)
1
2
3
4
5
6
7
8
9
10
11
12
|
#include <stdio.h>
int main()
{
int i;
printf("Enter a number: ");
scanf_s("%d", &i);
printf("Number: %d", i);
return 0;
}
|
cs |
ollydbg(v.2.01)로 열어 준다.
F9를 눌러 실행 한다.
아래와 같이 숫자를 입력하는 콘솔창이 뜬다.
다시 ollydbg로 돌아와 F12를 눌러 정지 시킨다. 하지만 여기서는 Paused 상태가 되지 않고 Pausing 상태가 된다.
콘솔창에서 숫자를 입력 한다.
숫자를 입력하면 아래와 같은 주소로 이동하고 정지 상태가 된다.
F8, Alt + F9, Ctrl + F9 를 적당히 눌러가며 진행 하면 scanf가 종료되는 것으로 보이는 위치가 나타난다.
같은 파일을 x32dbg로 열어 보자.
F9를 눌러 진행 한다.
한번 더 F9를 눌러 진행하면 아래와 같이 Running 상태가 된다.
숫자를 입력하라는 콘솔창이 뜬다.
x32dbg로 돌아가 Threads 창을 열어 준다.
Title Bar에는 Main Thread가 선택되어 있는 것 처럼 표시 되지만 Main Thread가 아닌 2번 thread가 활성화 되어 있다. 이 상태에서는 break point가 제대로 작동하지 않는다. Main Thread를 활성화 해 준다.
아래와 같은 주소로 이동 된다. F12를 눌러 Pause 한 후(F12를 한 번 누르면 화면에는 아무것 도 표시되지 않는다. 두 번 누르면 Error setting breakpoint at XXXXXXXX! (SetBPX) 가 표시 되지만 무시하자) 콘솔창에서 숫자를 입력한다.
숫자를 입력하고 나면 아래와 같이 Paused 상태가 된다.
F8, Alt + F9, Ctrl + F9 를 적당히 눌러가며 진행 하면 scanf가 종료되는 것으로 보이는 위치가 나타난다.
스크롤을 조금 올려 보면 프로그램의 전체적인 내용을 파악 할 수 있다. pdb파일이 같이 있기 때문에 소스 라인까지 표시 된다.
'Reverse Engineering' 카테고리의 다른 글
x64dbg Color Scheme 바꾸기 (0) | 2019.02.19 |
---|---|
Cheat Engine으로 Pointer 찾기 (2) | 2019.02.13 |
Windows 10에서 *.hlp 파일 열기 (10) | 2019.02.05 |
IDA Pro Skin 바꾸기 (1) | 2019.02.04 |
ollydbg Jump 위치 표시 (2) | 2019.02.02 |