-
Notifications
You must be signed in to change notification settings - Fork 5
/
HTC_OTA_Downloader.py
115 lines (103 loc) · 2.98 KB
/
HTC_OTA_Downloader.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import requests
import time
import hashlib
from tqdm import tqdm
def getX1():
t = str(timestamp)
shift_value = 0
for i in range(4, len(t)):
tmp = t[len(t) - i]
if tmp != '0':
shift_value = int(tmp, 36)
break
time_head = t[:len(t) - shift_value]
time_tail = t[len(t) - shift_value:]
data = time_tail + SN + IMEI + time_head
h = hashlib.sha256()
h.update(data.encode('ascii'))
return h.hexdigest().upper()
def getHTC1S():
t = int(time_ms)
tmp = SN + str(time_ms)
if t <= 0:
return tmp
while True:
i = t % 10
if i == 0:
t = t / 10
else:
index = int(len(tmp) - i)
return tmp[index:] + tmp[:index]
def checkin():
headers = {
'User-Agent': 'Android-Checkin/8.0',
'x-active-g': 'DivadGS38Omatump76'
}
queryjson = {
'imei': IMEI,
'timeStamp': timestamp,
'model_number': model,
'checkin': {
'build': {
'serialno': SN,
'firmware_version': version
},
'client_version': 'A8.0(M)',
'cid': cidnum,
'checkin_type': 'Manual'
},
'x1': getX1()
}
r = requests.post(chkUrl, headers=headers, json=queryjson)
return r.json()
def getOTAPkg():
headers = {
'User-Agent': 'Android-Checkin/8.0',
'htc1s': htc1s
}
r = requests.get(uri, headers=headers, stream=True)
total_size = int(r.headers['Content-Length'])
pbar = tqdm(total=total_size, unit="B", unit_scale=True, ncols=100)
with open(pkg, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024 * 1024):
f.write(chunk)
pbar.update(len(chunk))
pbar.close()
f.close()
checkinUrl = 'https://andchin-2.htc.com/htcfotacheckin/rest/checkin'
checkinUrlCN = 'https://andchin-2.htccomm.com.cn/htcfotacheckin/rest/checkin'
SN = 'CC55TYG07414'
IMEI = '357290062810490'
timestamp = int(time.time() * 1000)
china = input(">> China Variant? (Y/n): ")
if china.upper() == 'Y':
chkUrl = checkinUrlCN
else:
chkUrl = checkinUrl
model = input(">> Model: ")
version = input(">> Version: ")
cidnum = input(">> CID: ")
#model = 'htc_pmeuhl'
#version = '2.41.709.73'
#cidnum = 'HTC__621'
response = checkin()
#print(response)
if 'intent' in response:
intent = response['intent'][0]
if 'data_uri' in intent:
uri = intent['data_uri']
pkg = intent['pkgFileName']
for extra in intent['extra']:
if extra['name'] == 'promptSize':
size = extra['value']
break
time_ms = response['time_msec']
htc1s = getHTC1S()
print('>> FILE: ' + pkg)
print('>> SIZE: ' + size)
input("Press ENTER to download...")
getOTAPkg()
else:
print('ERROR!!!')
else:
print('ERROR!!!')