static int process_auth_entry(char *auth_entry, const char *user, u8 *dst_hash, u32 dst_len) { char *auth_token, *auth_save; const char *auth_delim = ":"; u32 centry = 0, found = 0, auth_tok_len; for (auth_token = strtok_r(auth_entry, auth_delim, &auth_save); auth_token; auth_token = strtok_r(NULL, auth_delim, &auth_save)) { auth_tok_len = strlen(auth_token); if (!centry) { if (!strncmp(auth_entry, user, auth_tok_len)) { found = 1; } } else { if (found) { return string_to_digest(auth_token, strlen(auth_token), dst_hash, dst_len); } } centry++; } return VMM_EFAIL; }
int main(int argc,char *argv[]) { char *md_str_1; unsigned char md_value_1[EVP_MAX_MD_SIZE]; unsigned char md_value_2[EVP_MAX_MD_SIZE]; unsigned int md_len_1,md_len_2; int j; int hint_len; if(argc!=3) { fprintf(stderr,"usage: bruteforce <hint> <md5sum of the password>\n"); exit(1); } hint_len=strlen(argv[1]); md_str_1=argv[2]; if(strlen(md_str_1)!=32) { fprintf(stderr,"md5sum has wrong length\n"); exit(1); } string_to_digest(md_value_1,&md_len_1,md_str_1); if(md_len_1!=16) { fprintf(stderr,"digest has wrong length\n"); exit(1); } try_buffer=malloc(strlen(argv[1])+50); try_buffer[0]=0; try_len=0; for(;;) { for(j=0;j<=hint_len;++j) { strcpy(try_buffer+try_len,argv[1]+j); calculate_md5_of(try_buffer,try_len+hint_len-j,md_value_2,&md_len_2); if(compare_digest(md_value_1,md_value_2,16)==0) { printf("The password is %s\n",try_buffer); return 0; } } increment_try_buffer(); } }
int authenticate_user(const char *user, char *passwd) { hash_digest_t passwd_sig, match_against; int i; calculate_hash(passwd, passwd_sig); memset(match_against, 0 , sizeof(match_against)); #if CONFIG_LIBAUTH_DEFAULT_USER if (!strncmp(user, CONFIG_LIBAUTH_DEFAULT_USERNAME, strlen(user))) { if (string_to_digest(libs_common_libauth_passwd_data_start, libs_common_libauth_passwd_data_size, (u8 *)&match_against, sizeof(match_against)) != VMM_OK) return VMM_EFAIL; for (i = 0; i < HASH_LEN; i++) { if (match_against[i] != passwd_sig[i]) { return VMM_EFAIL; } } return VMM_OK; } #endif if (get_user_hash(user, (u8 *)&match_against, sizeof(match_against)) == VMM_OK) { for (i = 0; i < HASH_LEN; i++) { if (match_against[i] != passwd_sig[i]) { return VMM_EFAIL; } } return VMM_OK; } return VMM_EFAIL; }