C++ - DLL 注入器中未解析的外部 [重复]

C++ - Unresolved External in DLL Injector [duplicate]

提问人:Reece Ward 提问时间:6/13/2016 更新时间:6/13/2016 访问量:342

问:

我真的看不出我收到这个错误的原因,我已经看过了,显然这与定义一个什么都不做的功能有关?不幸的是,我真的无法说出这里的问题是什么,所以任何帮助将不胜感激。

这是我的源代码:

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; 
}

我收到的错误如下:

main.obj

unresolved external symbol __imp__StrStrIA@8 referenced in function "unsigned long __cdecl GetTargetThreadIDFromProcName(char const *)" (?GetTargetThreadIDFromProcName@@YAKPBD@Z)

喷油器 .exe

1 unresolved externals

任何解决方案或只是一些帮助来理解为什么会发生这种情况都会很棒!

C++ DLL 代码注入 未解析外部

评论

1赞 Niall 6/13/2016
你链接进来吗?msdn.microsoft.com/en-us/library/windows/desktop/......shlwapi.lib
0赞 Reece Ward 6/13/2016
是的,我这样做了,什么都没有改变。

答:

0赞 Sean 6/13/2016 #1

如评论中所述,看起来您没有与 .您需要执行此操作才能调用 StrStrIshlwapi.lib