본문 바로가기

reversing55

TLS CALLBACK #include #pragma comment(linker, "/INCLUDE:__tls_used") void print_console(char* szMsg) { HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); WriteConsoleA(hStdout, szMsg, strlen(szMsg), NULL, NULL); } void NTAPI TLS_CALLBACK1(PVOID DllHandle, DWORD Reason, PVOID Reserved) { char szMsg[80] = {0,}; wsprintfA(szMsg, "TLS_CALLBACK1() : DllHandle = %X, Reason = %d\n", DllHandle, Reason); print_console.. 2022. 8. 31.
CreateRemoteThread() API 호출 흐름 Windows XP Windows 7 Kernel32!CreateRemoteThread() -> ntdll!ZwCreateThread() Kernel32!CreateRemoteThread() -> kernelbase!CreateRemoteThreadEx() -> ntdll!ZwCreateThreadEx() 2022. 8. 29.
Session in Kernel 6 Windows 응용 프로그램 개발자라면, (xp에서 잘 실행되는) 서비스 프로그램이 vista 혹은 7에서 정상적으로 동작하지 않는 경험을 해보았을 것입니다. 이는 주로 사용자와 인터렉티브하게 동작하는 서비스 프로그램에 해당됩니다. 즉 서비스로 동작하는 프로그램에서 사용자 다이얼로그를 출력하거나, 사용자 프로그램과 서비스 프로그램 사이의 메시지 통신등을 시도 할 때 예전의 xp처럼 잘되지 않는 것 입니다. 그이유는 Kernel6에서 적용된 세션 관리 정책이 변경되었기 때문입니다. Kernel6에서 세션 관리 정책 변경은 개발 관점에서도 중요한 일이지만, 리버싱 관점에서도 매우 중요한 사건입니다. 왜냐하면 기존부터 널리 사용되던 CreateRemote Thread() API를 이용한 DLL 인젝션 방법이 .. 2022. 8. 29.
ASLR 이란? 윈도우 비스타 부터 적용된 ASLR(Address Space Layout Randomization) 기술입니다. ASLR 기술은 PE파일이 메모리에 로딩될 때 로딩 시작 주소 값을 랜덤하게 바꾸는 것입니다. 또한 해당 프로세스의 스택, 힙의 시작 주소도 실행될 때마다 랜덤 하게 바뀝니다. 즉 exe파일이 실행될 때 프로세스 메모리에서 실제 로딩 주소는 매번 달라지며, DLL 파일이 최초로 로딩될 때도 역시 메모리에서 실제 로딩 주소가 달라집니다. 이유 -> 보안을 강화 하기 위해서 이런방식을 사용합니다. 대부분의 Windows OS 보안 취약점(보통 오버플로우)들은 특정 OS, 특정 모듈, 특정 버전 에서만 동작합니다. 그러한 취약점을 노리는 exploit code에는 특정 메모리 주소가 하드 코딩되어있.. 2022. 7. 25.
PE32+ 64비트 Windows OS 에서 사용되는 실행 파일 형식인 PE32+ 64비트 Windows OS에서 프로세스의 가상 메모리 크기는 16TB입니다. 유저 영역의 크기는 하위 8TB이고, 커널 영역의 크기는 상위 8TB입니다. 이처럼 변경된 가상 메모리 크기에 맞게 기존 PE파일 포맷(PE32)이 약간 변경되었습니다. PE32+ (PE+, PE64) 64비트 Native 모드에서 실행되는 PE파일 포맷을 PE32+(혹은 PE+, PE64)라고 합니다. PE32+는 하위 호환을 위하여 기존 32비트 PE(PE32) 파일의 확장된 형태를 가집니다. 따라서 기존에 PE파일 포맷에 익숙한 분이라면 쉽게 익힐 수 있습니다. 그럼 변경된 사항을 위주로 설명해보겠습니다. IMAGE_NT_HEADERS typedef .. 2022. 7. 18.
64비트 Win 32 API 64비트 응용 프로그램을 만들 때 기존 Win32 API를 거의 그대로 사용합니다. Win32 API를 따로 제공하는 것이 아닙니다. 기존 개발자 입장에서는 새로운 API를 추가로 익혀야 하는 부담이 없다는 것이 큰 매력입니다. 이와 같은 여러가지 배려를 통하여 기존 32비트용 소스코드를 비교적 쉽게 64비트용으로 포팅할 수 있게 되었습니다. WOW64 64비트 Windows에서는 32비트 응용 프로그램과 64비트 응용프로그램이 모두 실행될 수 있습니다. 64비트 응용 프로그램은 Kernel32.dll(64비트)과 ntdll.dll(64비트)을 로딩 합니다. 반면 32비트 응용 프로그램은 kernel32.dll(32비트)과 ntdll.dll(32비트)을 로딩 하는데, 중간에서 'WOW.. 2022. 7. 15.
반응형