후킹 예제

    다음 예제에서는 Microsoft .NET 프레임워크를 사용하여 Microsoft Windows의 키보드 이벤트에 연결합니다. 제공된 API 후크가 전역이기 때문에 Windows 작업 관리자와 유사한 기능을 가진 다른 프로그램에서 동일한 결과가 표시되는 것을 볼 수 있습니다. 예를 들어, 마크 루시노비치의 프로세스 탐색기입니다. 후크는 독자의 관심을 끌기 위해 읽는 에세이의 오프닝 문장 (일반적으로 첫 번째 문장)입니다. 질문, 견적, 통계 또는 일화인 몇 가지 다른 유형의 후크를 사용하여 수행할 수 있습니다. 후크는 용지의 전체 주제와 관련이 있어야 합니다. 다음은 각 후크 유형의 몇 가지 예입니다. 이봐요 여러분! 이 두 번째 튜토리얼에서 나는 함수를 연결하고 우리가 원하는 것을 할 수 있도록하는 방법을 보여줍니다. 이 경우, 우리는 예를 들어 게임 프로세스에 주입되는 안티 치트 „dll“을 방지하기 위해 로드 라이브러리를 연결하려고합니다. IAT(가져오기 주소 테이블)를 사용하여 winapi 함수를 연결하는 방법에 대한 작은 예제에서 대상 함수를 우회하기 위해 덮어씁니다.

    그리고 원래 대상 함수를 어떻게 호출합니까? 대부분의 경우 우회 함수 내에서 원래 함수를 호출해야 합니다. MinHook은 원래 함수를 호출하기위한 목적으로 „트램폴린 함수“라는 기능을 가지고 있습니다 (다니엘 피스텔리는 „브리지 함수“라고 부릅니다). 이것은 원래 함수로 다시 시작하기위한 후행 무조건 점프와 원래 함수의 프롤로그의 복제입니다. 실제 사례는 여기에 있습니다. 그들은 MinHook이 실제로 만드는 것입니다. 이것은 표준 API 후크의 프레임 워크입니다. 이 모든 것은 프로세스에 주입될 DLL에 있습니다. 이 예제에서는 MessageBoxW 함수를 연결하기로 결정했습니다. 이 DLL이 주입되면 user32.dll에서 MessageBoXW 함수의 주소를 얻은 다음 후킹이 시작됩니다. BeginRedirect 함수에서 무조건 상대 점프(JMP) opcode(0xE9) 명령에는 점프할 거리가 포함됩니다.

    어셈블리 코드의 관점에서, 이것은 다음과 같습니다 : 먼저 함수 후킹을 처리하는 DLL을 만듭니다. 아래 예제는 소켓 송수신 함수를 연결합니다. 후킹이 무엇인지 모르는 사람들을 위해 : 후킹은 예를 들어 프로그램의 코드 흐름을 변경하는 데 매우 유용 할 수있는 프로세스입니다. 나는 쉬운 방법으로 그것을 설명 할 것이다 : 우리가 강이있다면 상상해보십시오. 우리는 강에서 몇 가지를 제출하고 아마도 몇 가지 새로운 물건을 추가 할 것입니다 : 후킹은 악성 코드에 의해 사용될 수 있습니다. 예를 들어, 루트킷은 API 호출의 출력을 위조하여 자신을 보이지 않게 만들려고 하는 소프트웨어 조각으로, 종종 후킹 기술을 사용합니다. 또한 위의 예제에서 hook 함수(hkVirtualFn1)는 멤버 함수 자체가 아니므로 __thiscall 호출 규칙을 사용할 수 없습니다. __fastcall은 인수에 대한 ECX 레지스터를 살펴보는 유일한 다른 호출 규칙이므로 대신 사용해야 합니다. 우회하는 함수는 함수의 하드코딩된 주소를 가리키기만 하면 우회할 준비가 됩니다. 이 특정 예제에는 DWORD를 매개 변수로 하는 void 함수가 있습니다. API 후킹 API 후크 형식Applint_DlLsMhook 라이브러리구현 예제 소스 함수 후 윈도우 후크 설정 UnhookingAPI 후킹 샘플 실행제한참조 현재 문서는 쉬운 접근 방식에 전념 전역 API 후크를 시스템 전체 규모로 설정합니다. DLL 주입의 경우 AppInit_DLL이라는 레지스트리 키를 활용하고 Windows에서 API 후킹을 수행하여 Mhook 라이브러리를 활용합니다.

    이 문서에서는 또한 DLL 주입 예제를 제공 합니다.: 우리는 당신이 쉽게 실행 중인 프로세스 목록에 보이지 않는 calc.exe 프로세스를 만들 수 있는 방법을 보여 줄 것 이다. 그것은이 접근 방식에 관한 것입니다. 이상적으로는 IAT(가져오기 주소 표) 후킹과 같은 고급 메서드가 후크가 제자리에 유지되고 언제든지 제거할 수 있다는 점에서 더 좋습니다. 아래 샘플 코드를 살펴보십시오. 그게 전부에요. MessageBoxW() 함수를 후크하고 텍스트를 수정합니다.