user2605043
user2605043

Reputation: 9

Why does CreateRemoteThread() cause a Debug Assertion Failed error?

I stumbled upon a tutorial about dll injection in c. When I run my code, it gives me a Debug Assertion Failed error when I use the CreateRemoteThread() function in my code.

I use Visual Studio Express 2015 on Windows 10

The Error:

Error I get

#include "stdafx.h"
#include <Windows.h>
#include <stdio.h>


int main(int argc, char* argv[])
{
char* buffer = "C:\\inject2.dll";

//Get the process handle passing in the process ID
int procID = 9872;
HANDLE process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, procID);

if (process == NULL) {
    printf("Error: the specified process couldn't be found\n");
}


//Get the address of the LoadLibrary function
LPVOID addr = (LPVOID)GetProcAddress(GetModuleHandle(L"kernel32.dll"), "LoadLibraryA");

if (addr == NULL) {
    printf("Error: the LoadLibraryA function was not found inside kernel32.dll library.\n");
}



//Allocate new memory region inside the process's address space
LPVOID arg = (LPVOID)VirtualAllocEx(process, NULL, strlen(buffer), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);

if (arg == NULL)
{
    printf("Error: the memory could not be allocated inside the chosen process.\n");
}



//Write the argument to LoadLibraryA to the process's newly allocated memory region
int n = WriteProcessMemory(process, arg, buffer, strlen(buffer), NULL);

if (n == 0) {
    printf("Error: there were not bytes written to the process's address space.\n");
}




//Inject our DLL into the process's address space
HANDLE threadID = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)addr, arg, NULL, NULL);

if (threadID == NULL)
{
    printf("Error: the remote thread could not be created.\n");
}

else
{
    printf("Success: the remote thread was succesfully created.\n");
}


//Close the handle to the process because we have already injected the DLL

CloseHandle(process);
getchar();

return 0;
}

Upvotes: 0

Views: 435

Answers (1)

keithmo
keithmo

Reputation: 4943

If you're using the DLL from the link you supplied, it's probably failing because it's attempting to write to the root of the system drive ("C:\\temp.txt",). Change this path to something your target process can write to.

Upvotes: 1

Related Questions