2014-09-30 3 views
3

실행 파일에 코드를 삽입 할 때마다 다른 실행 파일에 간단한 실행 파일을 삽입하려고하는데 'simpleinjected.exe가 작동을 멈췄다'고 말하면 닫힙니다. 코드를 삽입하려면 CreateRemoteThread을 사용하고 있습니다. 이것은 내가 지금까지 해왔 던 것이다.C++ 코드 삽입으로 인해 충돌 한 응용 프로그램이 충돌 함

Injector.exe // 코드

#include <stdio.h> 
#include <windows.h> 

#define procId 2844 
#define executable "executable.exe" // located in same directory 

int main() 
{ 
    HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, procId); 
    LPVOID allocated = (LPVOID)VirtualAllocEx(hProc, NULL, strlen(executable), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE); 
    WriteProcessMemory(hProc, (LPVOID)allocated, executable, strlen(executable), NULL); 
    LPVOID libaddr = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 
    CreateRemoteThread(hProc, NULL, NULL, (LPTHREAD_START_ROUTINE)libaddr, NULL, NULL); 
    CloseHandle(hProc); 
    return 0; 
} 

Simpleinjected.exe 파일이 주입되는 //

#include <stdio.h> 

int main() 
{ 
    printf("Hello"); 
    return 0; 
} 

executable.exe 주입있어 파일 // 간단한 주입에 실행 가능한 실행 파일

#include <windows.h> 

int main() 
{ 
    MessageBox(NULL, "Injected successfully", "Code Injection", MB_OK); 
    return 0; 
} 

메시지가 표시되지 않고 simpleinjected.exe이 충돌합니다. 충돌은 코드가 삽입되었음을 보여 주지만 충돌하는 이유를 이해하지 못합니다.

위의 DLL과 같은 기술을 사용하는 경우 dll은 'simpleinjected.exe'에서 실행되지만 Firefox에 삽입 될 때는 작동하지 않습니다. DLL 코드는 다음과 같습니다. 사용자 정의 응용 프로그램에서 실행되지만 성공적으로 주입 되었더라도 Firefox에서는 실행되지 않습니다.

dllinject.dll

#include <windows.h> 

int message(const char *msg) 
{ 
    MessageBox(NULL, msg, "Message from Dll", MB_OK); 
    return 0; 
} 

BOOL WINAPI DLLMain(HINSTANCE hInstDll, DWORD ulReason, LPVOID lpReserved) 
{ 
    switch(ulReason) 
    { 
     case DLL_PROCESS_ATTACH: 
      message("process attach"); 
      break; 
     case DLL_THREAD_ATTACH: 
      message("thread attach"); 
      break; 
     case DLL_PROCESS_DETACH: 
      message("process detach"); 
      break; 
     case DLL_THREAD_DETACH: 
      message("thread detach"); 
      break; 
    } 
    return true; 
} 
+0

** DLL **을 다른 사람의 프로세스에 삽입하는 것만으로는 충분하지 않습니까? – WhozCraig

+0

그래서 가능하지 않습니까? – David

+0

[CreateRemoteThread/LoadLibrary] (http://www.codeproject.com/Articles/4610/Three-Ways-to-Inject-Your-Code-into-AothertheProces#section_2) 기술을 사용할 것인지 묻는다면 DLL 대신 EXE로 작업, [** 나는 그것을 ** ** 의심 (http://stackoverflow.com/questions/6283482/c-cli-use-loadlibrary-getprocaddress-with-an-exe),하지만 난 한번도 시도한 적이 없습니다. 나는'VirtualAlloc' 영역이 충분하지 않다는 것을 말할 수 있습니다. 왜냐하면'strlen (실행 가능)'은 당신의 터미네이터 char을위한 공간을 포함하고 있지 않기 때문입니다. 이것과 함께 행운을 빕니다, btw. – WhozCraig

답변

1
아래와 같은 이들의 Simpleinjected.exe

수정 코드를 포함 할 수있다. Simpleinjected.exe에 dllinject.dll을 다시 주입 해보십시오.

#include <stdio.h> 

int main() 
{ 
    while(true) 
    { 
     printf("Hello"); 
    } 
    return 0; 
} 

아래 정의를 Simpleinjected.exe와 동일하게 수정해야합니다.

#define procId 2844 //process id of Simpleinjected.exe 
#define executable "dllinject.dll" // located in same directory 
+0

그것은 simpleinjected.exe에 삽입하는 것이 가능하지만 작동하지만 파이어 폭스에 주입하지 않습니다. – David

+0

질문의 의존성 삽입 태그가 잘못되었습니다. 문제는 EXE에 주입하는 것입니다. – GameDeveloper