2011-03-02 7 views
0

여기 내 로프 끝에 있습니다. 저는이 정보를 얻기 위해 3 주 동안 노력했습니다. 계속하기 전에 여기에 악성 코드를 쓰지 않고 있음을 알려 주시기 바랍니다. 그러나 나는 악성 코드의 행동을 감시하는 이진 분석 도구를 작성하고있다.후킹 또는 모니터링 서비스 생성

내가 달성하고자하는 것은 CreateServiceW 및 CreateServiceA를 후크하거나 모니터링하는 것입니다. 그 이유는 CreateService를 호출 한 프로세스와 호출로 서비스로 등록 된 바이너리를 알고 싶습니다.

나는 LPC 메시지를 가로 채기위한 후크 ZwRequestWaitReplyPort 작성, advapi32.dll 용 프록시 DLL 작성 및 CreateService 기능을위한 인라인 후크 작성에 이르기까지 모든 것을 시도했다. 이러한 접근 방식 중 어느 것도 결과를 얻지 못했습니다. 프록시 DLL은 테스트에서 유망했지만 system32의 공식 DLL이 프록시 (BSOD)로 바뀌면 작동하지 않았습니다. 인라인 훅은 DLL이 속한 메모리의 매핑 된 영역에 대한 쓰기 권한을 얻을 수 있다면 작동합니다. 그러나 시간에 관계없이 필자는 필사적으로 대안을 필요로합니다.

SetWindowsHookEx를 살펴 봤는데 프로세스에서 services.exe로 보낸 메시지를 가로 챌 수 있다고 생각됩니다.하지만 확실하지 않습니다.

누구든지 좋은 방향으로 나를 가리킬 수 있습니까? 나는 당신에게 간청하고 있습니다.

+0

레지스트리를 연결/모니터링 할 수 없습니까? 서비스 생성은 항상 HKLM \ SYSTEM \ etc ...을 수정합니다. –

+0

나는 레지스트리가 이미 연결되어있다. 아쉽게도 서비스가 CreateService 또는 StartService를 통해 등록되면 레지스트리 수정을 수행하는 것은 SCManager (services.exe)입니다. 내가 원하는 것은 누가 CreateService를 호출했고 어떤 바이너리가 등록되었는지 = D이다. – deusprogrammer

+0

내 직감이 잘못되지 않았다면 ZwRequestWaitReplyPort가 올바른 방법이 아닙니다. (나는 무엇인지 모르겠습니다). ZwRequestWaitReplyPort는 RPC API이므로 메시지 전달 시스템 만 제공합니다. 수신 기능을 찾아야합니다 (다른 사람이 서비스를 원격으로 시작하면 ZwRequestWaitReplyPort에 걸려 넘어지지 않기 때문입니다). – DiGMi

답변

0

"DLL이있는 메모리의 매핑 된 영역에 대한 쓰기 권한을 얻을 수 있으면 인라인 훅이 작동합니다."

완전히 제어하는 ​​시스템 인 경우 메모리에 대한 쓰기 권한이없는 이유는 무엇입니까?

VirtualProtect를 사용하여 권한을 RWX로 변경하고 연결하십시오. ADVAPI32 CreateService 루틴은 api-ms-service-management-l1-1-1.dll을 통해 sechost.dll로 전달되는 스텁 일뿐입니다 (MinWin) 그래서 이미 쉬운 호출 명령이 있습니다.