2012-02-08 4 views
-1

나는 C에서 윈도우에서 기본 dll 후킹을위한 빠른 가이드를 찾고 있는데, 찾을 수있는 모든 가이드는 C가 아니거나 윈도우가 아닙니다. C 및 Windows에서 후킹

나는 원리를 이해

(DLL은 윈도우의 일부지만, 타사 프로그램이 아닙니다),하지만 난 그것에 대해 이동하는 방법을 모르겠어요.

내가 훅 할 필요가있는 것을 보여주는 C++ 사전 소스 코드가 있지만 C 용 라이브러리가 없거나 처음부터 연결하는 방법을 알고 있습니다.

+1

후킹 무엇을 원하십니까? 도서관 호출? 예를 들어 시스템 이벤트. 마우스 및 키보드 활동? 다른 것? – Rup

+0

당신이하고 싶은 것이 명확하지 않지만, 당신이 의미하는 바를 "구부리기"를한다면, 그것은 매우 허약하고, 거꾸로, 해킹이되지 않는 연습입니다. 후크는 주문 문제로 인해 여러 개의 후크가 설치되어있는 경우 (심지어 나중에 제거되는 경우에도) 모 두 중단됩니다. 1980 년대 시대의 DOS TSR에서 잘못된 솔루션을 복제하는 방법을 묻는 대신 달성하려는 목표에 관한 질문을 게시하십시오. –

+1

C++ 코드는 무엇을합니까? 후킹과 관련된 Windows API는 C 및 C++에서 동일하게 적용됩니다. 그것들은 모두 C 함수입니다. –

답변

0

라이센스는 매우 제한적입니다.

DLL의 특정 기능을 연결하기 만하려는 경우 DLL을 연결하려는 응용 프로그램에 DLL 배치 공격을 사용하는 것이 비용이 적습니다. 이렇게하려면 동일한 내보내기 집합을 DLL에 제공하고 나머지는 가로 채고 방해하지 않는 파일을 전달하십시오. 그것이 C 또는 C++이든 상관 없습니다. 이것은 종종 많은 수의 수출이 있어도 기술적으로 가능하지만 수출 된 데이터에는 제한이 있으며 사용 된 호출 규칙을 알지 못하거나 식별 할 수없는 경우에는 제한적입니다.

당신이 해야 사용 후킹이 실행 된 응용 프로그램의 주 스레드가 여전히 일시 중단 된 상태 코드를 가리 키도록 IAT를하는 실행 프로그램을 작성하고 (로더에 의해) 미리 채워 다시 작성 등 다양한 방법이있다 (각각 표시되는 경우 CreateProcess 플래그). 그렇지 않으면 점프를 올바르게하기 위해 최소한 조립 지식이 필요합니다. 당신이 패치를위한 적절한 오프셋을 계산할 수있게 해주는 충분히 자유로운 디스어셈블러 엔진이 있습니다 (예를 들어 다중 바이트 연산 코드의 중간에 패치하기를 원하지 않기 때문에).

댓글에 다시 쓴 내용 (키워드 : "DLL 후킹")을 포함하도록 질문을 다시 편집 할 수 있습니다.

+0

DLL을 교체하는 것은 옵션이 아닙니다. 꽤 큰데, 이것은 프로그램의 서비스 약관을 위반할 것입니다. (네트워크 패킷을 모니터링하는 것이 아니라 요점을 연결하는 것입니다.) [Win32 CodeHook] (http : // www.kbasm.com/codehook.html) 라이브러리가 유용할까요? –

+0

어디서나 "바꾸기"라고 적었습니까? "DLL 배치 공격"(또는 "DLL 도용"이라고도 함)이 무엇인지 웹 검색을 수행하십시오.) ... 가능하면 파일을 이동하지 말고 자신의 파일을 먼저 검사 할 위치로 옮길 필요가 있습니다 로더와 API의 메커니즘에 의해 'LoadLibrary'가됩니다. 이미 준비가되어있는 많은 라이브러리가 있지만, 어느 것이 당신의 필요에 적합한 지 (라이센스면에서나 기술적 인 관점에서) 판단하기는 어렵습니다. BTW : 원래 (또는 편집 된) 질문에 하나씩 지금 가져 오는 모든 제약 조건을 추가한다면 정말 좋을 것입니다. – 0xC0000022L

0

LoadLibrary()로 DLL로드하기

이것은 잘 알려져 있지 않습니다.

악명 높은 악성 코드 "마녀"또는 "hctiw"를 찾아 볼 수 있습니다. 그가 너무 악명 높은 이유가 있습니다 - LoadLibrary()로 DLL을로드했습니다. 그런 나쁜 습관을 자제 해보십시오.

+3

질문을 읽지 않은 것 같습니다. –