Subversion Repositories freemyipod

Rev

Rev 272 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 272 Rev 277
Line 23... Line 23...
23
 
23
 
24
 
24
 
25
import sys
25
import sys
26
import struct
26
import struct
27
import time
27
import time
-
 
28
import hashlib
28
import libembios
29
import libembios
29
from libembios import Error
30
from libembios import Error
30
import libembiosdata
31
import libembiosdata
31
 
32
 
32
 
33
 
Line 68... Line 69...
68
    embios.lib.dev.timeout = 20000
69
    embios.lib.dev.timeout = 20000
69
    embios.aesdecrypt(0x08000800, len(data) - 0x800, 1)
70
    embios.aesdecrypt(0x08000800, len(data) - 0x800, 1)
70
    return embios.read(0x08000800, len(data) - 0x800)
71
    return embios.read(0x08000800, len(data) - 0x800)
71
 
72
 
72
 
73
 
-
 
74
def s5l8702cryptnor(data):
-
 
75
    data = data.ljust((len(data) + 0xf) & ~0xf, "\0")
-
 
76
    header = "87021.0\0\0\0\0\0" + struct.pack("<I", len(data)) + hashlib.sha1(data).digest()[:0x10]
-
 
77
    embios = libembios.Embios()
-
 
78
    embios.write(0x08000000, header.ljust(0x800, "\0") + data)
-
 
79
    embios.lib.dev.timeout = 20000
-
 
80
    embios.aesencrypt(0x08000800, len(data), 1)
-
 
81
    embios.aesencrypt(0x08000010, 0x10, 1)
-
 
82
    embios.write(0x08000040, hashlib.sha1(embios.read(0x08000000, 0x40)).digest()[:0x10])
-
 
83
    embios.aesencrypt(0x08000040, 0x10, 1)
-
 
84
    return embios.read(0x08000000, len(data) + 0x800)
-
 
85
 
-
 
86
 
-
 
87
def s5l8702decryptnor(data):
-
 
88
    embios = libembios.Embios()
-
 
89
    embios.write(0x08000000, data[0x800:])
-
 
90
    embios.lib.dev.timeout = 20000
-
 
91
    embios.aesdecrypt(0x08000000, len(data) - 0x800, 1)
-
 
92
    return embios.read(0x08000000, len(data) - 0x800)
-
 
93
 
-
 
94
 
73
def s5l8701cryptdfufile(infile, outfile):
95
def s5l8701cryptdfufile(infile, outfile):
74
    print(outfile)
-
 
75
    infile = open(infile, "rb")
96
    infile = open(infile, "rb")
76
    outfile = open(outfile, "wb")
97
    outfile = open(outfile, "wb")
77
    outfile.write(s5l8701cryptdfu(infile.read()))
98
    outfile.write(s5l8701cryptdfu(infile.read()))
78
    infile.close()
99
    infile.close()
79
    outfile.close()
100
    outfile.close()
Line 99... Line 120...
99
    infile = open(infile, "rb")
120
    infile = open(infile, "rb")
100
    outfile = open(outfile, "wb")
121
    outfile = open(outfile, "wb")
101
    outfile.write(s5l8701decryptfirmware(infile.read()))
122
    outfile.write(s5l8701decryptfirmware(infile.read()))
102
    infile.close()
123
    infile.close()
103
    outfile.close()
124
    outfile.close()
-
 
125
 
-
 
126
 
-
 
127
def s5l8702cryptnorfile(infile, outfile):
-
 
128
    infile = open(infile, "rb")
-
 
129
    outfile = open(outfile, "wb")
-
 
130
    outfile.write(s5l8702cryptnor(infile.read()))
-
 
131
    infile.close()
-
 
132
    outfile.close()
-
 
133
 
-
 
134
 
-
 
135
def s5l8702decryptnorfile(infile, outfile):
-
 
136
    infile = open(infile, "rb")
-
 
137
    outfile = open(outfile, "wb")
-
 
138
    outfile.write(s5l8702decryptnor(infile.read()))
-
 
139
    infile.close()
-
 
140
    outfile.close()