CreateRemoteThread == virus wtf?
-
hi Jochen,
nein Unicode klappt noch nicht.
wieso ist TCHAR falsch?typedef LPVOID (*fpGetProcAddress)(HMODULE , TCHAR*); msdn: FARPROC WINAPI GetProcAddress( __in HMODULE hModule, __in LPCSTR lpProcName // pointer zu char array und da unicode TCHAR. );
-
Weil Du die Doku nicht lesen kannst!?
Warum steht in der MSDN LPCSTR und bei Dir TCHAR*?
-
"kalt", "kalt"
etwas "wärmer" wirds, wenn Du dort suchst, wo der zweite Parameter als fixen Text-String an die besagte Funktion übergeben wird (kommt nur einmal in Deinem Code vor)
na, dann müßtest Du drauf kommen wo der Unicode-Fehler steckt!
Martin
-
Na, dass ist erst der Folgefehler

Das hätte ja dann der Compiler bemängelt...Und auch die falsche definition des "func" Feldes in der Struktur...
-
jetzt geht es nicht mal mehr mit ASCII

obwohl ich LPCSTR verwendet habe.typedef HINSTANCE (__stdcall *fpLoadLibrary) (TCHAR*); typedef LPVOID (__stdcall *fpGetProcAddress)(HINSTANCE, LPCSTR); typedef void (*fpFunktion)(void); struct INJECTSTRUCT { fpLoadLibrary LoadLibrary; fpGetProcAddress GetProcAddress; TCHAR path[255]; LPCSTR func; }; DWORD WINAPI threadstart(LPVOID addr) { HINSTANCE hDll; fpFunktion funktion; INJECTSTRUCT * is = (INJECTSTRUCT*)addr; hDll = is->LoadLibrary(is->path); funktion = (fpFunktion)is->GetProcAddress(hDll, is->func); funktion(); return 0; } void threadend() { } bool EnableDebugPrivilege() { TOKEN_PRIVILEGES priv; HANDLE hThis, hToken; LUID luid; hThis = GetCurrentProcess(); OpenProcessToken(hThis, TOKEN_ADJUST_PRIVILEGES, &hToken); LookupPrivilegeValue(0, TEXT("seDebugPrivilege"), &luid); priv.PrivilegeCount = 1; priv.Privileges[0].Luid = luid; priv.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, false, &priv, 0, 0, 0); CloseHandle(hToken); CloseHandle(hThis); return true; } HANDLE InjectDll(unsigned ProcessId, TCHAR *DllFile, LPCSTR FunctionName) { if(ExistFile(DllFile) == false) { MessageBox(0, TEXT("Can't find the DLL file!"), szAppName, MB_ICONERROR); return 0; } INJECTSTRUCT is; _tcscpy_s(is.path, DllFile); is.func = FunctionName; DWORD funcsize = (DWORD)threadend - (DWORD)threadstart; EnableDebugPrivilege(); HINSTANCE hDll = LoadLibrary(TEXT("KERNEL32")); if(hDll == NULL) { MessageBox(0, TEXT("LoadLibrary failed!"), szAppName, MB_ICONERROR); return 0; } is.LoadLibrary = (fpLoadLibrary)GetProcAddress(hDll, "LoadLibraryA"); is.GetProcAddress = (fpGetProcAddress)GetProcAddress(hDll, "GetProcAddress"); if(is.LoadLibrary == NULL || is.GetProcAddress == NULL) { MessageBox(0, TEXT("GetProcAddress failed!"), szAppName, MB_ICONERROR); return 0; } HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessId); if(hProc == NULL) { MessageBox(0, TEXT("OpenProcess failed!"), szAppName, MB_ICONERROR); return 0; } LPVOID start = VirtualAllocEx(hProc, 0, funcsize+sizeof(INJECTSTRUCT), MEM_COMMIT, PAGE_EXECUTE_READWRITE); if(start == NULL) { MessageBox(0, TEXT("VirtualAllocEx failed!"), szAppName, MB_ICONERROR); return 0; } if(WriteProcessMemory(hProc, start, (LPVOID)&is, sizeof(INJECTSTRUCT), NULL) == 0) { MessageBox(0, TEXT("WriteProcessMemory failed!"), szAppName, MB_ICONERROR); return 0; } LPVOID thread = (LPVOID)((DWORD)start+sizeof(INJECTSTRUCT)); if(WriteProcessMemory(hProc, thread, (LPVOID)threadstart, funcsize, NULL) == 0) { MessageBox(0, TEXT("WriteProcessMemory failed!"), szAppName, MB_ICONERROR); return 0; } HANDLE threadID = CreateRemoteThread(hProc, 0, 0, (LPTHREAD_START_ROUTINE)thread, start, 0, 0); if(threadID == NULL) { MessageBox(0, TEXT("CreateRemoteThread failed!"), szAppName, MB_ICONERROR); return 0; } if(CloseHandle(hProc) == 0) { MessageBox(0, TEXT("CloseHandle failed!"), szAppName, MB_ICONERROR); return 0; } return threadID; }
-
Du solltest zuerst mal die Grundlagen lernen...
Du deklarierst jetzt in Deiner Struktur einen Pointer und kein Feld, wo man Zeichen ablegen kann...
Ersetze LPCSTR in der *Struktur* (und nur da) durch char[255]
-
jetzt geht es mit ASCII wieder aber nicht mit UNICODE.
struct INJECTSTRUCT { fpLoadLibrary LoadLibrary; fpGetProcAddress GetProcAddress; TCHAR path[255]; char func[255]; }; HANDLE InjectDll(unsigned ProcessId, TCHAR *DllFile, LPCSTR FunctionName) { if(ExistFile(DllFile) == false) { MessageBox(0, TEXT("Can't find the DLL file!"), szAppName, MB_ICONERROR); return 0; } INJECTSTRUCT is; _tcscpy_s(is.path, DllFile); strcpy_s(is.func, FunctionName); DWORD funcsize = (DWORD)threadend - (DWORD)threadstart; [...]
-
Was denn?
Du nimmst Visual Studio her, stellst in den general project properties all configurations auf multibyte character set und verwendest dann kein L oder _T oder sonstigen unnötigen Mist sondern schreibst einfach den Text.
-
HerstAmoi schrieb:
Was denn?
Du nimmst Visual Studio her, stellst in den general project properties all configurations auf multibyte character set und verwendest dann kein L oder _T oder sonstigen unnötigen Mist sondern schreibst einfach den Text.Und dann geht's mit UNICODE?
-
UNICODE ist mist kapiert das endlich -.- man kann außerdem keine dll injection mit unicode

-
omg hätte noch statt LoadLibraryA W verwenden müssen, damit klappt es jetzt.
Und ihr braucht mir nicht mehr sagen wie dämlich dieser Fehler war.
Ich sollte erstmal besser die Grundlagen lernen. Aber wenigstens klappt es jetzt
-
Die UNICODE-Fanboys haben versäumt das PE-Format zu aktualisieren.
-
Hätte er nur den Fehler behoben, den ich ganz am Anfang gepostet hab, hätte es gleich getan....

-
jo war meine schuld, natürlich vielen dank für deine Hilfe.
-
Kein Problem

-
Und ihr braucht mir nicht mehr sagen wie dämlich dieser Fehler war.
Bist du sicher? Ich meine ich würde mich durchaus überreden lassen das zu übernehmen wenn du willst...
-
Wie gemein...
