심플스 - 프로그램과 책 이야기로 가득한 곳, (Simples.Kr)

  

 
이미 알고 계신분들이 많으시겠지만 Windows XP SP2이상부터 MS 핫패칭 기능이 들어가 있습니다.
따라서 이에 대해 특정 함수에 대한 기계어 코드를 검사함으로써 Windows XP SP2이상인지 확인 할 수 있습니다.

다음은 해당 코드입니다.

#include <Windows.h>

BOOL IsWindowsXpSp2AndLater()
{
    HMODULE hModule;
    UCHAR *pBitBltAddress;

    hModule = ::LoadLibrary(_T("GDI32.DLL"));
    if (hModule == NULL)
    {
        return FALSE;
    }
    pBitBltAddress = (UCHAR *)::GetProcAddress(hModule, "BitBlt");
    if (pBitBltAddress == NULL)
    {
        return FALSE;
    }
    //
    // MS HotPatching이 Windows XP SP2 이상부터 적용되었으므로 이에 대한 기계어 코드를 확인합니다.
    //
    if (((*(pBitBltAddress - 5)) == 0x90) && // nop
        ((*(pBitBltAddress - 4)) == 0x90) && // nop
        ((*(pBitBltAddress - 3)) == 0x90) && // nop
        ((*(pBitBltAddress - 2)) == 0x90) && // nop
        ((*(pBitBltAddress - 1)) == 0x90) && // nop
        ((*pBitBltAddress) == 0x8B) && ((*(pBitBltAddress + 1)) == 0xFF) // mov edi, edi
        )
    {
        return TRUE;
    }
    return FALSE;
}

int _tmain(int argc, _TCHAR* argv[])
{
    if (IsWindowsXpSp2AndLater() == TRUE)
    {
        printf("버전이 Windows XP SP2 이상입니다. ( 또는 Windows 2003 Server 이상 )\n");
    }
    else
    {
        printf("버전이 Windows XP SP2 아래에 운영체제입니다.\n");
    }
    return 0;
}

해당 함수가 이미 훅킹을 당했을 경우 코드에 변조가 있을 수 있으므로 주의해야합니다.

profile

esniper

2010.09.05 21:13:35

GDI32.DLL에서 체크하는 방식이네요~

취약점이 있는 버전을 사용중인지 체크도 가능하겠군요.

List of Articles
번호 제목 글쓴이 날짜 조회 수
163 Linux Tip 리눅스 기반 오픈 소스 사이트 모음 삽질신 2009-11-16 73369
162 Linux Tip VirtualBox에 우분투 설치 후에 내부 네트워크 접속 설정하기 file esniper 2010-09-10 35761
161 Windows Research IE Cache 경로 변경하기 lain 2011-06-09 31028
160 Windows Research 화면캡쳐방지는 어떻게 구현될까? [3] lain 2010-09-04 29576
159 Windows Research VMWare 탐지 기법 우회 - 2 [2] lain 2011-04-04 29474
158 PHP Tip php 파싱 라이브러리 - snoopy esniper 2009-03-26 21119
157 Linux Tip Directory index forbidden by Options directive 삽질신 2009-11-16 20783
156 Linux Tip VirtualBox에서 오른쪽 CTRL키 사용하기(VitualBox 호스트키) file [2] esniper 2010-09-10 19978
155 Windows Tip SSH 터널링 - putty의 plink 사용예 esniper 2009-03-26 19924
154 문서자료 고품질의 무료 아이콘들 [3] esniper 2010-09-08 19743
153 문서자료 json 문법 체크 사이트 Lyn 2012-02-28 19342
152 PHP Tip mysql_insert_id() - 마지막 insert 된 아이디 값 esniper 2009-03-26 18814
151 Linux Tip 우분투 설치 후 putty에서 한글 안 깨지도록 설정하기 file esniper 2010-09-10 17278
150 Windows Research 커널레벨에서 IAT Hook lain 2011-06-11 17143
149 Linux Tip 우분투 ssh or mysql 서버 접속지연이 있는 경우 해결책 esniper 2010-09-10 16690
148 Windows Research SetEvent 함수는 언제 실패할까? lain 2010-09-04 16416
147 Linux Tip 우분투에 IRC서버 설치후 닉네임 길이와 동접자 조절. [1] 오랑캐꽃 2010-11-26 16243
146 Windows Research 유저 레벨에서 API Hook 1부 file [1] lain 2010-09-03 16208
145 Windows Research Sysinternals - Filemon source code file [5] lain 2010-09-04 15794
144 Linux Tip Wget 완벽 정리 esniper 2009-03-26 15376

  • 이용약관
  • 개인정보취급방침
  • 사이트맵