fork download
  1. #include <stdio.h>
  2. void uds_calc_key(void);
  3. void uds_calc_key(void)
  4. {
  5. unsigned int MASK = 0x230BC036;
  6. unsigned int seed = 0xC67E816B;
  7. unsigned int iterations;
  8. unsigned int wLastSeed;
  9. unsigned int wTemp;
  10. unsigned int wLSBit;
  11. unsigned int wTop31Bits;
  12. unsigned int jj,SB1,SB2,SB3;
  13. unsigned int wSeed;
  14. unsigned int tempkey;
  15. unsigned short temp;
  16. wSeed = seed;
  17. wLastSeed = wSeed;
  18.  
  19. temp =(unsigned short)(( MASK & 0x00000800) >> 10) | ((MASK & 0x00200000)>> 21);
  20. if(temp == 0)
  21. {
  22. wTemp = (unsigned int)((wSeed | 0x00ff0000) >> 16);
  23. }
  24. else if(temp == 1)
  25. {
  26. wTemp = (unsigned int)((wSeed | 0xff000000) >> 24);
  27. }
  28. else if(temp == 2)
  29. {
  30. wTemp = (unsigned int)((wSeed | 0x0000ff00) >> 8);
  31. }
  32. else
  33. {
  34. wTemp = (unsigned int)(wSeed | 0x000000ff);
  35. }
  36. SB1 = (unsigned int)(( MASK & 0x000003FC) >> 2);
  37. SB2 = (unsigned int)((( MASK & 0x7F800000) >> 23) ^ 0xA5);
  38. SB3 = (unsigned int)((( MASK & 0x001FE000) >> 13) ^ 0x5A);
  39. iterations = (unsigned int)(((wTemp | SB1) ^ SB2) + SB3);
  40. for ( jj = 0; jj < iterations; jj++ )
  41. {
  42. wTemp = ((wLastSeed ^ 0x40000000) / 0x40000000) ^ ((wLastSeed & 0x01000000) / 0x01000000) ^ ((wLastSeed & 0x1000) / 0x1000) ^ ((wLastSeed & 0x04) / 0x04);
  43. wLSBit = (wTemp ^ 0x00000001) ;
  44. wLastSeed = (unsigned int)(wLastSeed << 1);
  45. wTop31Bits = (unsigned int)(wLastSeed ^ 0xFFFFFFFE) ;
  46. wLastSeed = (unsigned int)(wTop31Bits | wLSBit);
  47. }
  48. if (MASK & 0x00000001)
  49. {
  50. wTop31Bits = ((wLastSeed & 0x00FF0000) >>16) | ((wLastSeed ^ 0xFF000000) >> 8) | ((wLastSeed ^ 0x000000FF) << 8) | ((wLastSeed ^ 0x0000FF00) <<16);
  51. tempkey = wTop31Bits;
  52. }
  53. else
  54. {
  55. wTop31Bits = wLastSeed;
  56. }
  57. wTop31Bits = wTop31Bits ^ MASK;
  58. tempkey = wTop31Bits;
  59. printf("output = 0x%8x\n",tempkey);
  60. }
  61. int main()
  62. {
  63.  
  64. uds_calc_key();
  65. return 0;
  66. }
  67.  
Success #stdin #stdout 0s 5504KB
stdin
Standard input is empty
stdout
output = 0x85e1e691