在電腦上下載 OPPO 的 OTA 更新

先說一下已經被 OPPO 廢棄的 version 1 的更新方式
以 POST 的方式將 request 發送到 
查詢是否有 OTA 更新, 如果有的話就會返回更新訊息, 傳送格式如下使用 JSON 格式
{“version”:”1″,”mobile”:”PAFM00″,”ota_version”:”PAFM00ROM_11.W.01_001_201600000000″,”imei”:”123″,”mode”:”0″,”language”:”en”,”beta”:”0″,”type”:”0″,”isRooted”:”0″,”hardwareVersion”:”PAFM00″}
 
 
==================================
上面的更新方式目前已經被 OPPO 停用 (少部分裝置可能仍然可以使用)
OPPO 目前使用的 version 2 的 OTA 更新, 資料內容是採用 AES ECB padding PKCS5 進行加密
傳送格式為 {“params” : “Encoded Text”}
params 後面是 AES 編碼的加密文字, 
返回訊息格式為 {“resps”: “Encoded Text”}
其中 Encoded Text = Encoded Context Part + Encoded AES Key (last 15 Bytes)
加密的部分是由真正的內文加上金鑰組成, 加密的金鑰在最後的 15 bytes 內
Encoded AES Key = Magisk number (1 Byte) + UnUsed data 1 (3 Bytes) + Part of  AES Key (8 Bytes) + UnUsed data 2(3 Bytes)
加密的金鑰的第一個 Byte 是個 0~9 的數字用來轉會為對應的字串,
緊接著的 3 Bytes 是用來混淆的無用資料,
後面的 8 Bytes 是金鑰的一部分共 8 Bytes, 最後的 3 Bytes 是用來混淆的無用資料
Real AES Key (16 Bytes) = Convert function(Magisk number) + Part of  AES Key (8 Bytes)
Convert function =
{ 0 => oppo1997″
1 => “baed2017”
2 => “java7865”
3 => “231uiedn”
4 => “09e32ji6”
5 => “0oiu3jdy”
6 => “0pej387l”
7 => “2dkliuyt”
8 => “20odiuye”
9 => “87j3id7w” }
所以真正的金鑰是透過上面轉換表轉換過的 8 Bytes 加上  8 Bytes 未加密的金鑰共  16 Bytes
 
Example:
{“reps”, “hPyAL/vRAoEmtQGzpwWW+o7ff5RKrmbqq4EA9ggXSSdrr8YMrh5PWbz4/IQyXODnDA8ufTb4DZ3RPOpZvhPjvjN46U+7/NUcitf/eK2miTH0EEfsEHP3eZmdMfJ6vx42ojD754R2o2AjEJcsPBNCRHDdYxjwFpu1t1VEBDrOVi5oDhxq6ZkUdYh58YgMiaz/fIf9CBah2EUn+ZhO+hA/Oo8OycXxZ5jb7RXjVw2cQbR7YNaNB2+V3xWDQUsU5zOEVmujoSGV3TmMLbPSzLGjXQcFCbl8jA3vraixgPNtcESq6nj2N2u0UX2PfOyrwzWs7q49cC5dg8gZ46G2L0Pb9TxEaTncGL66Rez3MFJ4Rc3cvha0ucmeYPmNnq+jVzhi5P9nHW9XWbxzJl0YwBwyddjcVlH3y5SrHkYdobFQUEVm/E8r6Id9R5J9F0WtV69VpHNqdKeCWEuwOFPOtbdUsb9f1BdHO2bXPQUIyBCLtgr3Zx76UN7evYY9xS66ONVR9dBC6c0Vi4SKvkuorDMQdXrlVn1+cRv7/mjNAkSP/5eL10/IQoAUh05UspsqeGTeGuDtFrLqTBu0UJ6eIpjHp5FgoHaDbQOV+mMcPw19TkHJXNxfjOE/ZpoH0ObzcV9jkTW1ShHDG6Eg8PtfKt00p9LFeVGQSh6IWzkp/gvNElh/0hLOrNZRCjmmqLMn4gBh0OY2hNybBIiFkgKisa7Ameavczp34zyIePnp1ZwUJhsMDy59NvgNndE86lm+E+O+VMGrG+KkhwtRtIlwqhYQaWY1WfnDRQMQ1twnZdaEMYUlhNevdjgU89bCtF3bFjEVlx7rzHG27O3+CP/laEuNCYI4V5xMEubcbzO7+shMejOah3E5rN1a55YdqmYaXQt5ZNV+j912atJoTz0n9a2RtI8OycXxZ5jb7RXjVw2cQbR7YNaNB2+V3xWDQUsU5zOEB2/zC3TIUtjMeR260jP1VkrmzB3Esmee/IC4sMTeBripZBmciXULyq83h4cC6bvwoT9OKWxRfxVS9SYJaL8k+j5H1FFJ2w37FIqyOELldq7cFSm8I0ThMRY+MbHJ3Mg1fhURQuQU0gW/mP0TjtTYjBnZiqKZnTKbuJsk7k9qRV9SHc4aT+AHI5p56Ag7joMicUKPP6dYmuKUlHwby1SH/Vg3HsTybiW/RhOIiUz396v1p10Y1/8Z+Qct6VuR2Uza8/evGW6qSCLqdWL/yM4UAxqPDKHh5Ni40r+2Q96Q0M6P4j17AYrsB261XkRl/x78uWOgjYs8AbB9705KWN9rpGOnGPGijLqML0NAKJb633x4FVC+jGf1LAmj08BIuZxdKKKtGuBRUZtYHa0lrFY+hh1AWvKNAxqXrbDWNCnpc7wBktdghY0+T5VpoBYERA4JT+UOLkG/HZw68aT6A/BtXUfgyjUkcXq/uwUpI9pIYz3TLkbkUo3u+Vi7g+7gol1yyvEJytKPIYc61jm75m/u6kY8opnUm7Y4/YOuSMxcv2RUjUs5nrx7EKXI7aZc+yd0k6fDFzw2i8Kzwr0K22sEfCvWr6p8K68nXaFxyqt/Mww=95+4wGvZ&2fO14x”}
 
Encoded AES Key = “95+4wGvZ&2fO14x”
Magic Number = 9
UnUsed data 1 = “5+4
Part of  AES Key = wGvZ&2fO
UnUsed data 2 = “14x
====================
依照查表我們知道 9 => “87j3id7w”,

所以可以知道真正的解密金鑰是 “87j3id7wwGvZ&2fO”

Real AES Key (16 Bytes) = “87j3id7w”+ “wGvZ&2fO”
Real AES Key (16 Bytes) = “87j3id7wwGvZ&2fO”
可以透過下面的網站進行資料的加密和解密