2011-11-15 4 views
0

최근에 저는 DLL 주입에 관한 기사를 읽었으며 꽤 잘 이해하고 있습니다.CreateRemoteThread, WriteProcessMemory, VirtualAllocEx - 왜 사용합니까?

그러나 내가 이해하지 못하는 이유는 CreateRemoteThread, WriteProcessMemory (다른 프로세스의 메모리에 쓸 수 있음) 및 VirtualAllocEx (다른 프로세스의 컨텍스트에서 메모리를 할당 할 수 있음)와 같은 API가 처음에 구현되었습니다.

이러한 API에 대한 원래의 필요성은 무엇입니까? 그냥 궁금해서.

답변

4

WriteProcessMemory은 프로세스 메모리를 안전하게 작성해야하는 링 3 디버거 용으로 가장 일반적으로 INT 3 중단 점 또는 사용자가 제공 한 메모리 편집을 위해 만들어졌습니다. 동일한 라인을 따라

, CreateRemoteThread 또한 디버깅 목적을 위해 사용될 수 있지만, MSDN은 CreateRemoteThread 도움 려 할 좀더 :

이 함수의 일반적인 사용 방법으로 나사를 삽입하는 것이다 중단을 발행하기 위해 디버깅 중입니다.

  • 이 멀티 스레드 애플리케이션에 단일 스레드 응용 프로그램을 변환 : 여분의 스레드가 사람 응용 프로그램을 디버깅에 혼란이 기술을 사용하여 여러 가지 부작용이 있기 때문에 그러나, 이러한 사용은 권장되지 입니다 .
  • 프로세스가 의 타이밍과 메모리 레이아웃이 변경됩니다.
  • 그 결과 각 DLL의 진입 점이 호출되어 프로세스에 있습니다.

IIRC는 CreateRemoteThread 또한 처리기는 PEB에 기억 된 바와 같이 대상 프로세스에서 호출을 요구하는 통상 SetExceptionHandler 설정 애플리케이션 기본 expection 핸들러, 후크 디버거에 의해 사용된다.

은 Windows 가상 메모리 시스템이 작동하는 방식이며, 현재 프로세스, 하위 프로세스 또는 원격 프로세스에 할당 할 컨텍스트가 필요합니다. VirtualAlloc은 사실 Ex 변형의 래퍼를 통과하는 것일 뿐이며 호출자 프로세스의 핸들이 사용될 것임을 나타내는 특수 상수를 전달합니다.