Comments 19
Но, к сожалению, судя по всему, туда ни чего не запишется.
Согласно PSPBoot Users's Guide в PSBL есть возможность запускать внешние приложения, например update, которое присутствует на flash recovery и FFS. Как я описал выше, в upadate можно изменить имя секции с PSBL на KOS и теоретически записать в KOS файл, переданный по tftp.
Второй вариант, можно собрать файл firmware с одним блоком (0x10000 байт chunk, но на wiki.jacknet.io это почему-то назвали module), и указать sector_id 5, что соответствует первому блоку в flash KOS, адрес 0xb0050000, и попробовть установить это firmware. Что, да как описано там же в https://wiki.jacknet.io/books/cisco-spa504g
Это все в теории, но вот ссылка на пример такого firmware, который содержит данные с телефона с серийником CCQ171506MP https://cloud.mail.ru/public/jT67/WpN6eYaZ7 (md5sum: 30aadd06bfc50caebd5d9090a14d6b30)
Его можно попробовать поставить на телефон со стертым KOS и посмотреть пройдет ли firmware валидацию и запишется ли что-то в KOS.
Спасибо, прошло успешно. Ну только теперь два клона с одним MAC и сейриником. Я конечно таил надежду, что именно так и может решиться вопрос. Именно подменой прошивки, прямо с самого начала "неудачного эксперимента". Но что б так быстро...Конечно написать я бы такое не смог. А можно попросить какой-то скрипт для правки нужного МАС в прошивке, (там еще по правде МАС в сертификате встречается с серийником, но это не существенно если честно - даже если и закрывать аппарат TLS+SRTP там такой беспорядок с верификацией и проверкой сертификатов, что лучше отключить все).
Ну собственно, можно файл с firmware update_KOS.bin править в hex редакторе, начиная со смещения 0xc0 (там где MAC адрес, Serial Number и т.д.), потом пофиксить digest'ы и rnd скриптом ниже, чтобы прошивка прошла валидацию, и заливать ее в KOS отформатированных аппаратов.
#!/usr/bin/end python3
import hashlib
def nsdigest(data, size):
data_index = 0
addition_value = 0
buf = [0] * 0x20
md5 = hashlib.md5()
while True:
buffer_index = 0
while True:
buf[buffer_index] = (data[data_index] + addition_value) & 0xff
addition_value += 19
buffer_index += 1
data_index += 1
if buffer_index >= 0x20 or data_index >= size:
break
md5.update(bytes(buf))
if data_index >= size:
break
return md5.digest()
def read_headers_from_file(file, header_length):
file_position = file.tell()
file.seek(0)
buffer = bytearray(file.read(header_length))
file.seek(file_position)
return buffer
def calculate_fw_didest(file, header_length):
buffer = read_headers_from_file(file, header_length)
buffer[16:64] = bytearray(48)
md5_hash = hashlib.md5()
md5_hash.update(buffer)
return md5_hash.digest()
def calculate_fw_random_sequence(file, header_length):
buffer = read_headers_from_file(file, header_length)
buffer[16:80] = bytearray(64)
return nsdigest(buffer, header_length)
def main():
filename = "update_KOS.bin"
with (open(filename, "rb+") as file):
# Fix module digest
file.seek(0xc0)
md5_hash = hashlib.md5()
md5_hash.update(file.read(0x10000))
file.seek(0x8c)
file.write(md5_hash.digest())
# Fix header rnd
file.seek(0x40)
file.write(calculate_fw_random_sequence(file, 192))
# Fix header digest
file.seek(0x30)
file.write(calculate_fw_didest(file, 192))
if __name__ == '__main__':
main()
Во-первых аплодисменты за настойчивость и смелость, после таких экспериментов устройство обычно превращается в кирпич. За что уважение инженерам, которые находят место для two stage bootloader и recovery.
Буду рад подсказкам, как можно вернуть аппаратам разные mac.
Если проскроллить текст выше, написано, что
Можно самому с помощью команды setenv задать параметры
HWA_0 - mac-адрес
В прошивке есть упоминания нескольких MAC: HWA_0, HWA_1 и HWA_SWITCH

Эти параметры работают только в режиме (psbl) и то, не все
По меньшей мере они пишутся в раздел ENV, а серийник, рабочий MAC в обычном режиме + сертификат + версия HW были записаны в KOSMOS....
Судя по коду ProductID, HWRevision, SerialNumber берутся из ENV

и в bootloader есть две команды установки переменных: стандартная и permanent
Set a system environment variable Usage: setenv Set a system environment variable Usage: setpermenv
А вот MAC адрес действительно хранится в первых 6 байтах 0xb0050000 (section KOS)

Я уже много много раз перепрошивал, окирпичивал и восстанавливал тестовый аппарат.
1. В свежих версиях, типа 7-5-6 и моложе в нормальном режиме полной загрузки нельзя получить доступ к командной строке для ввода команд. Зато это можно сделать в прошивке 7-5-2b и старше.
2. Там есть команда для просмотра памяти d, и она абсолютно точно показывает содержимое ячеек флешки, так же как и dm в режиме минимальной загрузки.
3. Там есть! казалось бы! спасительная команда m (Modify memory), она принимает значения, однако в результате ни чего так и не записывается.
А все эти переменные HWA_0 и 1, и HWRevision и SerialNumber я уже давно и через setenv и через setpermenv поназаписывал, но в нормальном режиме они не действуют.
Есть сравнительно немного полезных (слоны - животные полезные, Шариков копирайт) переменных в (psbl)
IPA - свой
IPA_SRV - адрес сервера tftp
IPA_GATEWAY
SUBNET_MASK
и вроде бы как TFTP_FO_FNAME для имени файла прошивки из режима SOS Recovery Mode (но я что-то потерял способности прошивать телефон из этого режима, даже файлы восстановления прошивки типа spa50x-30x-7-6-2f-recovery.exe перестали действовать на аппарат)
А сбросить конфигурацию как ни странно получается только исключительно отформатировав раздел KOS, хотя там вроде бы одни единицы.
Если просто форматирую FFS, потом заодно для верного RECOVERY, потом перезагрузка, потом прошиваюсь из режима (psbl) и все равно подтягивается старый конфиг...
Где же у него кнопка? (Урри копирайт). Ну дабы стереть какие-нибудь сектора, и конфиг станет дефолтный, не затрагивая MAC у запороленных (ну или восстановить MAC, его одного хватило бы для счастья). Я не собираюсь закрывать аппарат через SIP/TLS и сертификаты вроде бы как и не нужны, ну во всяком случае пока.
Разделы KOS и RECOVERY вроде бы как мог сравнивал побайтно до форматирования, с запороленной конфигурацией, и с дефолтной - ни какой разницы не нашел...
команда m (Modify memory), она принимает значения, однако в результате ни чего так и не записывается.
команда "m" скорее модифицирует данные в RAM, а не flash.
отформатировав раздел KOS, хотя там вроде бы одни единицы.
Приложение kosmos_ipp.st явно получает MAC из первых 6 байт KOS. Этот раздел 1048576 байт, нужен дамп всего раздела с телефона, на котором не выполнялся ftmkosmos.
ну или восстановить MAC, его одного хватило бы для счастья
видимо на телефоне нет утилит, которые могут писать напрямую в любой адрес flash, кроме команды "update", которая обновляет bootloader и пишет файл по адресу 0xb0000000 (PSBL). В теории можно поменять имя секции на "KOS" и записать файл с MAC адресом и 0xff padding до сектора.



(psbl) dm 0xb0050000 0x100000
0xb0050000: e02f6d5f f7c4ffff ffffffff ffffffff - _m/.............
0xb0050010: ffffffff ffffffff ffffffff ffffffff - ................
0xb0050020: 43435131 37313530 364d5000 ffffffff - 1QCC0517.PM6....
0xb0050030: ffffffff ffffffff ffffffff ffffffff - ................
0xb0050040: 53504135 30344700 ffffffff ffffffff - 5APS.G40........
0xb0050050: ffffffff ffffffff ffffffff ffffffff - ................
0xb0050060: 312e302e 3400ffff ffffffff ffffffff - .0.1...4........
0xb0050070: ffffffff ffffffff ffffffff ffffffff - ................
0xb0050080: 00000100 00000260 00000360 000004d8 - ....`...`.......
0xb0050090: ffffffff ffffffff 00000838 00000300 - ........8.......
0xb00500a0: ffffffff ffffffff ffffffff ffffffff - ................
0xb00500b0: ffffffff ffffffff ffffffff ffffffff - ................
0xb00500c0: ffffffff ffffffff ffffffff ffffffff - ................
0xb00500d0: ffffffff ffffffff ffffffff ffffffff - ................
0xb00500e0: ffffffff ffffffff ffffffff ffffffff - ................
0xb00500f0: ffffffff ffffffff ffffffff ffffffff - ................
0xb0050100: ce6be08c db0eb5f5 c7b8d36f c9a7bbab - ..k.....o.......
0xb0050110: 82e2d312 68573508 734f5888 978f904d - .....5Wh.XOsM...
0xb0050120: 8c5b331c 9a189dc2 2503d48b 21f528a3 - .3[........%.(.!
0xb0050130: cd220142 62486642 394500e0 e7215150 - B.".BfHb..E9PQ!.
0xb0050140: 183b6902 afec7b2a 78315602 dca3daff - .i;.*{...V1x....
0xb0050150: be888371 8185d798 1b1abe59 8065ca05 - q.......Y.....e.
0xb0050160: 0776c3ee 56c966f1 adf15583 f33fde4b - ..v..f.V.U..K.?.
0xb0050170: ea7e96f5 557be0fb 4209c8e1 587ed9a7 - ..~...{U...B..~X
0xb0050180: 347f85b2 24ec56da 30a2ba75 f7fb0e2e - ...4.V.$u..0....
0xb0050190: 1bdea1cc 321cb17d e1021031 61b233f8 - ....}..21....3.a
0xb00501a0: 9002f1b3 a31671a3 d87402a9 c5058354 - .....q....t.T...
0xb00501b0: ab74014b 328bb88e 89a4c200 c341ecca - K.t....2......A.
0xb00501c0: 03f1e101 23adaee7 3f0393d9 81e97d28 - .......#...?(}..
0xb00501d0: af23359a 8171c251 e1e9e187 bf0033fd - .5#.Q.q......3..
0xb00501e0: 182a6645 51133f31 efd8d267 6bae30d2 - Ef*.1?.Qg....0.k
0xb00501f0: 1bda0e85 23b387b6 4b622f2c d6a86072 - .......#,/bKr`..
0xb0050200: 2e9b7a17 9f712922 52e11a6e f54df146 - .z..")q.n..RF.M.
0xb0050210: 791dee01 1862dd02 b4f7a710 fdc6b674 - ...y..b.....t...
0xb0050220: 21a941f9 b361b894 3ce7f1a6 6873fea9 - .A.!..a....<..sh
0xb0050230: 6b412e6d 01329867 9a96d8b4 f11cacd6 - m.Akg.2.........
0xb0050240: ca47efb5 399c020f e3e0eaa3 9d92b930 - ..G....9....0...
0xb0050250: e75e342b 21764d70 7f24717e b53868de - +4^.pMv!~q$..h8.
0xb0050260: 02bc9bd9 7a3afa12 de548c41 3dd6a470 - ......:zA.T.p..=
0xb0050270: cc005236 92b58900 a5d3b5cf 78ffb701 - 6R.............x
0xb0050280: a1e74b09 a7a37f02 fddac81e f1aa946b - .K..........k...
0xb0050290: e37f1007 f9cdb123 f478ce71 6f4e4647 - ....#...q.x.GFNo
0xb00502a0: 40519cdc 51e462be a002668c cb962ae7 - ..Q@.b.Q.f...*..
0xb00502b0: 3a87b519 c73271b9 e626003d 244d918e - ...:.q2.=.&...M$
0xb00502c0: 18d32fbb 0d6d7a6a f2b59b3b f900d93f - ./..jzm.;...?...
0xb00502d0: edb97b21 da9a7f46 1966e310 ce088120 - !{..F.....f. ...
0xb00502e0: b06ef002 3aa55b67 ca411820 1d7a46ad - ..n.g[.: .A..Fz.
0xb00502f0: aeeeda76 e5ec5436 1d40d731 fc79ccd3 - v...6T..1.@...y.
0xb0050300: ef25444e fad183e7 fc0ff834 a00e9054 - ND%.....4...T...
0xb0050310: 4ef4e07d 574723cd aa62ad7d 02410085 - }..N.#GW}.b...A.
0xb0050320: cee16066 464c98e6 ba2cacde cc900a2c - f`....LF..,.,...
0xb0050330: 92ce07f8 89e034f9 8b6bdc76 8dcca6ff - .....4..v.k.....
0xb0050340: bcdcbe44 40d7a6fd ef9010a9 51506b9f - D......@.....kPQ
0xb0050350: 1a310842 47469cb3 e39b1c2d 94245101 - B.1...FG-....Q$.
0xb0050360: 308204d4 3082043d a0030201 02021041 - ...0=..0....A...
0xb0050370: 5bb6478d 1572482c ac9fb7a9 2553e930 - .G.[,Hr.....0.S%
0xb0050380: 0d06092a 864886f7 0d010104 05003081 - *.....H......0..
0xb0050390: e2310b30 09060355 04061302 55533113 - 0.1.U........1SU
0xb00503a0: 30110603 55040813 0a43616c 69666f72 - ...0...UlaC.rofi
0xb00503b0: 6e696131 11300f06 03550407 13085361 - 1ain..0...U.aS..
0xb00503c0: 6e204a6f 73653120 301e0603 55040a13 - oJ n 1es...0...U
0xb00503d0: 17536970 75726120 54656368 6e6f6c6f - piS. aruhceTolon
0xb00503e0: 67792c20 496e632e 3130302e 06035504 - ,yg.cnI.001.U..
0xb00503f0: 0b132753 69707572 61205465 63686e6f - S'..rupieT aonhc
0xb0050400: 6c6f6779 20436572 74696669 63617465 - ygolreC ifitetac
0xb0050410: 20417574 686f7269 74793132 30300603 - tuA iroh21yt..00
0xb0050420: 55040313 29536970 75726120 54656368 - ...UpiS) aruhceT
0xb0050430: 6e6f6c6f 67792043 6c69656e 7420526f - olonC ygneiloR t
0xb0050440: 6f742041 7574686f 72697479 20313123 - A toohtuytir#11
0xb0050450: 30210609 2a864886 f70d0109 01161477 - ..!0.H.*....w...
0xb0050460: 65626d61 73746572 40736970 7572612e - amberetspis@.aru
0xb0050470: 636f6d30 1e170d31 33303430 31313733 - 0moc1...04033711
0xb0050480: 3933385a 170d3434 30343131 31373339 - Z83944..11409371
0xb0050490: 33385a30 81cc310b 30090603 55040613 - 0Z83.1.....0...U
0xb00504a0: 02555331 15301306 03550408 130c6530 - 1SU...0...U.0e..
0xb00504b0: 32663664 35666637 63343114 30120603 - d6f27ff5.14c...0
0xb00504c0: 55040713 0b434351 31373135 30364d50 - ...UQCC.5171PM60
0xb00504d0: 31163014 06035504 0a130d43 6973636f - .0.1.U..C...ocsi
0xb00504e0: 20537973 74656d73 31123010 06035504 - syS smet.0.1.U..
0xb00504f0: 0b130963 6973636f 2e636f6d 31383036 - c...ocsimoc.6081
0xb0050500: 06035504 03132f53 50413530 34472c20 - .U..S/..05AP ,G4
0xb0050510: 4d41433a 20653032 66366435 66663763 - :CAM20e 5d6fc7ff
0xb0050520: 342c2053 65726961 6c3a2043 43513137 - S ,4aireC :l71QC
0xb0050530: 31353036 4d50312a 30280609 2a864886 - 6051*1PM..(0.H.*
0xb0050540: f70d0109 01161b6c 696e6b73 79732d63 - ....l...sknic-sy
0xb0050550: 65727461 646d696e 40636973 636f2e63 - atrenimdsic@c.oc
0xb0050560: 6f6d3081 9f300d06 092a8648 86f70d01 - .0mo..0.H.*.....
0xb0050570: 01010500 03818d00 30818902 818100c9 - ...........0....
0xb0050580: 30e072da abe18c74 22c269d9 71bf56ae - .r.0t....i.".V.q
0xb0050590: 7b6056bb 7d4dd8cd a43b9383 87ee6b55 - .V`{..M}..;.Uk..
0xb00505a0: a8eca7b1 90a3a389 180388e1 c367f5d6 - ..............g.
0xb00505b0: 24c91c8f 71288e50 3fbee976 d2962cb2 - ...$P.(qv..?.,..
0xb00505c0: 6f329716 f5b851e7 ffe107d8 7e2f85d3 - ..2o.Q......../~
0xb00505d0: cc88a321 8b21aeda 5105efea 627fb8a1 - !.....!....Q...b
0xb00505e0: 58b38b32 e7ada3c2 ca314b4b 34c7de4f - 2..X....KK1.O..4
0xb00505f0: f1d44be0 23dc7165 3fdeb6a7 f51b7302 - .K..eq.#...?.s..
0xb0050600: 03010001 a382019d 30820199 30090603 - ...........0...0
0xb0050610: 551d1304 02300030 21060960 86480186 - ...U0.0.`..!..H.
0xb0050620: f842010d 04141612 50726f64 75637420 - ..B.....dorP tcu
0xb0050630: 69732053 50413530 3447301d 0603551d - S si05AP.0G4.U..
0xb0050640: 0e041604 14c858c2 72e3c320 95831ff4 - .....X.. ..r....
0xb0050650: 2555ff66 49bb1857 6a308201 20060355 - f.U%W..I..0jU..
0xb0050660: 1d230482 01173082 01138014 4c83382b - ..#..0......+8.L
0xb0050670: 9dc6e365 ab195131 a5c9359b 510a2321 - e...1Q...5..!#.Q
0xb0050680: a181e8a4 81e53081 e2310b30 09060355 - .....0..0.1.U...
0xb0050690: 04061302 55533113 30110603 55040813 - .....1SU...0...U
0xb00506a0: 0a43616c 69666f72 6e696131 11300f06 - laC.rofi1ain..0.
0xb00506b0: 03550407 13085361 6e204a6f 73653120 - ..U.aS..oJ n 1es
0xb00506c0: 301e0603 55040a13 17536970 75726120 - ...0...UpiS. aru
0xb00506d0: 54656368 6e6f6c6f 67792c20 496e632e - hceTolon ,yg.cnI
0xb00506e0: 3130302e 06035504 0b132753 69707572 - .001.U..S'..rupi
0xb00506f0: 61205465 63686e6f 6c6f6779 20436572 - eT aonhcygolreC
0xb0050700: 74696669 63617465 20417574 686f7269 - ifitetactuA iroh
0xb0050710: 74793132 30300603 55040313 29536970 - 21yt..00...UpiS)
0xb0050720: 75726120 54656368 6e6f6c6f 67792043 - aruhceTolonC yg
0xb0050730: 6c69656e 7420526f 6f742041 7574686f - neiloR tA toohtu
0xb0050740: 72697479 20313123 30210609 2a864886 - ytir#11 ..!0.H.*
0xb0050750: f70d0109 01161477 65626d61 73746572 - ....w...amberets
0xb0050760: 40736970 7572612e 636f6d82 1045bf48 - pis@.aru.mocH.E.
0xb0050770: c0ceb88f 7bc8e16d 85625a5b 8f301106 - ....m..{[Zb...0.
0xb0050780: 09608648 0186f842 01010404 03020780 - H.`.B...........
0xb0050790: 30130603 551d2504 0c300a06 082b0601 - ...0.%.U..0...+.
0xb00507a0: 05050703 02300d06 092a8648 86f70d01 - ......0.H.*.....
0xb00507b0: 01040500 03818100 19973ffe fc8e4b6e - .........?..nK..
0xb00507c0: addd181c 09b7b7f0 8a8bf139 d01a9ab4 - ........9.......
0xb00507d0: de252f81 adcd5100 cb1df52e 36d067d5 - ./%..Q.......g.6
0xb00507e0: ad64f40b d9933b2e 2f0530a0 a3658584 - ..d..;...0./..e.
0xb00507f0: 511ec186 437715f8 18866ce3 b5659f49 - ...Q..wC.l..I.e.
0xb0050800: 744f050d e8057473 45fb950e fd132691 - ..Otst.....E.&..
0xb0050810: ff760b3e 8d91793d 7acb907e ffad1374 - >.v.=y..~..zt...
0xb0050820: 32473d44 92b1e8e4 ac09ff59 ccb1e174 - D=G2....Y...t...
0xb0050830: bf01d92d 08c764f2 bf089bb6 634002c1 - -....d........@c
0xb0050840: 4a23e9ec ed712ca5 ffffffff ffffffff - ..#J.,q.........
0xb0050850: ffffffff ffffffff c1d22195 28782f8b - .........!.../x(
0xb0050860: d58b138e 6c8ea543 ffffffff ffffffff - ....C..l........
0xb0050870: ffffffff ffffffff 7a0bfa39 8755aeca - ........9..z..U.
0xb0050880: b663a571 6058b171 ffffffff ffffffff - q.c.q.X`........
0xb0050890: ffffffff ffffffff 322c2a5c a76bc31f - ........\*,2..k.
0xb00508a0: ece6ada0 e96cc944 ffffffff ffffffff - ....D.l.........
0xb00508b0: ffffffff ffffffff 0e5cbf36 4755f823 - ........6.\.#.UG
0xb00508c0: 67d961ab f33c1543 ffffffff ffffffff - .a.gC.<.........
0xb00508d0: ffffffff ffffffff 125fd7ce aae495e4 - .........._.....
0xb00508e0: 04512350 8e691c4d ffffffff ffffffff - P#Q.M.i.........
0xb00508f0: ffffffff ffffffff c4ddc4b1 b8f7ff60 - ............`...
0xb0050900: bf2a58ab 8f1823b7 ffffffff ffffffff - .X*..#..........
0xb0050910: ffffffff ffffffff 238c5af9 37135443 - .........Z.#CT.7
0xb0050920: 90d19dac 8068849e ffffffff ffffffff - ......h.........
0xb0050930: ffffffff ffffffff b3998a4c b4f68be9 - ........L.......
0xb0050940: 8ecc89eb 738ae5f3 ffffffff ffffffff - .......s........
0xb0050950: ffffffff ffffffff 6981326f 271bc479 - ........o2.iy..'
0xb0050960: 78ba123d 6c39b454 ffffffff ffffffff - =..xT.9l........
0xb0050970: ffffffff ffffffff 56172a5c 6b46d837 - ........\*.V7.Fk
0xb0050980: c5e35a3b bcac27ee ffffffff ffffffff - ;Z...'..........
0xb0050990: ffffffff ffffffff 11c55d7f b4bd4732 - .........]..2G..
0xb00509a0: b714125f 90a0fb6f ffffffff ffffffff - _...o...........
0xb00509b0: ffffffff ffffffff 811b5ff8 55319049 - ........._..I.1U
0xb00509c0: 7736935d f6011e0b ffffffff ffffffff - ].6w............
0xb00509d0: ffffffff ffffffff 49d67c5c eb62fb45 - ........\|.IE.b.
0xb00509e0: 0805a6e7 723b8993 ffffffff ffffffff - ......;r........
0xb00509f0: ffffffff ffffffff 037e54b4 48a33147 - .........T~.G1.H
0xb0050a00: b6ec45d9 6e746cf1 ffffffff ffffffff - .E...ltn........
0xb0050a10: ffffffff ffffffff 6aa806db 8e103848 - ...........jH8..
0xb0050a20: c0ac5d97 8afe59c8 ffffffff ffffffff - .]...Y..........
0xb0050a30: ffffffff ffffffff d9102662 ee453ef9 - ........b&...>E.
0xb0050a40: 8c21a537 48bdbdb8 d0f63f1a 1fc4e955 - 7.!....H.?..U...
0xb0050a50: 69b559f3 a225f3d9 78b2f287 cda56863 - .Y.i..%....xch..
0xb0050a60: b3e03345 c0fd04e1 5ec5b2b6 6a181abb - E3.........^...j
0xb0050a70: b4fba576 5330bf07 6d982b35 edecfd46 - v.....0S5+.mF...
0xb0050a80: 441d629e 8353d6c5 4a86b7c2 e9fce930 - .b.D..S....J0...
0xb0050a90: 0af5b3b5 3fc6dfbd 6b2319da c0827ba4 - .......?..#k.{..
0xb0050aa0: 302f7b13 f19b9923 1b137b27 83dc3700 - .{/0#...'{...7..
0xb0050ab0: e996f8be 2d7b70d2 6454db77 39541f02 - .....p{-w.Td..T9
0xb0050ac0: 18fb6856 89457bf8 191c3bd6 d0fa9075 - Vh...{E..;..u...
0xb0050ad0: 69e61dfd 5e1bf9fa e02f3bc8 9b50363f - ...i...^.;/.?6P.
0xb0050ae0: 5059f249 5b34366f 947f55d8 23ef7409 - I.YPo64[.U...t.#
0xb0050af0: 4cf6a666 a4f70a74 d94c5076 1bf1d22b - f..Lt...vPL.+...
0xb0050b00: 261cce20 8c6f86d9 9390044a f1441626 - ..&..o.J...&.D.
0xb0050b10: de1c8735 a878c7fc 8df4416b 0bcab031 - 5.....x.kA..1...
0xb0050b20: ff5a55fa 4c906685 b55ea614 5171d5c6 - .UZ..f.L..^...qQ
0xb0050b30: 9342802c 5c52cd52 ffffffff ffffffff - ,.B.R.R\........
User Abort так как далее единичкиСобственно вот раздел KOS, первые 6 байт MAC, далее с отступом серийник, версия продукта, версия HW, еще нечто, и клиентский сертификат.
Это всё я видел на еще не сброшенных аппаратах. Но, к сожалению, судя по всему, туда ни чего не запишется. Экзотические способы по выпаиванию и программированию пожалуй излишни.
Спасибо за помощь-поддержку. Лихо у вас получается обратно декомпиллировать.
Хитрая особенность по HW_0 в (psbl) еще заключается в том, что как-то его надо по-другому записать что-ли. У меня он на постоянную setrepmenv записан в тестовом аппарате и уже не поправить, и fmt как-то для переменных в ENV не работает, а должна. Суть да дело, вместо записанной переменной 580a2087bc96 он светит 960000000000
Да, и после сброса у всех после полной загрузки адреса MAC 00:0E:A6:66:41:F9
Но, к сожалению, судя по всему, туда ни чего не запишется.
Согласно PSPBoot Users's Guide в PSBL есть возможность запускать внешние приложения, например update, которое присутствует на flash recovery и FFS. Как я описал выше, в upadate можно изменить имя секции с PSBL на KOS и теоретически записать в KOS файл, переданный по tftp.
Второй вариант, можно собрать файл firmware с одним блоком (0x10000 байт chunk, но на wiki.jacknet.io это почему-то назвали module), и указать sector_id 5, что соответствует первому блоку в flash KOS, адрес 0xb0050000, и попробовть установить это firmware. Что, да как описано там же в https://wiki.jacknet.io/books/cisco-spa504g
Это все в теории, но вот ссылка на пример такого firmware, который содержит данные с телефона с серийником CCQ171506MP https://cloud.mail.ru/public/jT67/WpN6eYaZ7 (md5sum: 30aadd06bfc50caebd5d9090a14d6b30)
Его можно попробовать поставить на телефон со стертым KOS и посмотреть пройдет ли firmware валидацию и запишется ли что-то в KOS.
Спасибо, прошло успешно. Ну только теперь два клона с одним MAC и сейриником. Я конечно таил надежду, что именно так и может решиться вопрос. Именно подменой прошивки, прямо с самого начала "неудачного эксперимента". Но что б так быстро...Конечно написать я бы такое не смог. А можно попросить какой-то скрипт для правки нужного МАС в прошивке, (там еще по правде МАС в сертификате встречается с серийником, но это не существенно если честно - даже если и закрывать аппарат TLS+SRTP там такой беспорядок с верификацией и проверкой сертификатов, что лучше отключить все).
Замечательно, я так понмаю телефон с серийником CCQ171506MP по-прежнему залочен. Если попробoвать залить в него вот эту прошивку, что-то изменится?
https://cloud.mail.ru/public/eYQi/RnntzXQqk
Это тот-же дамп KOS, но без последней части (license key strings).
Если ничего не поменяется, то отформатировать при помощи fmtkosmos как в статье, и после сброса залить прошивку с полным дампом из первой ссылки.
Нет, ССQ171506MP изначально не был залочен, у меня примерно половина/половину несколько десятков бывших залоченных (и теперь сброшенных к серийнику 00000000000000) и столько же нормальных.
На каждом аппарате на задней крышке есть серийник и MAC

Ученики после сброса в дефолт дюже удивились, когда не смогли найти крышки от аппаратов по мас-адресам....Но было поздно и в принципе делать было нечего - начало было положено и что уж там было останавливаться.
О, как. Т.е. залоченных телефонов не осталось ? Посмотреть, что у них в KOS было.
К сожалению сертификаты восстановить не получится, они хоть и 1024 бит RSA, но подписаны CA Sipura Tec.
Да их месяц как не осталось. Один где-то оставался среди горы (буквально). У него сдули резистор добавочный на tty порту (около площадки куда припаивать) и аппарат показывал но не шился (конечно, цепь на передачу не замкнута). Можно вместо резистора кинуть соплю - проверено.
Сертификаты забавные - я чуть чуть почитал, есть комментарии ниже.
На подопытный аппарат, у которого была раздел KOS в единичках и нормальная прошивка, я накатил update_KOS "прошивку якобы" с заводскими данными от чужого живого аппарата и он благополучно их "съел". И он стал клоном полностью рабочего.
Даже ни чего больше восстанавливать не пришлось. У него даже конфигурация осталась старая как ни удивительно!!! (я уже наэкспреминтировал там себе, то есть была проверка на регистрацию аппарата и звонки на мой сервер).
То есть раздел KOS в единичках сам по себе может и не хранит (наверное) конфигурацию, однако служит триггером на её сброс в дефолт. Глобально надо выкачивать всю флешку и сравнивать со сброшенным, но это поверьте оооочень долго - что то несколько десятков часов на скорости 9600. Ну дабы вычислить место, которое подтереть только для сброса пароля администратора в конфиге.
Но попроще теперь стратегия видится такая:
1. Форматируется раздел FFS, загрузка,сбрасывает в дефолт конфиг
2. Форматируем RECOVERY, KOS, Восстанавливаем прошивку, нормальную.
3. Скармливается якобы прошивка update_KOS с индивидуальными данными
Аппарат сброшен и прошит на нужную прошивку
Можно попробывать короче
Форматировать FFS - сброс в дефолт - прошивка подменной 8-0-0 updateKOS
Ну собственно, можно файл с firmware update_KOS.bin править в hex редакторе, начиная со смещения 0xc0 (там где MAC адрес, Serial Number и т.д.), потом пофиксить digest'ы и rnd скриптом ниже, чтобы прошивка прошла валидацию, и заливать ее в KOS отформатированных аппаратов.
#!/usr/bin/end python3
import hashlib
def nsdigest(data, size):
data_index = 0
addition_value = 0
buf = [0] * 0x20
md5 = hashlib.md5()
while True:
buffer_index = 0
while True:
buf[buffer_index] = (data[data_index] + addition_value) & 0xff
addition_value += 19
buffer_index += 1
data_index += 1
if buffer_index >= 0x20 or data_index >= size:
break
md5.update(bytes(buf))
if data_index >= size:
break
return md5.digest()
def read_headers_from_file(file, header_length):
file_position = file.tell()
file.seek(0)
buffer = bytearray(file.read(header_length))
file.seek(file_position)
return buffer
def calculate_fw_didest(file, header_length):
buffer = read_headers_from_file(file, header_length)
buffer[16:64] = bytearray(48)
md5_hash = hashlib.md5()
md5_hash.update(buffer)
return md5_hash.digest()
def calculate_fw_random_sequence(file, header_length):
buffer = read_headers_from_file(file, header_length)
buffer[16:80] = bytearray(64)
return nsdigest(buffer, header_length)
def main():
filename = "update_KOS.bin"
with (open(filename, "rb+") as file):
# Fix module digest
file.seek(0xc0)
md5_hash = hashlib.md5()
md5_hash.update(file.read(0x10000))
file.seek(0x8c)
file.write(md5_hash.digest())
# Fix header rnd
file.seek(0x40)
file.write(calculate_fw_random_sequence(file, 192))
# Fix header digest
file.seek(0x30)
file.write(calculate_fw_didest(file, 192))
if __name__ == '__main__':
main()в нагромождении знаков, которые хранятся в разделе, содержится кроме всего прочего сертификат, в котором присутствуют адреса электронной почты, в названии который мелькает забавная мешанина
webmaster@sipura.com
linksys-certadmin@cisco.com
и подобные (если данные читать big-endian, тут некрасиво отображено)
Вот еще собрат по несчастью
https://forum.ixbt.com/topic.cgi?id=88:5469&ysclid=mhrcyw8rdy358414959Там (да я вспоминаю тоже где-то видел еще) - в (psbl) есть переменные HWRevision SerialNumber но "пустышки"
Способности прошивать аппарат из SOS Recovery Mode из-под windows восстановились - надо вместо серийника (которого естественно нету, ну он куча нулей) записывать F ровно двенадцать раз, не более - тогда это означает "любой" серийник
Сброс настроек VOIP телефона Cisco SPA504G