2012-05-19 4 views
0

후크를 사용하여 다른 프로세스의 메모리를 실행 한 다음 DLL 주입과 같은 작업없이 뒤로 이동할 수 있습니까? 프로세스 A은 (a 후크 사용) foo에 동일한 프로토 타입 절차 bar을 갖는다 B 절차 foo 공정이있는 경우 예를 들어프로세스 간 후킹

는 두 프로세스를 가정 bar에 JMP하는 foo 후크 것이 가능한 실행 ?

편집 :이 작업은 Windows에서 수행해야합니다.

+1

[이 질문과 그것에 대한 내 답변] (http://stackoverflow.com/q/10487165/968261). –

+0

Btw, 우린 Windows 얘기 야, 그렇지? –

+0

@Alex - 예, Windows. 나는 거기에 그것을 추가 할 것이다. 지금 링크를 방문하고 있습니다. – Qix

답변

2

정의 프로세스는 샌드 박스입니다. 실수로 주소 공간 외부로 빠져 나와 SIG_USR 신호로 잡히고 세그먼트 오류로보고되면 세그먼트 화 오류로보고됩니다.

공유 메모리 -shmem, 파이프 및 소켓과 같은 프로세스 간 통신 메커니즘이 있습니다. 프로세스간에 통신하는 데 사용합니다.

편집 : 원격 메소드 호출을 제공하는 CORBA와 같은 RPC (원격 프로 시저 호출) 메커니즘도 사용할 수 있습니다.

+0

공유 메모리를 실행할 수 있습니까? – Qix

+0

@ Di-0xide : 실행 파일로 표시하는 경우. – Dani

+0

@Dani : 공유 메모리를 실행 파일로 표시하는 방법을 잘 모르겠습니다. 일반적으로 실행 파일의 .txt는 메모리에로드되고 실행 만 가능합니다. 할 수있는 일은, 우리는 os에서 일부 전단 메모리를 얻을 수 있고 거기에 몇 가지 지침을 작성하고 코드에서 그것을 실행하기 위해 그 주소로 점프합니다. 하지만 여전히이 공유 메모리에 액세스하는 모든 프로세스와 프로세스에만 표시됩니다. –

1

Windows의 각 프로세스 (유닉스뿐만 아니라 대다수의 다른 최신 OS)는 일반적으로 서로 다른 실제 주소에 매핑되는 자체 가상 메모리 공간을 가지고 있습니다. 결과적으로 다른 프로세스의 주소 공간에 DLL을 삽입하는 것이 그 프로세스에서 아무 것도 연결하지 않는 유일한 방법입니다. 다른 한편으로는 일단 그 과정에서 DLL을 얻으면 거기에서 할 수있는 일들이 많이 있습니다. 자신 만의 스레드를 생성하고 Windows 메시지 (Windows에서 가장 쉬운 통신 방법 중 하나)를 사용하여 상위 프로세스와 통신하십시오.