#include #include #include #include #include const char MUTEX[] = "keygen"; void payload() { for (int i = 0; i < 60; ++i) { printf("\b\b\b\b%is", i++); Sleep(1000); } } void message() { const int N = 35; const char alpha[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; char key[N]; srand(time(NULL)); strcpy(key, "key: "); do { for (int i = 5; i < N; ++i) key[i] = alpha[rand() % strlen(alpha)]; for (int i = 10; i < N; i += 6) key[i] = '-'; key[N - 1] = '\0'; } while(MessageBoxA(0, key, MUTEX, MB_ICONINFORMATION|MB_RETRYCANCEL) == IDRETRY); } int main(int argc, char *argv[]) { HANDLE mutex = OpenMutexA(SYNCHRONIZE, FALSE, MUTEX); if (mutex == NULL) { STARTUPINFO si; PROCESS_INFORMATION pi; mutex = CreateMutexA(NULL, FALSE, MUTEX); CreateProcessA(NULL, argv[0], NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); CloseHandle(pi.hThread); CloseHandle(pi.hProcess); message(); ReleaseMutex(mutex); } else { payload(); } CloseHandle(mutex); }