Copy Link
Add to Bookmark
Report

BFi numero 09 anno 3 file 21 di 21

eZine's profile picture
Published in 
Butchered From Inside
 · 22 Aug 2019

  

==============================================================================
-------------[ BFi numero 9, anno 3 - 03/11/2000 - file 21 di 21 ]------------
==============================================================================


-[ MiSCELLANE0US ]------------------------------------------------------------
---[ SNiP V.2


--[ Language: C
- multi directory support
- directory analysis
- crc generator
- statistics information


<-| snip2/snip2.c |->
/*
* Name: SNiP II
* Date: Tue Aug 15 14:04:52 2000
* Author: pIGpEN [ pigpen@s0ftpj.org, deadhead@sikurezza.org ]
*
* SoftProject 2000 - Digital Sekurity for Y2k
* Sikurezza.org - Italian Security MailingList
*
* COFFEE-WARE LICENSE - This source code is like "THE BEER-WARE LICENSE" by
* Poul-Henning Kamp <phk@FreeBSD.ORG> but you can give me in return a coffee.
*
* Tested on: FreeBSD 4.0-RELEASE FreeBSD 4.0-RELEASE #45: Sat Au i386
*
* Snip for definition is coded during alcohol abuse ... This source can't have
* a good style, logical parts or sense... I apologize... snip! ;)
*
*/



#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <stdlib.h>
#include <dirent.h>

#define BFIART "BFi"
#define DIRNAME "bfisrc"

#define BFISEP "<-| "
#define BFIEND "<-X->"
#define BFISEP_LEN strlen(BFISEP)
#define BFIEND_LEN strlen(BFIEND)

#define BUF_SIZE 1024

#ifndef S_ISDIR
# ifdef S_IFDIR
# define S_ISDIR(i) (((i) & S_IFMT) == S_IFDIR)
# else
# define S_ISDIR(i) (((i) & 0170000) == 0040000)
# endif
#endif

#ifndef S_ISREG
# ifdef S_IFREG
# define S_ISREG(i) (((i) & S_IFMT) == S_IFREG)
# else
# define S_ISREG(i) (((i) & 0170000) == 0100000)
# endif
#endif

int usage (char *cmd);
void dir2file (char *dirname);
void snip (char *filename);
int checktype (char *name);
void createsrc (FILE *in, FILE *out);
int makedir (const char *dirname);
unsigned long checkcrc (FILE *fp);

extern char *optarg;

struct {
int st_snipped;
int st_directory;
} snipstat;


int
main(int narg, char **arg)
{
return ( (narg!=2) ? usage(arg[0]) : checktype(arg[1]) );
}

int
usage(char *cmd)
{
printf( "\nSNiPv2\n"
"Usage: %s dir-or-file\n\n", cmd);

return 0;
}

int
checktype(char *name)
{
struct stat chk;

bzero(&snipstat, sizeof snipstat);

if (stat(name, &chk)) {
printf("Hmm %s doesn't exist\n", name);
exit(0);
}

if (S_ISDIR(chk.st_mode)) dir2file(name);
if (S_ISREG(chk.st_mode)) snip(name);

printf("\n%d snipped file\n", snipstat.st_snipped);
printf("%d directory created\n", snipstat.st_directory);

return 1;
}

void
dir2file(char *dirname)
{
DIR *dp;
struct dirent *de;

if (!(dp=opendir(dirname))) {
perror("[dir2file] opendir");
exit(0);
}

if (chdir(dirname) == -1) {
perror("[dir2file] chdir1");
exit(0);
}


while ((de=readdir(dp))) {

printf("[%s]: ", de->d_name);

switch(de->d_type) {
case DT_FIFO:
case DT_BLK:
case DT_LNK:
case DT_DIR:
case DT_SOCK: printf("skipping\n");
continue;
}

putchar('\n');

if (strstr(de->d_name, BFIART)) {
snip(de->d_name);
} else
printf("\tnot found\n");
}

closedir(dp);
}

void
snip(char *filename)
{
FILE *in, *out;
char buf[BUF_SIZE];
static int passed = 0;

if (!passed) {
makedir(DIRNAME);
passed = 1;
}

if (!(in=fopen(filename,"r"))) {
perror("[snip] fopen()");
exit(0);
}

chdir(DIRNAME);

while (fgets(buf, BUF_SIZE, in)) {
if (!strncmp(buf, BFISEP, BFISEP_LEN)) {
char *ptr;

buf[strlen(buf) - 1] = 0;

/*
* create directories like in extract
*/


if ((ptr = strchr(buf + BFISEP_LEN, '/'))) {
while(ptr) {
*ptr = 0;

if(makedir(buf + BFISEP_LEN) != -1)
snipstat.st_directory++;

*ptr = '/';

ptr = strchr(ptr + 1, '/');

}
}

ptr = strchr(buf + BFISEP_LEN, ' ');

/*
* create file
*/


*ptr = 0;
if (!(out = fopen(buf + BFISEP_LEN, "wb+"))) {
perror("[snip] fopen(outfile)\n");
exit(0);
}
printf("\tfilename [%s] ", buf + BFISEP_LEN);
createsrc(in, out);
*ptr = ' ';

/*
* check crc
*/


if ((ptr = strstr(ptr, "crc32: "))) {
char *ptr_crc;
u_long crc, gencrc;

ptr += strlen("crc32: ");

if ((ptr_crc = strchr(ptr, ' '))) {
*ptr_crc = 0;

crc = strtoul(ptr, NULL, 10);
gencrc = checkcrc(out);

if(crc == gencrc)
printf(" CRC32 ok");
else
printf(" CRC32 error: %lu",
gencrc);
*ptr_crc = ' ';
} else {
printf("no end of crc in snip hdr\n");
exit(0);
}

}

putchar('\n');
fclose(out);
}
}

chdir("..");


fclose(in);
}

void
createsrc(FILE *in, FILE *out)
{
char buf[BUF_SIZE];

snipstat.st_snipped++;

while (fgets(buf, BUF_SIZE, in) && strncmp(buf, BFIEND, BFIEND_LEN))
fprintf(out, "%s", buf);

}

int
makedir(const char *dirname)
{
return (mkdir(dirname, 0755));
}

static const u_int32_t crctab[256] = {
0x00000000, 0x77073096, 0xee0e612c, 0x990951ba,
0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3,
0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988,
0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91,
0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de,
0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7,
0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec,
0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5,
0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172,
0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b,
0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940,
0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59,
0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116,
0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f,
0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924,
0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d,
0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a,
0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433,
0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818,
0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01,
0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e,
0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457,
0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c,
0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65,
0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2,
0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb,
0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0,
0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9,
0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086,
0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f,
0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4,
0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad,
0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a,
0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683,
0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8,
0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1,
0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe,
0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7,
0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc,
0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5,
0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252,
0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b,
0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60,
0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79,
0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236,
0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f,
0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04,
0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d,
0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a,
0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713,
0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38,
0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21,
0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e,
0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777,
0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c,
0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45,
0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2,
0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db,
0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0,
0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9,
0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6,
0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf,
0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94,
0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d,
};

unsigned long
checkcrc(FILE *fp)
{
register unsigned long crc;
int c;

crc = 0xFFFFFFFF;

if (fseek(fp, 0, SEEK_SET) == -1) {
perror("fseek");
exit(0);
}

while( (c = getc(fp)) != EOF )
crc = ((crc >> 8) & 0x00FFFFFF) ^ crctab[(crc ^ c) & 0xFF];

return (crc ^ 0xFFFFFFFF);
}
<-X->


--[ Perl Script

- multidirectory support
- directory analysis


<-| snip2/snip2.pl |->
#!/usr/bin/perl
#
# S0FTPj Y2k - Tue Aug 15 12:48:53 2000
#
# SNiP II - an extractor for Butchered From Inside
#
#

$bfidir = "bfisrc";

sub create_file
{
local($file) = @_;
$found = 0;

open(IN_FILE, $file) || die "Unable to open $file\n";

chdir($bfidir);

while (<IN_FILE>) {

if (/^\<-\|/) {
$snipfile = substr($_, 4);
$snipfile = substr($snipfile,0,index($snipfile, ' '));

@dirs = split('/',$snipfile);
$ndir = 1;
while ($dirs[$ndir]) {
mkdir($dirs[0], 0755);
$dirs[0] .= '/'.$dirs[$ndir++];
}

print "\t$snipfile\n";
open(OUT_FILE, ">$snipfile");
$found = 1;

next;
}

if (/^\<-X->/) {
close(OUT_FILE);
$found = 0;
}

print OUT_FILE $_ if($found);
}

close(IN_FILE);
chdir("..");

return 0;
}


if (!$ARGV[0]) {
print "Usage: snip2 filename-or-directory\n";
exit(0);
}

$mode = (stat($ARGV[0]))[2];
if (($mode & 0170000) == 0040000) {
opendir(DIR, $ARGV[0]) || die "Unable to open directory\n";
chdir($ARGV[0]);
mkdir($bfidir, 0755);

while ($file = readdir(DIR)) {
print "$file\n";
&create_file($file);
}

closedir(DIR);
chdir("..");
} else {
mkdir($bfidir, 0755);
&create_file($ARGV[0]);
}
<-X->


==============================================================================
---------------------------------[ EOF 21/21 ]--------------------------------
==============================================================================

← previous
next →
loading
sending ...
New to Neperos ? Sign Up for free
download Neperos App from Google Play
install Neperos as PWA

Let's discover also

Recent Articles

Recent Comments

Neperos cookies
This website uses cookies to store your preferences and improve the service. Cookies authorization will allow me and / or my partners to process personal data such as browsing behaviour.

By pressing OK you agree to the Terms of Service and acknowledge the Privacy Policy

By pressing REJECT you will be able to continue to use Neperos (like read articles or write comments) but some important cookies will not be set. This may affect certain features and functions of the platform.
OK
REJECT