| 1 | #include <stdio.h> |
| 2 | #include "cipherutils.h" |
| 3 | #include <stdint.h> |
| 4 | #include <stdbool.h> |
| 5 | #include <string.h> |
| 6 | #include <unistd.h> |
| 7 | #include <ctype.h> |
| 8 | #include "elite_crack.h" |
| 9 | |
| 10 | void calc_score(uint8_t* csn, uint8_t* k) |
| 11 | { |
| 12 | uint8_t score =0 ; |
| 13 | uint8_t i; |
| 14 | uint8_t goodvals[16] = {0}; |
| 15 | uint8_t uniq_vals[8] = {0}; |
| 16 | memset(goodvals, 0x00, 16); |
| 17 | memset(uniq_vals, 0x00, 8); |
| 18 | uint8_t badval = 0; |
| 19 | int badscore =0; |
| 20 | for(i=0; i < 8 ; i++) |
| 21 | { |
| 22 | if(k[i] == 0x01) continue; |
| 23 | if(k[i] == 0x00) continue; |
| 24 | if(k[i] == 0x45) continue; |
| 25 | if(k[i] < 16){ |
| 26 | goodvals[k[i]] = 1; |
| 27 | } |
| 28 | // if(k[i] ==9 || k[i]==2){ |
| 29 | // goodvals[k[i]] = 1; |
| 30 | // } |
| 31 | |
| 32 | else if(k[i]>=16){ |
| 33 | badscore++; |
| 34 | badval = k[i]; |
| 35 | } |
| 36 | } |
| 37 | for(i =0; i < 16; i++) |
| 38 | { |
| 39 | if(goodvals[i]) |
| 40 | { |
| 41 | uniq_vals[score] = i; |
| 42 | score +=1; |
| 43 | } |
| 44 | } |
| 45 | if(score >=2 && badscore < 2) |
| 46 | { |
| 47 | printf("CSN\t%02x%02x%02x%02x%02x%02x%02x%02x\t%02x %02x %02x %02x %02x %02x %02x %02x\t" |
| 48 | ,csn[0],csn[1],csn[2],csn[3],csn[4],csn[5],csn[6],csn[7] |
| 49 | ,k[0],k[1],k[2],k[3],k[4],k[5],k[6],k[7] |
| 50 | ); |
| 51 | for(i =0 ; i < score; i++) |
| 52 | { |
| 53 | printf("%d,", uniq_vals[i]); |
| 54 | } |
| 55 | printf("\tbadscore: %d (%02x)", badscore, badval); |
| 56 | printf("\r\n"); |
| 57 | |
| 58 | } |
| 59 | |
| 60 | } |
| 61 | |
| 62 | void brute_hash1(){ |
| 63 | uint8_t csn[8] = {0,0,0,0,0xf7,0xff,0x12,0xe0}; |
| 64 | uint8_t k[8]= {0,0,0,0,0,0,0,0}; |
| 65 | uint16_t a,b,c,d; |
| 66 | uint8_t testcsn[8] ={0x00,0x0d,0x0f,0xfd,0xf7,0xff,0x12,0xe0} ; |
| 67 | uint8_t testkey[8] ={0x05 ,0x01 ,0x00 ,0x10 ,0x45 ,0x08 ,0x45,0x56} ; |
| 68 | calc_score(testcsn,testkey); |
| 69 | printf("Brute forcing hashones\n"); |
| 70 | //exit(1); |
| 71 | for(a=0;a < 256;a++) |
| 72 | { |
| 73 | //if(a > 0)printf("%d/256 done...\n", a); |
| 74 | for(b=0;b < 256 ; b++) |
| 75 | for(c=0;c < 256;c++) |
| 76 | for(d=0;d < 256;d++) |
| 77 | { |
| 78 | csn[0] = a; |
| 79 | csn[1] = b; |
| 80 | csn[2] = c; |
| 81 | csn[3] = d; |
| 82 | csn[4] = 0xf7; |
| 83 | csn[5] = 0xff; |
| 84 | csn[6] = 0x12; |
| 85 | csn[7] = 0xe0; |
| 86 | hash1(csn, k); |
| 87 | calc_score(csn,k); |
| 88 | } |
| 89 | } |
| 90 | |
| 91 | } |
| 92 | |