x64환경에서는 32비트랑 64비트 운영체제 모두 설치 가능하다.
사용 가능한 디버거는 아래와 같음
OS | PE32 | PE32+ |
32bit | OllyDbg IDA Pro WinDbg |
IDA Pro (disassemble only) |
64bit | OllyDbg IDA Pro WinDbg |
IDA Pro WinDbg |
64비트 디버깅
WOW64Test_x64.exe파일 디버깅 실습
#include "stdio.h"
#include "windows.h"
#include "Shlobj.h"
#include "tchar.h"
#pragma comment(lib, "Shell32.lib")
int _tmain(int argc, TCHAR* argv[]) {
HKEY hKey = NULL;
HANDLE hFile = INVALID_HANDLE_VALUE;
TCHAR szPath[MAX_PATH] = {0};
////////////////
// system32 folder
if (GetSystemDirectory(szPath, MAX_PATH)) {
_tprintf(L"1) system32 path = %s\n", szPath);
}
////////////////
// File size
_tcscat_s(szPath, L"\\kernel32.dll");
hFile = CreateFile(szPath, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile != INVALID_HANDLE_VALUE) {
_tprintf(L"2) File size of \"%s\" = %d\n", szPath, GetFileSize(hFile, NULL));
CloseHandle(hFile);
}
////////////////
// Program Files
if (SHGetSpecialFolderPath(NULL, szPath, CSIDL_PROGRAM_FILES, FALSE)) {
_tprintf(L"3) Program Files path = %s\n", szPath);
}
////////////////
// Registry
if (ERROR_SUCCESS == RegCreateKey(HKEY_LOCAL_MACHINE, L"SOFTWARE\\ReverseCore", &hKey)) {
RegCloseKey(hKey);
_tprintf(L"4) Create Registry Key = HKLM\\SOFTWARE\\ReverseCore\n");
}
return 0;
}
소스코드는 위와 같다. WOW64Test에서는 크게 4개의 API(GetSystemDirectory(), CreateFile(), SHGetSpecialFolderPath(), RegCreateKey())를 호출해 결과를 출력하는 프로그램이다
x64파일도 있음 이거는 64비트 운영체제 에서 실행되면 WOW64모드로 실행된다.
40128F에서 Startup 코드를 찾을 수 있다.
메인함수를 찾으려면 아래 정보를 바탕으로 찾으면된다.
- GetCommandLine() API 활용
- WOW64Test_x86.exe는 콘솔 기반 프로그램으로, main(int argc, char* argv[]) 함수 호출 전에 GetCommandLine() API를 호출할 가능성이 높습니다.
- 이를 통해 스택 또는 레지스터에 argc와 argv 파라미터가 입력되므로, GetCommandLine() API에 브레이크포인트(BP)를 설정해 리턴 주소를 확인하면 main() 호출 부분을 추적할 수 있습니다.
- 특정 API를 활용한 추적
- 프로그램이 GetSystemDirectory(), GetFileSize(), CreateFile() 같은 명확한 API를 호출한다면, 해당 API에 BP를 설치하여 리턴 주소를 통해 main() 함수 내부를 빠르게 찾아갈 수 있습니다.
- 문자열 검색 기능 활용
- 프로그램이 API로 획득한 정보를 화면에 출력한다면, OllyDbg의 강력한 문자열 검색 기능을 이용해 원하는 코드를 직접 찾아갈 수 있습니다.
마지막거 사용해서 찾아보도록 했다
Search for - All referenced text strings항목 선택해서..
401058주소로 가면 이런 부분이 나오는데 여기가 메인함수부분인거를 찾을 수 있다. 위로 올려보면은
시작점부터 확인가능하다. 401000부터 스택프레임이 시작하니여기가 메인함수의 시작이다.
이번에는 x64.exe파일을 디버깅 해보도록 하겠다.. 이대는 IDA Pro 쓰거나 WinDbg써야된다.
64비트파일을 열어서 EP로 가서 Startup코드를 확인할 수 있다..
64비트에서는 main함수를 찾으려면 kernel32!GetCommandLineW() API에 브레이크 포인트를 설치하고 저장된 RETN addr를 확인해서 따라간서 메인함수 호출 코드를 찾으면된다..
이런식으로..
사실책으로만 도저히 실습과정이 이해가 안가고.. Windbg모ㅅ쓰겠어서 다른블로그를 참고해서 따라함.,.,.
WinDbg어렵다.,.,.,.,
'공부해요 > 리버싱_핵심원리' 카테고리의 다른 글
42. Session in Kernel 6 (0) | 2024.12.26 |
---|---|
41. ASLR (0) | 2024.12.26 |
39. WinDbg (1) | 2024.12.18 |
38. PE32+ (0) | 2024.12.18 |
37. x64 프로세서 이야기 (0) | 2024.12.18 |