C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[65828] 검색하다찾은건데요 함수후킹함수때문에
박목월 [godori21] 1594 읽음    2011-12-29 21:13
BOOL hook_by_code(LPCTSTR szDllName, LPCTSTR szFuncName, PROC pfnNew, PBYTE pOrgBytes)
{
          FARPROC pfnOrg;
          DWORD dwOldProtect, dwAddress;
          BYTE pBuf[5] = {0xE9,0,};
          PBYTE pByte;

          // 후킹대상 API 주소를 구한다
         pfnOrg = (FARPROC)GetProcAddress(GetModuleHandle(szDllName), szFuncName);
         pByte = (PBYTE)pfnOrg;
         // 만약 이미 후킹되어 있다면 return FALSE
         // OpCode 0xE9 는 JMP 이므로
          if(pByte[0] == 0xE9)
               return FALSE;
         // 5byte 패치를 위하여 메모리에 WRITE 속성 추가
         VirtualProtect((LPVOID)pfnOrg, 5, PAGE_EXECUTE_READWRITE, &dwOldProtect);
         // 기존 코드 5byte 백업
          memcpy(pOrgBytes, pfnOrg, 5);
        // JMP 주소계산 (E9 XXXXXXXX)
        // XXXXXXXX => 점프할 주소  - 현재 명령어 주소  - 5
        // 마지막에 5를 빼주는 이유는 JMP 명령어 자체 길이 5 Byte를 보정해주는것임 
         dwAddress  = (DWORD)pfnNew - (DWORD)pfnOrg - 5;
         memcpy(&pBuf[1], &dwAddress, 4);
         // HOOK - 5 byte 패치(JMP XXXXXXXX)
         memcpy(pfnOrg, pBuf, 5);
         //메모리 속성 복원
         VirtualProtect((LPVOID)pfnOrg, 5, dwOldProtect, &dwOldProtect);
          return TRUE;
}
BOOL unhook_by_code(LPCTSTR szDllName, LPCTSTR szFuncName, PBYTE pOrgBytes)
{
         FARPROC pFun;
         DWORD dwOldProtect;
        //API 주소를 구한다 
        pFun = GetProcAddress(GetModuleHandle(szDllName), szFuncName);
       // 원래 코드 5 byte를 덮어쓰기 위하여 메모리에 WRITE 속성을 추가한다
       VirtualProtect((LPVOID)pFunc, 5, PAGE_EXECUTE_READWRITE, &dwOldProtect);
       // unhook
      memcpy(pFunc, pOrgBytes, 5);
       //메모리 속성 복원
      VirtualProtect((LPVOID)pFunc, 5, dwOldProtect, &dwOldProtect);
      return TRUE;
}

이함수가 함수후킹 강좌로 나와있었는데요
dll을불러와서 함수를 가저오는거같은데
함수를 가저오는거 같은데  이함수를 쓰면 함수후킹이 되는거 맞나요?

함수후킹이 메모리에서 하는행동일거라 예산햇는데
dll에서 가저오는거같네요 사용한다해도 해당dll에 어떤함수가 있는지를 모르는데
어떻게 가저와야할가요? 이걸모르겠네요

+ -

관련 글 리스트
65828 검색하다찾은건데요 함수후킹함수때문에 박목월 1594 2011/12/29
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.