fork download
  1. seed = "01 02 03"
  2. real_key = "88 5C 12"
  3.  
  4. print "Observed seed: "+seed
  5. #
  6. # This is the "secret" found in debugger for PCM
  7. #
  8. #s1 = 0x08
  9. #s2 = 0x30
  10. #s3 = 0x61
  11. #s4 = 0xa4
  12. #s5 = 0xc5
  13.  
  14. #
  15. # for SJB
  16. #
  17. s1 = 0x44
  18. s2 = 0x49
  19. s3 = 0x4F
  20. s4 = 0x44
  21. s5 = 0x45
  22.  
  23. seed_int = (int(seed[0:2],16)<<16) + (int(seed[3:5],16)<<8) + (int(seed[6:8],16))
  24. #print "Seed: %x" % seed_int
  25.  
  26. or_ed_seed = ((seed_int & 0xFF0000) >> 16) | (seed_int & 0xFF00) | (s1 << 24) | (seed_int & 0xff) << 16
  27. #print "or_ed_seed: %x\n" % or_ed_seed
  28.  
  29. mucked_value = 0xc541a9
  30.  
  31. for i in range(0,32):
  32. a_bit = ((or_ed_seed >> i) & 1 ^ mucked_value & 1) << 23
  33. v8 = a_bit | (mucked_value >> 1);
  34. mask = (v8 & 0x800000) >> 23;
  35. mucked_value = v8 & 0xEF6FD7 | ((((v8 & 0x100000) >> 20) ^ mask) << 20) | (((((mucked_value >> 1) & 0x8000) >> 15) ^ mask) << 15) | (((((mucked_value >> 1) & 0x1000) >> 12) ^ mask) << 12) | 32 * ((((mucked_value >> 1) & 0x20) >> 5) ^ mask) | 8 * ((((mucked_value >> 1) & 8) >> 3) ^ mask);
  36. # print "mucked: %x" % (mucked_value)
  37.  
  38. for j in range(0,32):
  39. v11 = ((((s5 << 24) | (s4 << 16) | s2 | (s3 << 8)) >> j) & 1 ^ mucked_value & 1) << 23;
  40. v12 = v11 | (mucked_value >> 1);
  41. mask = (v12 & 0x800000) >> 23;
  42. mucked_value = v12 & 0xEF6FD7 | ((((v12 & 0x100000) >> 20) ^ mask) << 20) | (((((mucked_value >> 1) & 0x8000) >> 15) ^ mask) << 15) | (((((mucked_value >> 1) & 0x1000) >> 12) ^ mask) << 12) | 32 * ((((mucked_value >> 1) & 0x20) >> 5) ^ mask) | 8 * ((((mucked_value >> 1) & 8) >> 3) ^ mask);
  43.  
  44. key = ((mucked_value & 0xF0000) >> 16) | 16 * (mucked_value & 0xF) | ((((mucked_value & 0xF00000) >> 20) | ((mucked_value & 0xF000) >> 8)) << 8) | ((mucked_value & 0xFF0) >> 4 << 16);
  45.  
  46. print "Computed key: %x" % key
  47. print "observed key: " + real_key
Success #stdin #stdout 0.03s 63404KB
stdin
Standard input is empty
stdout
Observed seed: 01 02 03
Computed key: f5cc06
observed key: 88 5C 12