2016-06-13 31 views
-2

Ich kann nicht wirklich den Grund sehen, warum ich diesen Fehler bekomme, ich habe mich umgesehen und anscheinend hat es etwas mit dem Definieren einer Funktion zu tun, die nichts tut? Ich kann leider nicht sagen, worum es hier eigentlich geht, also würde jede Hilfe geschätzt werden.C++ - nicht aufgelöst Extern in DLL Injector

Hier ist meine Quellcode:

main.cpp

#include <Windows.h> 
#include <tlhelp32.h> 
#include <shlwapi.h> 
#include <conio.h> 
#include <stdio.h> 
#include <iostream> 

using namespace std; 

#define WIN32_LEAN_AND_MEAN 
#define CREATE_THREAD_ACCESS (PROCESS_CREATE_THREAD | PROCESS_QUERY_INFORMATION | PROCESS_VM_OPERATION | PROCESS_VM_WRITE | PROCESS_VM_READ) 

BOOL Inject(DWORD pID, const char * DLL_NAME); 
DWORD GetTargetThreadIDFromProcName(const char * ProcName); 

using namespace std; 

char buf[MAX_PATH]; 
LPVOID RemoteString, LoadLib; 
HANDLE Proc; 
DWORD pID; 

__int32 main() 
{ 
    pID = GetTargetThreadIDFromProcName("Program.exe"); 

    buf[MAX_PATH] = {0}; 
    GetFullPathName("DLL.dll", MAX_PATH, buf, NULL); 

    if(!Inject(pID, buf)) cout << ("Failed to inject!\n\n\n"); 
    system("pause"); 
    return 0; 
} 

BOOL Inject(DWORD pID, const char * DLL_NAME) 
{ 
    char buf[50] = {0}; 

    if(!pID) return false; 

    Proc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pID); 
    if(!Proc) return false; 

    LoadLib = (LPVOID)GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA"); 
    RemoteString = (LPVOID)VirtualAllocEx(Proc, NULL, strlen(DLL_NAME), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE); 
    WriteProcessMemory(Proc, (LPVOID)RemoteString, DLL_NAME, strlen(DLL_NAME), NULL); 
    CreateRemoteThread(Proc, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLib, (LPVOID)RemoteString, NULL, NULL); 
    CloseHandle(Proc); 
    return true; 
} 

DWORD GetTargetThreadIDFromProcName(const char * ProcName) 
{ 
    PROCESSENTRY32 pe; 
    HANDLE thSnapShot; 
    BOOL retval, ProcFound = false; 

    thSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 
    if(thSnapShot == INVALID_HANDLE_VALUE) return false; 

    pe.dwSize = sizeof(PROCESSENTRY32); 
    retval = Process32First(thSnapShot, &pe); 
    while(retval) 
    { 
     if(StrStrI(pe.szExeFile, ProcName)) return pe.th32ProcessID; 
     retval = Process32Next(thSnapShot, &pe); 
    } 
    return 0; 
} 

Der Fehler I ist die folgende bin immer:

main.obj

unresolved external symbol [email protected] referenced in function "unsigned long __cdecl GetTargetThreadIDFromProcName(char const *)" ([email protected]@[email protected]) 

Injector.exe

1 unresolved externals 

Irgendwelche Lösungen oder nur etwas Hilfe, um zu verstehen, warum dies geschieht, wäre großartig!

+1

Verlinken Sie in 'shlwapi.lib'? https://msdn.microsoft.com/en-us/library/windows/desktop/bb773439(v=vs.85).aspx – Niall

+0

Ja tat ich das, änderte nichts. –

Antwort

0

Wie in den Kommentaren erwähnt, sieht es so aus, als ob Sie nicht mit shlwapi.lib verknüpfen. Sie müssen dies tun, um StrStrI anzurufen.