2010-12-03 4 views

답변

0

SetWindowsHookEx 전혀 도움이되지 않습니다 ... 나는 약 SetWindowsHookEx과 친구를 알고 있지만 ... 나는 아직도 UnixLD_PRELOAD만큼 간단한 방법이 있다는 희망을 너무 복잡이 그 - 그것은 서로 다른 기능을 제공합니다.

https://web.archive.org/web/20080212040635/http://www.codeproject.com/KB/system/RegMon.aspx이 도움이되는지 확인하십시오. SysInternals의 RegMon은 매우 복잡한 방식으로 커널 모드 드라이버를 사용합니다.

업데이트 : 저희 회사는 귀찮은 레지스트리 작업을 추적 할 수있는 CallbackRegistry 제품을 제공합니다. 그리고 BTW는 요청시 무료 비영리 라이센스를 제공합니다 (사례별로 승인 될 수 있음). http://www.dreamincode.net/code/snippet407.htm

그것은 당신이있어 일단 이러한 유형의 물건을 꽤 쉽게 : 나는 여기에 DLL 주입 조각 당신을 제공 할 것입니다, 그러나 http://en.wikipedia.org/wiki/DLL_injection

:

2

여기에 DLL 주입의 이론에 최대 읽기 외부 응용 프로그램의 메모리에, 주입시, 프로세스의 일부가 될 수도 있습니다.

당신이 찾고있는 것이라고 생각하는 detouring이라는 것이 있습니다. 단순히 함수를 후크하는 것으로, 그 프로세스가 그것을 호출 할 때 대신 자신의 함수를 실행합니다. 당신이

(http://msdn.microsoft.com CreateRegKeyEx을 통해 자신의 함수를 작성하고자한다면 그래서

(함수의 끝에서 함수를 호출,이 충돌하지 않도록하려면) /en-us/library/ms724844%28v=vs.85%29.aspx)

그것은 다음과 같이 보일 수 있습니다

LONG WINAPI myRegCreateKeyEx(HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved, LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition) 
    { 
      //check for suspicious keys being made via the parameters 
      RegCreateKeyEx(hKey, lpSubKey, Reserved, lpClass, dwOptions, samDesired, lpSecurityAttributes, phkResult, lpdwDisposition); 
    } 

당신은 여기에 아주 잘 작성 우회 라이브러리라는 DetourXS를 얻을 수 있습니다 : http://www.gamedeception.net/threads/10649-DetourXS

는 여기 사용하여 우회를 설정하는 방법에 대한 자신의 예제 코드입니다 :

#include <detourxs.h> 

    typedef DWORD (WINAPI* tGetTickCount)(void); 
    tGetTickCount oGetTickCount; 

    DWORD WINAPI hGetTickCount(void) 
    { 
     printf("GetTickCount hooked!"); 
     return oGetTickCount(); 
    } 

    // To create the detour 
    oGetTickCount = (tGetTickCount) DetourCreate("kernel32.dll", "GetTickCount", hGetTickCount, DETOUR_TYPE_JMP); 

    // ...Or an address 
    oGetTickCount = (tGetTickCount) DetourCreate(0x00000000, hGetTickCount, DETOUR_TYPE_JMP); 

    // ...You can also specify the detour len 
    oGetTickCount = (tGetTickCount) DetourCreate(0x00000000, hGetTickCount, DETOUR_TYPE_JMP, 5); 

    // To remove the detour 
    DetourRemove(oGetTickCount); 

을 그리고 당신은 말할 수없는 경우에, 그 조각은 (GetTickCount를 후킹한다)와 함수가 호출 될 때마다, 그는 GetTickCount를 구부려 쓴다 " ! " - 그런 다음 GetTickCount 함수를 실행합니다.

정보가 흩어져서 죄송합니다. 도움이되기를 바랍니다. :) - 저는 이것이 낡은 질문이라는 것을 알고 있습니다. -

0

대부분의 winapi 호출은 모듈 식 호출을위한 심볼 테이블 항목을 생성합니다. 따라서이 코드를 연결하기가 매우 쉽습니다. IAT 주소를 덮어 쓰면됩니다. MSDetours와 같은 것을 사용하면 몇 줄의 코드에서 안전하게 수행 할 수 있습니다. MSDetours는 또한 사용자 지정 dll을 대상 프로세스에 삽입하여 연결을 할 수있는 도구를 제공합니다.

관련 문제