실행 파일에 코드를 삽입 할 때마다 다른 실행 파일에 간단한 실행 파일을 삽입하려고하는데 '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;
}
** DLL **을 다른 사람의 프로세스에 삽입하는 것만으로는 충분하지 않습니까? – WhozCraig
그래서 가능하지 않습니까? – David
[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