ich ein Programm geschrieben haben, die durch die Suche Linux-System Passwörter wiederherzustellen zur Anpassung Hashes, die vorhanden sind in zwei TextdateienMatching Text von 2 Dateien
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define MAXCHAR 1000
//Declaring Functions to match word in file
int matchfile(char *shadowfilename, char*hashtablefilename);
//shadowfilename for shadow.txt hashtablefilename for hash table
void UsageInfo(char *shadowfile, char * hashtablefile);
//Display usage info on arguements for program
void UsageInfo(char *shadowfile, char * hashtablefile) {
printf("Usage: %s %s <shadowfile> <hashtable>\n", shadowfile,hashtablefile);
}
//main function.
int main(int argc, char *argv[]) {
int result, errcode;
//Display format for user to enter arguements and
//End program if user does not enter exactly 3 arguements
if(argc < 3 || argc > 3) {
UsageInfo(argv[1],argv[2]);
exit(1);
}
system("cls");
//Pass command line arguements into searchstringinfile
result = matchfile(argv[1], argv[2]);
//Display error message
if(result == -1) {
perror("Error");
printf("Error number = %d\n", errcode);
exit(1);
}
return(0);
}
//Declaring Functions to match word in file
//int matchfile(char *shadowfilename, char *hashtablefilename);
//shadowfilename for shadow.txt hashtablefilename for hash table
int matchfile(char *shadowfilename, char *hashtablefilename){
FILE *shadowfile;
FILE *hashtable;
char strshadow[MAXCHAR];
char strhash[MAXCHAR];
shadowfile = fopen(shadowfilename, "r");
if (shadowfile == NULL){
printf("Could not open file %s",shadowfilename);
return 1;
}
hashtable = fopen(hashtablefilename, "r");
if (hashtable == NULL){
printf("Could not open file %s",hashtablefilename);
return 1;
}
//Getting text from the 2 files
while (fgets(strshadow, MAXCHAR, shadowfile) != NULL &&fgets(strhash,MAXCHAR,
hashtable) != NULL){
printf("%s", strshadow);
printf("%s", strhash);
int linenumber = 1;
int search_result = 0;
//Matching words line-by-line
if((strstr(strshadow,strhash)) != NULL) {
//Display line in which matched word is found
printf("A match found on line: %d\n", linenumber);
printf("\n%s\n", strhash);
search_result++;
}
linenumber++;
}
fclose(shadowfile);
return 0;
}
jedoch ausgelegt ist, ich bin nicht in der Lage, die beiden Hash übereinstimmen Werte in den zwei Dateien aufgrund der Zeichen vor ihnen.
hashtable.txt. Diese Datei enthält das fehlende Passwort im Klartext und entsprechende Hashwerte. Das Format ist wie folgt: (Passwort) :(hash)
banana:$1$$Tnq7a6/C1wwyKyt0V/.BP/:17482:0:99999:7:::
shadow.txt. Diese Datei enthält den Benutzernamen des Kontos im Klartext und entsprechende Hashwerte. Das Format ist wie folgt: (Benutzer) :(hash)
pyc1:$1$$Tnq7a6/C1wwyKyt0V/.BP/:17482:0:99999:7:::
Wie oben zu sehen ist, werden die Worte ‚Banane‘ und ‚pYc1‘ verhindern, dass das Programm vom Erfassen der beiden Hashes von detektiert wird. Kann mir jemand die Veränderungen sagen, die ich machen muss, um das zu überwinden? Danke. Edit: Geklärte Format von shadow.txt und hashtable.txt
So wissen Sie, dass die ersten Buchstaben die Identitätsprüfung fehlschlagen lassen. Was hält dich davon ab, nur vom ersten ":" zu vergleichen? – Yunnosch
Hallo! Es ist schön dich wiederzusehen ! Können Sie mir sagen, was ich tun kann, um dies zu vermeiden? – catmix
Lösung ist einfach: erfahren Sie mehr C. Was getan werden muss, ist sehr einfach. –