Index: emcore/trunk/tools/ipodcrypt.py |
— | — | @@ -27,18 +27,19 @@ |
28 | 28 |
|
29 | 29 |
|
30 | 30 | def usage():
|
31 | | - print("")
|
32 | | - print("Please provide a command and (if needed) parameters as command line arguments")
|
33 | | - print("")
|
34 | | - print("Available commands:")
|
35 | | - print(" s5l8701-cryptdfu <infile> <outfile>")
|
36 | | - print(" s5l8701-decryptdfu <infile> <outfile>")
|
37 | | - print(" s5l8701-cryptfirmware <infile> <outfile>")
|
38 | | - print(" s5l8701-decryptfirmware <infile> <outfile>")
|
39 | | - print(" s5l8702-cryptnor <infile> <outfile>")
|
40 | | - print(" s5l8702-decryptnor <infile> <outfile>")
|
41 | | - print(" s5l8702-genpwnage <infile> <outfile>")
|
42 | | - print(" s5l8720-genpwnage <infile> <outfile>")
|
| 31 | + print ""
|
| 32 | + print "Please provide a command and (if needed) parameters as command line arguments"
|
| 33 | + print ""
|
| 34 | + print "Available commands:"
|
| 35 | + print " s5l8701-cryptdfu <infile> <outfile>"
|
| 36 | + print " s5l8701-decryptdfu <infile> <outfile>"
|
| 37 | + print " s5l8701-cryptfirmware <infile> <outfile>"
|
| 38 | + print " s5l8701-decryptfirmware <infile> <outfile>"
|
| 39 | + print " s5l8702-cryptnor <infile> <outfile>"
|
| 40 | + print " s5l8702-decryptnor <infile> <outfile>"
|
| 41 | + print " s5l8702-genpwnage <infile> <outfile>"
|
| 42 | + print " s5l8702-genpwnage800 <infile> <outfile>"
|
| 43 | + print " s5l8720-genpwnage <infile> <outfile>"
|
43 | 44 | exit(2)
|
44 | 45 |
|
45 | 46 |
|
— | — | @@ -66,6 +67,9 @@ |
67 | 68 | elif argv[1] == "s5l8702-genpwnage":
|
68 | 69 | libipodcrypto.s5l8702genpwnagefile(argv[2], argv[3])
|
69 | 70 |
|
| 71 | + elif argv[1] == "s5l8702-genpwnage800":
|
| 72 | + libipodcrypto.s5l8702genpwnagefile800(argv[2], argv[3])
|
| 73 | +
|
70 | 74 | elif argv[1] == "s5l8720-genpwnage":
|
71 | 75 | libipodcrypto.s5l8720genpwnagefile(argv[2], argv[3])
|
72 | 76 |
|
Index: emcore/trunk/tools/libipodcrypto.py |
— | — | @@ -119,6 +119,19 @@ |
120 | 120 | return data
|
121 | 121 |
|
122 | 122 |
|
| 123 | +def s5l8702genpwnage800(data):
|
| 124 | + cert = open(os.path.dirname(__file__) + "/libipodcrypto/s5l8702pwnage.cer", "rb").read()
|
| 125 | + data = data.ljust(max(0x90, (len(data) + 0xf) & ~0xf), b"\0")
|
| 126 | + header = (b"87021.0\x03\0\0\0\0" + struct.pack("<IIII", len(data) - 0x80, len(data) + 0x2ba, len(data), 0x2ba)).ljust(0x40, b"\0")
|
| 127 | + emcore = libemcore.Emcore()
|
| 128 | + addr = emcore.memalign(0x10, len(data))
|
| 129 | + emcore.write(addr, header + hashlib.sha1(header).digest()[:0x10])
|
| 130 | + emcore.aesencrypt(addr + 0x40, 0x10, 1)
|
| 131 | + data = emcore.read(addr, 0x50).ljust(0x800, b"\0") + data + cert.ljust((len(cert) + 0xf) & ~0xf, b"\0")
|
| 132 | + emcore.free(addr)
|
| 133 | + return data
|
| 134 | +
|
| 135 | +
|
123 | 136 | def s5l8720genpwnage(data):
|
124 | 137 | cert = open(os.path.dirname(__file__) + "/libipodcrypto/s5l8720pwnage.cer", "rb").read()
|
125 | 138 | data = data.ljust(max(0x640, (len(data) + 0xf) & ~0xf), b"\0")
|
— | — | @@ -188,6 +201,14 @@ |
189 | 202 | outfile.close()
|
190 | 203 |
|
191 | 204 |
|
| 205 | +def s5l8702genpwnagefile800(infile, outfile):
|
| 206 | + infile = open(infile, "rb")
|
| 207 | + outfile = open(outfile, "wb")
|
| 208 | + outfile.write(s5l8702genpwnage800(infile.read()))
|
| 209 | + infile.close()
|
| 210 | + outfile.close()
|
| 211 | +
|
| 212 | +
|
192 | 213 | def s5l8720genpwnagefile(infile, outfile):
|
193 | 214 | infile = open(infile, "rb")
|
194 | 215 | outfile = open(outfile, "wb")
|