Bonkers
26.05.2010, 16:58
Hey,
Ich gebe es zu : Ich musste mit mir selbst ringen um den Code hier einzustellen, weil ich eigentlich keine Lust auf die Slaps der C-Gurus hatte ;)
Ich sollte vielleicht dazu sagen dass ich eine lange Zeit nichts mit C gemacht habe, und meine Fähigkeiten auch vorher immer nur Situationsbedingt genutzt wurden... Halt um mal schnell was "zusammenzupanschen".
Ich möchte die Leute mit mehr C-Erfahrung als Ich selbst dazu aufrufen den Code zu kommentieren und mir zu helfen, meine Formfehler zu finden (Das Tool funktioniert tadellos, aber ich bin mir sicher dass da einige Sachen vorkommen die einem Experten unschön aufstoßen werden ;) ).
Hier der Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "md5.h"
void btf(int size, int pos, char curr[]);
int match(char* solution, char* testagainst);
void parse_arg( int argc, char *argv[] );
char* crackme;
int main( int argc, char *argv[] ) {
parse_arg(argc, argv);
printf("\nNow trying to crack %s\n\n", crackme);
int size;
for(size=1; size < 8; size++) {printf("-> Setting new Size to %i\n", size); btf(size,0,"");}
return 0;
}
void btf(int size, int pos, char curr[]) {
char* charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
int i;
if(pos < size){
for(i=0; i<strlen(charset);i++){
char test[strlen(curr) + 2];
strcpy(test, curr);
int len = strlen(test);
test[len] = charset[i];
test[len+1] = '\0';
btf(size, pos+1, test);
}} else {
if(match(crackme, curr) == 1) {
printf("Your Hash has been Cracked. md5( %s ) == %s\n", curr, crackme);
exit(0);
}
}
}
int match(char* solution, char* testagainst) {
char const* test = testagainst;
md5_state_t state;
md5_byte_t digg[16];
char hex_pres[33];
int coi;
md5_init(&state);
md5_append(&state, (const md5_byte_t *)test, strlen(test));
md5_finish(&state, digg);
for (coi = 0; coi < 16; ++coi) {
sprintf(hex_pres + coi * 2, "%02x", digg[coi]);
}
if(strcmp(solution,hex_pres) == 0) { return 1; } else { return 0; }
}
void parse_arg( int argc, char *argv[] ) {
printf("\t----------------------------\n");
printf("\t| Simple MD5-Cracker in C |\n");
printf("\t| |\n");
printf("\t| Written by Bonkers |\n");
printf("\t| |\n");
printf("\t| Stolen by [YourNameHere] |\n");
printf("\t| |\n");
printf("\t----------------------------\n");
if( argc != 2 || strlen(argv[1]) != 32) {
printf("Usage : ./BTF {MD5-HASH}\n\n");
exit(0);
} else { crackme = argv[1]; }
}
Und ein Beispiel-Output:
[user@archery Debug]$ ./BTF 7d578bb564c511ca301f558528bde644
----------------------------
| Simple MD5-Cracker in C |
| |
| Written by Bonkers |
| |
| Stolen by [YourNameHere] |
| |
----------------------------
Now trying to crack 7d578bb564c511ca301f558528bde644
-> Setting new Size to 1
-> Setting new Size to 2
-> Setting new Size to 3
-> Setting new Size to 4
Your Hash has been Cracked. md5( AAAB ) == 7d578bb564c511ca301f558528bde644
Die md5.h + md5.c finden sich hier: http://www.file-upload.net/download-2548054/md5.tar.gz.html
Ich gebe es zu : Ich musste mit mir selbst ringen um den Code hier einzustellen, weil ich eigentlich keine Lust auf die Slaps der C-Gurus hatte ;)
Ich sollte vielleicht dazu sagen dass ich eine lange Zeit nichts mit C gemacht habe, und meine Fähigkeiten auch vorher immer nur Situationsbedingt genutzt wurden... Halt um mal schnell was "zusammenzupanschen".
Ich möchte die Leute mit mehr C-Erfahrung als Ich selbst dazu aufrufen den Code zu kommentieren und mir zu helfen, meine Formfehler zu finden (Das Tool funktioniert tadellos, aber ich bin mir sicher dass da einige Sachen vorkommen die einem Experten unschön aufstoßen werden ;) ).
Hier der Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "md5.h"
void btf(int size, int pos, char curr[]);
int match(char* solution, char* testagainst);
void parse_arg( int argc, char *argv[] );
char* crackme;
int main( int argc, char *argv[] ) {
parse_arg(argc, argv);
printf("\nNow trying to crack %s\n\n", crackme);
int size;
for(size=1; size < 8; size++) {printf("-> Setting new Size to %i\n", size); btf(size,0,"");}
return 0;
}
void btf(int size, int pos, char curr[]) {
char* charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";
int i;
if(pos < size){
for(i=0; i<strlen(charset);i++){
char test[strlen(curr) + 2];
strcpy(test, curr);
int len = strlen(test);
test[len] = charset[i];
test[len+1] = '\0';
btf(size, pos+1, test);
}} else {
if(match(crackme, curr) == 1) {
printf("Your Hash has been Cracked. md5( %s ) == %s\n", curr, crackme);
exit(0);
}
}
}
int match(char* solution, char* testagainst) {
char const* test = testagainst;
md5_state_t state;
md5_byte_t digg[16];
char hex_pres[33];
int coi;
md5_init(&state);
md5_append(&state, (const md5_byte_t *)test, strlen(test));
md5_finish(&state, digg);
for (coi = 0; coi < 16; ++coi) {
sprintf(hex_pres + coi * 2, "%02x", digg[coi]);
}
if(strcmp(solution,hex_pres) == 0) { return 1; } else { return 0; }
}
void parse_arg( int argc, char *argv[] ) {
printf("\t----------------------------\n");
printf("\t| Simple MD5-Cracker in C |\n");
printf("\t| |\n");
printf("\t| Written by Bonkers |\n");
printf("\t| |\n");
printf("\t| Stolen by [YourNameHere] |\n");
printf("\t| |\n");
printf("\t----------------------------\n");
if( argc != 2 || strlen(argv[1]) != 32) {
printf("Usage : ./BTF {MD5-HASH}\n\n");
exit(0);
} else { crackme = argv[1]; }
}
Und ein Beispiel-Output:
[user@archery Debug]$ ./BTF 7d578bb564c511ca301f558528bde644
----------------------------
| Simple MD5-Cracker in C |
| |
| Written by Bonkers |
| |
| Stolen by [YourNameHere] |
| |
----------------------------
Now trying to crack 7d578bb564c511ca301f558528bde644
-> Setting new Size to 1
-> Setting new Size to 2
-> Setting new Size to 3
-> Setting new Size to 4
Your Hash has been Cracked. md5( AAAB ) == 7d578bb564c511ca301f558528bde644
Die md5.h + md5.c finden sich hier: http://www.file-upload.net/download-2548054/md5.tar.gz.html