Ich weiss das exe dateien sich selbst löschen können, nun muss ich das gleiche auch bei einer dll machen.
mit folgendem code war es mir möglich meine test.exe sich selbst löschen zu lassen.
und dann der aufruf vom bool selfdelete:
nun muss ich das gleiche auch bei meiner dll machen. meine dll wird in einen target process geladen. meine dll ist in unicode gecodet. meine dll checkt wie auch meine exe ihre datei integrität, dann ein paar hardware seriennummern und noch ein paar andere checks, falls irgendetwas nicht im rahmen des gültigen ist, soll sich die dll selbst löschen, den prozess in den sie geladen wurde beenden, den computer runterfahren. alles ausser dem selbst löschen klappt.
hier der code den ich benutze, damit die dll ihren pfad und aktuellen namen weiss, damit sie sich selbst checken kann.
meine frage ist, wie kann ich es schaffen das sich die dll selbst löschen kann?
ich hab die dll mit dem self delete code in den target prozess geladen, ich habs auch geschafft das der target prozess nach dem ExitProcess(0); befehl, gelöscht wurde, was nicht meine absicht war, es wäre nun schön wenn anstelle der target.exe die geladene Dll gelöscht wird.
jede hilfe und jeder anstoss zur lösung des problems und wenn er noch so klein ist sehr willkommen. und dank schon mal im voraus für jede hilfe.
mit folgendem code war es mir möglich meine test.exe sich selbst löschen zu lassen.
Code:
BOOL SelfDelete()
{
TCHAR szFile[MAX_PATH], szCmd[MAX_PATH];
if ((GetModuleFileName(0, szFile, MAX_PATH) != 0) && (GetShortPathName(szFile, szFile, MAX_PATH) != 0))
{
lstrcpy(szCmd, "/c del ");
lstrcat(szCmd, szFile);
lstrcat(szCmd, " >> NUL");
if ((GetEnvironmentVariable("ComSpec", szFile, MAX_PATH) != 0) && ((INT)ShellExecute(0, 0, szFile, szCmd, 0, SW_HIDE) > 32))
return TRUE;
}
return FALSE;
}
und dann der aufruf vom bool selfdelete:
Code:
if (!bWasIchHierChecke(meinparam1, meinparam2, meinparam3, meinparam4, meinparam5))
{
SelfDelete();
ExitProcess(0);
//shutdownpc();//shutdowns pc if wrong serial
}
nun muss ich das gleiche auch bei meiner dll machen. meine dll wird in einen target process geladen. meine dll ist in unicode gecodet. meine dll checkt wie auch meine exe ihre datei integrität, dann ein paar hardware seriennummern und noch ein paar andere checks, falls irgendetwas nicht im rahmen des gültigen ist, soll sich die dll selbst löschen, den prozess in den sie geladen wurde beenden, den computer runterfahren. alles ausser dem selbst löschen klappt.
hier der code den ich benutze, damit die dll ihren pfad und aktuellen namen weiss, damit sie sich selbst checken kann.
Code:
BOOL APIENTRY DllMain(HMODULE hDll, DWORD Reason, PVOID lpReserved)
{
if (Reason == DLL_PROCESS_ATTACH)
{
GetModuleFileNameA((HMODULE)hDll, bfr, sizeof(bfr));
DisableThreadLibraryCalls(hDll); ....u.s.w.
Code:
FILE *pDLLFile;//pointer to DLL
...
pDLLFile = fopen(bfr, "rb");//open .DLL for read in binary mode
meine frage ist, wie kann ich es schaffen das sich die dll selbst löschen kann?
ich hab die dll mit dem self delete code in den target prozess geladen, ich habs auch geschafft das der target prozess nach dem ExitProcess(0); befehl, gelöscht wurde, was nicht meine absicht war, es wäre nun schön wenn anstelle der target.exe die geladene Dll gelöscht wird.
jede hilfe und jeder anstoss zur lösung des problems und wenn er noch so klein ist sehr willkommen. und dank schon mal im voraus für jede hilfe.