Ejemplo n.º 1
0
void PathCrawler::listDir(std::string path, FileSet *infectedFiles, bool skip_decrypted)
{
    if (infectedFiles == NULL) {
        printf("File set not initialized\n");
        return;
    }
    const std::string fileName = path + "\\*.*";
    WIN32_FIND_DATA foundFileData;
    HANDLE hFind = FindFirstFile(fileName.c_str(), &foundFileData);
    if (hFind == INVALID_HANDLE_VALUE) {
        return;
    }
    do {
        if (foundFileData.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY) {
            if (strcmp(foundFileData.cFileName, ".") == 0) continue;
            if (strcmp(foundFileData.cFileName, "..") == 0) continue;
            std::string full_path = path + "\\"+ foundFileData.cFileName;
            listDir(full_path, infectedFiles, skip_decrypted);
            continue;
        }
        std::string full_path = path +"\\"+ foundFileData.cFileName;
        if (isExtensionAttacked(foundFileData.cFileName) == false) {
            continue;
        }
        if (isInfected(full_path) == false) {
            continue;
        }
        if (skip_decrypted && isDecrypted(full_path) == true) {
            printf("Already decrypted, skipping: %s\n", foundFileData.cFileName);
            continue;
        }
        char* ext_none = "<none>";
        char* ext = strrchr(foundFileData.cFileName, '.');
        if (ext == NULL) {
            ext = ext_none;
        }
        uint32_t infection_time = static_cast<uint32_t> (FileTime_to_POSIX(foundFileData.ftLastWriteTime));
        infectedFiles->addFile(full_path,  ext, infection_time);
    } while (FindNextFile(hFind, &foundFileData));
    FindClose(hFind);
}
Ejemplo n.º 2
0
int simulate(int duration){
	/* temporary variables */
	int i, j, infected, immune;

	/* sim for specified duration */
	for(i = 0; i < duration; i++){
		/* reset infection counter */
		infected = 0;
		immune = 0;
		
		/* check for continuing infection status */
		for(j = 0; j < g_population; j++){
			if(g_status[j].infected){
				/* increment days infected */
				g_status[j].days++;
				/* check if contagious */
				g_status[j].contagious = isContagious(g_status[j].days);
				/* check to see if infection is over */
				if(isRecovered(g_status[j].days)){
					g_status[j].infected = 0;
					g_status[j].immune = 1;
				}
			}
		}

		/* check for home infection */
		for(j = 0; j < g_population; j+=3){
			if(!g_status[j].infected){
				if(g_status[j+1].infected || g_status[j+2].infected){
					g_status[j].infected = isInfected(g_status[j].immune);
				}
			}

			if(!g_status[j+1].infected){
				if(g_status[j].infected || g_status[j+2].infected){
					g_status[j+1].infected = isInfected(g_status[j+1].immune);
				}
			}

			if(!g_status[j+2].infected){
				if(g_status[j].infected || g_status[j+1].infected){
					g_status[j+2].infected = isInfected(g_status[j+2].immune);
				}
			}
		}

		/* check for infection */
		for(j = 0; j < g_population; j++){
			if(g_status[j].infected){
				infected++;
			}

			if(g_status[j].immune){
				immune++;
			}
		}

		printf("Day %d: %d infected\t%d immune\n", i, infected, immune);
	}



	return 0;
}