From da42236a1d7a93c78bbd6113b508978de78cb116 Mon Sep 17 00:00:00 2001 From: Colin Kuebler Date: Sun, 22 Sep 2019 18:25:30 -0400 Subject: [PATCH] Implemented encrypted response support Removed additional config.get payload, does not appear to be necessary and in some cases was causing problems Revert upgrade type to 0 since we are trying to update the firmware on the main ESP82xx, not an external MCU --- scripts/fake-registration-server.py | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/scripts/fake-registration-server.py b/scripts/fake-registration-server.py index f2c5447..01da39e 100755 --- a/scripts/fake-registration-server.py +++ b/scripts/fake-registration-server.py @@ -75,6 +75,22 @@ class JSONHandler(tornado.web.RequestHandler): self.set_header('Content-Language', 'zh-CN') self.write(answer) print("reply", answer) + def reply_encrypted(self, result=None): + ts = timestamp() + answer = { + 'result': result, + 't': ts, + 'success': True } + answer = jsonstr(answer) + encrypted = b64encode(AES.new("0000000000000000", AES.MODE_ECB).encrypt(pad(answer))).decode() + signature = "result=%s||t=%d||%s" % (encrypted, ts, "0000000000000000") + signature = hashlib.md5(signature.encode()).hexdigest()[8:24] + answer = '{"result":"%s","t":%d,"sign":"%s"}' % (encrypted, ts, signature) + self.set_header("Content-Type", "application/json;charset=UTF-8") + self.set_header('Content-Length', str(len(answer))) + self.set_header('Content-Language', 'zh-CN') + self.write(answer) + print("encrypted reply", answer) def post(self): uri = str(self.request.uri) a = str(self.get_argument('a')) @@ -135,8 +151,8 @@ class JSONHandler(tornado.web.RequestHandler): answer = { "auto": 3, "size": file_len, - "type": 9, - "pskUrl": "https://10.42.42.1/files/upgrade.bin", + "type": 0, + "pskUrl": "http://10.42.42.1/files/upgrade.bin", "hmac": file_hmac, "version": "9.0.0" } self.reply(answer) @@ -187,11 +203,9 @@ class JSONHandler(tornado.web.RequestHandler): "time": timestamp(), "config": {} } if et == "1": - answer["ackId"] = "1234567" - answer["config"] = { - "stdTimeZone": "UTC", - "dstIntervals": "0" } - self.reply(answer) + self.reply_encrypted(answer) + else: + self.reply(answer) else: print("Answer generic ({})".format(a))