1 1 1 1 1 1 1 1 1 1

Данная статья навеяна следующим обстоятельством. В последнее время, мне на почту стало приходить достаточное количество писем, с просьбой поделиться прошивкой для SCX-3200 и на другие новые аппараты. С вопросами по взлому таких прошивок, подсказать где прячется серийный номер в прошивке если открыть прошивку в хекс-редакторе, как его вырезать оттуда и прочее и прочее... Решил ответить здесь.

Прошивки на новые аппараты распространяются только как одноаппаратные, то есть, прошивка, которую вам высылает дилер (или как там он себя называет) разработчика привязана к конкретному аппарату (или чипу картриджа) и она будет работать только с ним. Естественно на эти модели есть и многоаппаратные прошивки, но для исключения перепродажи и попадание затем  в открытый доступ, продажа таких прошивок полностью прекращена. (На данный момент появились МА прошивки переделанные из одноаппаратных, но тут как повезет, такая прошивка может нормально работать, а может заблокировать аппарат через определенное количество отпечатков и придется краснеть перед клиентом)

Кто генерирует одноаппаратные прошивки? По этому вопросу уже можно обращаться на многие сайты, так как сеть перекупщиков прошивок стала очень большая. Так же появились и альтернативные "писатели" (почему писатели в кавычках, потому что часто прошивку ломают уже пофиксенную). Поэтому в фиксы стала вводиться защита от "вломщиков" фиксов - стало применяться более изощренное шифрование и прошивка с помощью чипа-ключа (от этого нововведения (чип-ключ) постепенно стали отказываться, так как на фоне других продавцов, продающих прошивки без привязки к чипу, привязка к чип-ключу сложна для покупателя). Последний писк это прошивка "портящая" чип, после такой прошивки с этим же чипом уже не прошить аппарат. Интернет пестрит объявлениями о продаже прошивок. Встречаются и предложения о продаже генераторов прошивок. В общем, монополия на продажу прошивок исчезла и цены на прошивки упали к радости одних и к горю других. Чтобы отбить желание пользоваться прошивками и генераторами выложенными в сети, были выброшены фейковые МА прошивки (блокирующие принтер после достижения определенного количества отпечатков и вырезанными командами терминала, чтобы было не возможно восстановить аппарат), и генераторы на некоторые модели (в основном на старые модели аппаратов) которые периодически делают из аппарата "овощ". Так же негодующая псевдообщественность, ратующая за бесплатность фиксов, периодически взламывает и ддосит сайты продавцов прошивок, например, сайт независимых инженеров - такая картинка иногда появлялась у них вместо заглавной страницы: (да и наш сайт периодически тоже)

Далее, по поводу вырезания серийного номера из прошивки, для того чтобы использовать такую прошивку как под свой аппарат. В лоб такое проделывать совершенно бесполезно, ибо прошивка  запакована и, чтобы осмысленно что-то с ней предпринимать ее надо предварительно распаковать и, в новых версиях, еще и расшифровать перед распаковкой. Только после распаковки прошивки-фикса (в оригинальной прошивке нет никакого серийного номера), в ее ядре, можно найти серийный номер аппарата.  Но его вырезание оттуда и последующая запаковка с новым номером вам ничего не даст – меняется контрольная сумма серийного номера, а поскольку аппарат ее контролирует (об этом позаботился автор фикс-прошивки), то измененная прошивка отторгается. Плюс, после смены серийника, надо "уравновесить" кс прошивки. А тот номер, который виден в Хекс редакторе (и который так хотят заменить страждущие на номер своего аппарата) нужен, чтобы можно было в случае чего посмотреть на какой номер она была сгенерирована. То есть прошивка с изменённым WinHex-ом серийным номером просто не зальется в аппарат. Возьмем, например, аппарат SCX-3200.

Вместо сообщения об успешной перепрошивки в окне гипер-терминала, как, например, в этом случае -

[JQ_FirmwareUpgrade]    JQInfo[0x40bb1a40]
FWUInfo[0x40bb1b54]

[JQ_notifyFWUpgradeToEngine] PIFCBRDG_IF_24VOnRequest(0) -
Set BB_UI_UPGRADEMODE to Display FWU Message
FWU Message Displayed
[JQ] SystemFWUpgrade
[FW_IL_MEMORY] Firmware Upgrade ---- Address[0x41bfffc0]
verify_Image : 0x41bfffc0
pstImageHeader->pulStartAddr : 0x00000000
pstImageHeader->ulFWDataSize : 0x00400000
model      : 0x05000041
flash type : 0x00020002
image type : 0x00000000
Input Signature : $KER
SIG : $KER
SIG : $CMS
SIG : $EMU
SIG : $ENG
[JQ] PRD Value Board(17), SubModelID(0x00020002)

DramFlashCheckSum
{
check sum start address : 41bfffdc, count : 400000
check sum : a5a5
} /* Checksum End

Source Checksum is valid
JQ_Idle_Default

===============================
Start flash_writer
===============================

[[[[[ Flash Writing : BASE : 0x0]]]]]


start_addr : 0x0
end_addr : 0x400000
image_start_addr : 0x41bfffdc
pubStartSectAddr : 0x00000000
ulDoWriteSize : 0x00400000
pubReadDataAddr : 0x41bfffdc
pubTempReadAddr : 0x41bfffdc
pubTempWriteAddr : 0x00000000
ulFlashWritedSize : 0x00000000
[JQ_IdleStateFWUpgrade] From RAM Address[0x41bfffdc],  To Destination Flash Addr
ess[0x0]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41c1ffdc],  To Destination Flash Addr
ess[0x20000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41c3ffdc],  To Destination Flash Addr
ess[0x40000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41c5ffdc],  To Destination Flash Addr
ess[0x60000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41c7ffdc],  To Destination Flash Addr
ess[0x80000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41c9ffdc],  To Destination Flash Addr
ess[0xa0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41cbffdc],  To Destination Flash Addr
ess[0xc0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41cdffdc],  To Destination Flash Addr
ess[0xe0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41cfffdc],  To Destination Flash Addr
ess[0x100000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41d1ffdc],  To Destination Flash Addr
ess[0x120000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41d3ffdc],  To Destination Flash Addr
ess[0x140000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41d5ffdc],  To Destination Flash Addr
ess[0x160000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41d7ffdc],  To Destination Flash Addr
ess[0x180000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41d9ffdc],  To Destination Flash Addr
ess[0x1a0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41dbffdc],  To Destination Flash Addr
ess[0x1c0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41ddffdc],  To Destination Flash Addr
ess[0x1e0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41dfffdc],  To Destination Flash Addr
ess[0x200000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41e1ffdc],  To Destination Flash Addr
ess[0x220000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41e3ffdc],  To Destination Flash Addr
ess[0x240000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41e5ffdc],  To Destination Flash Addr
ess[0x260000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41e7ffdc],  To Destination Flash Addr
ess[0x280000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41e9ffdc],  To Destination Flash Addr
ess[0x2a0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41ebffdc],  To Destination Flash Addr
ess[0x2c0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41edffdc],  To Destination Flash Addr
ess[0x2e0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41efffdc],  To Destination Flash Addr
ess[0x300000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41f1ffdc],  To Destination Flash Addr
ess[0x320000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41f3ffdc],  To Destination Flash Addr
ess[0x340000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41f5ffdc],  To Destination Flash Addr
ess[0x360000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41f7ffdc],  To Destination Flash Addr
ess[0x380000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41f9ffdc],  To Destination Flash Addr
ess[0x3a0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41fbffdc],  To Destination Flash Addr
ess[0x3c0000]
[JQ_IdleStateFWUpgrade] From RAM Address[0x41fdffdc],  To Destination Flash Addr
ess[0x3e0000]
Memory Verify Start: 0x41ffffdc / 0x400000
Memory Verify End: 0x41ffffdc / 0x400000

FlashCheckSum
{
check sum start address : 0, count : 400000
check sum : a5a5
} /* Checksum End

[JQ_fwUpgradeFlashCheckSum] Alloc Buffer(0x41bfffc0, 0x417fffc0)
=>check sum is valid

System reset will be executed in 1 sec....


[JQ] SystemFW upgraded---
[JQ_FirmwareUpgrade]---Destroy Param Obj(0x40bb1600)---
[JQ_FirmwareUpgrade]---reset machine---
<<<HAL_ResetMachine>>> WatchDog Reset !!!

Boot&Mon. CheckSum OK!

[ WATCH DOG RESET  Booting... ]

Press any key to execute Monitor Program within 1 sec...
Kernel Data Read Start From Serial Flash
Kernel Data Read End
Find Compressed Kernel

CHKSUM
{
check sum start address : 41000000, count : 001B0000
check sum : 0000A5A5
} /* Checksum End

Checksum OK!!
Kernel UnZip Done!!
jump to 0x40080000
ramsize= 406BFFFF, gsbsize = 40500E6C, FreeMemPtr = 405001B0, FreeMemStart = 40
5001B0
<<< Reelase Mode >>>
<<<LogMsg_PrintOff>>>
Model Code : SCX3200
Main Kernel F/W Version : V3.00.01.07
Main Kernel F/W Date : AUG-24-2010
Check PowerOn Mode PBA Port ---- ( GPIO3In - 0x2dabc, GPIOIn - 0xef )
DRAM:>
################### Normal Mode Start##########################

Получим вот это-

[JQ_FirmwareUpgrade]    JQInfo[0x40bb1a40]
FWUInfo[0x40bb1b54]

[JQ_notifyFWUpgradeToEngine] PIFCBRDG_IF_24VOnRequest(0) -
Set BB_UI_UPGRADEMODE to Display FWU Message
FWU Message Displayed
[JQ] SystemFWUpgrade
[FW_IL_MEMORY] Firmware Upgrade ---- Address[0x41bfffc0]
verify_Image : 0x41bfffc0
pstImageHeader->pulStartAddr : 0x00000000
pstImageHeader->ulFWDataSize : 0x00400000
model      : 0x05000041
flash type : 0x00020002
image type : 0x00000000
Input Signature : $KER
SIG : $KER
SIG : $CMS
SIG : $EMU
SIG : $ENG
[JQ] PRD Value Board(17), SubModelID(0x00020002)

DramFlashCheckSum
{
check sum start address : 41bfffdc, count : 400000
check sum : 90d7
} /* Checksum End

Source Checksum is not valid
Downloaded Image is not Valid
Reset Target and Run Flash Writing Program Again
Image Error Reset Printer

То есть аппарат Samsung SCX-3200 отторгает такую "модифицированную" прошивку. Правда никаких непредсказуемых последствий с аппаратом, как пророчествовали независимые торгующие инженеры, замечено не было, заливал в него, ради интереса, разные прошивки и, каждый раз, он, как птица Феникс, после перезагрузки возвращался к жизни:) Естественно мои слова ни в коем случае не надо воспринимать как руководство к действию - я не проверял это на всех моделях и морально был готов "потерять" аппарат, а материально - купить новый, но можно с уверенностью сказать, что МФУ не грозить смерть от некорректной прошивки. Это ни в коем разе не относится к некоторым принтерам, они с радостью примут прошивку от другого аппарата и благополучно превратятся в овощ.

Какой общий итог можно подвести под всем этим? Пока только один - покупки одноаппаратной прошивки практически не избежать (возможность прошивки чипов картриджей не рассматриваю, так как это технология еще сырая, да и Самсунг может в любой момент заткнуть эту дырку, по некоторым сведениям уже заткнул в некоторых новых версиях прошивок (контроллируя изменение прогресс-бара чипа, да и жажда быстрой наживы делает свое дело:). Остается только один вопрос, который вам нужно решить, а какую именно прошивку покупать? С возможностью обновления, или без такой возможности. 

Прошивка с возможностью обновления дешевле, но если компьютер, к которому подключен принтер, имеет выход в интернет, то прошивка принтера может самостоятельно обновиться (не без вашего участия) и его, принтер, нужно будет прошивать по новой, опять покупая прошивку, причем обновление будет на новую версию, на которую, возможно, не будет еще фикс-прошивки! Но на самом деле прошивка с защитой от обновления теоретически  может обновиться, если Самсунг предпримет некоторые шаги. Но вот на данный момент боятся, что прошивка обновится, нет оснований.

Некоторые предлагают блокировку серверов обновления в файле hosts, в принципе возможно, если прописать ВСЕ сервера обновлений. Прошивка без возможности обновления дороже (непонятно почему, так как ее генерация ничем не отличается от генерации прошивки с возможностью обновления, но так уже сложилось исторически, что она дороже), такая прошивка блокирует возможность обновления, но  тем не менее, вы сами сможете обновить прошивку в аппарате (введя аппарат в принудительный режим загрузки или воспользовавшись дебаг-кабелем), но обычно такого и не требуется. Прошивки на цветные аппараты еще дороже (но на данный момент цены уже сравнялись с ценами на прошивки для монохромных аппаратов) и выпускаются только без возможности обновления (но некоторые продавцы предлагают и без защиты). В среднем цена за прошивку колеблется в районе 100-300 рублей, оптовики, естественно, приобретают прошивки еще дешевле, от 30 до 60 рублей за прошивку (в зависимости от объема покупок и сговорчивости продавца цена может отличаться).  Так же некоторые продавцы предлагают к продаже некоторые многоаппаратные прошивки под видом одноаппаратных)

Итак, резюмируем, что сейчас важно на данный момент. Это надежность продавца (который не скроется получив ваши деньги, а такие случаи, к сожалению есть), 100%-я работоспособность прошивок, оперативность выдачи прошивок и грамотная техподдержка в случае необходимости. Так же важно, чтобы техподдержка находилась как можно дольше в сети из-за разности часовых поясов покупателя и продавца.  Как видите цена прошивки не играет особой роли в этом процессе, потому как погнавшись за дешевизной можно нажить себе неприятности в виде принтера-"овоща", недовольного клиента и купленного за свой счет аппарата.

P.S.

Кстати с помощью дебага можно посмотреть команды которые можно передавать через гипер-терминал аппарату -

Boot&Mon. CheckSum OK!

[ POWER ON  Booting... ]

Press any key to execute Monitor Program within 1 sec...

<CPU:375Mhz RAM:166Mhz SysClk:125Mhz DDR2>

----------------------------------------------------------------
START-UP MODE : Monitor Program
Boot into pROBE+ like stand-alone mode
[Type 'help' to see command info.]
Version : Ver.1.17 (BlueMT) 2010-05-27
----------------------------------------------------------------
Do you want to download from external port?[N] :n

?

-----ROM monitor command format-----------
dm   start_addr <byte_count>
dm.b start_addr <byte_count>
dm.w start_addr <byte_count>
dm.l start_addr <byte_count>
ESC  repeat memory dump
fm   start_addr  byte_count byte_value
fm.b start_addr  byte_count byte_value
fm.w start_addr  word_count word_value
fm.l start_addr  long_count long_value
pm   addr        byte_value
pm.b addr        byte_value
pm.w addr        word_value
pm.l addr        long_value
ul   byte_count  : upload image
cmp  src1_addr src2_addr size : compare memory

memcpy   source_addr dest_addr length : memory copy
ml    : Automatically download and execute the ram area binary
fl    : upgrade flash image
rl    : download kernel image including header and jump
go   jmp_addr
dl   load_addr
--------------
eeprom cmd arg1 arg2 arg3 arg4
info : find all EEPROMs
gen channel sys_clock i2c_clock : generate prescaler and sclk value
- sys_clock  : 100Mhz(0x64), 120Mhz(0x78),133Mhz(0x85)
- i2c_clock  : 100Khz(0x64), 400Khz(0x190)
read dev (0: Dimm0, 1:Dimm1, 4: Main, 5: ENP, 6:WENP)
erase dev size: erase device with zero value
read dev size : read device
ddr2w channel addr size type :  write DRAM dimm's SPD
- channel:  i2c channel(0,1)
- addr: eeprom address
- size: 1(DDR2 Samsung 256MB x16), 2:(DDR2 Samsung 128MB x16), 3:(DDR
2 Samsung 256MB x8), 4:(DDR2 Samsung 128MB x8)
5(DDR2 Qimonda 256MB x16), 6:(DDR2 Qimonda 128MB x16), 7:(DDR
2 Qimonda 256MB x8), 8:(DDR2 Qimonda 128MB x8)
ff(DDR2 EERPOM erase)r
- type: offset address type(0 : less than 256bytes, 1 : more than 256
bytes)
ddr2v channel addr type :  Verify DRAM dimm's SPD info
- channel:  i2c channel(0,1)
- addr: eeprom address
- type: offset address type(0 : less than 256bytes, 1 : more than 256
bytes)
write dev offset value
fill  dev size   value
read chan dev offset len
m2e dev source size : copy from memory to eeprom
reada channel addr offset type size: read device
- channel  : i2c channel(0,1)
- addr  : eeprom address
- offset: offset address
- type  : offset address type(0 : less than 256bytes, 1 : more than 2
56bytes)
- size  : size to read
writea channel addr offset type size: read device data
- channel  : i2c channel(0,1)
- addr  : eeprom address
- offset: offset address
- type  : offset address type(0 : less than 256bytes, 1 : more than 2
56bytes)
- size  : size to write
- data  : 1byte data to write
--------------
rtc num : read rtc
yyyymmdd ttmmss : set rtc 20060703 171800(2006-07-03 17:18:00)
--------------
dma cmd arg1 arg2 arg3 arg4
info : display dma register
fill b/w dest count : flill black/white by using all DMAs
- b/w: 0(white), 1:(black)
f2m src dest count  : copy from from to memory
f2m chan src dest count  : copy from from to memory
swap1 unit chan src dest count : increment swap test
swap2 unit chan src dest count : decrement swap test
- unit: 0=bit, 1=byte, 2=halfword
m2m chan src dest count : Memory to Memory test

stress loop : infinite dma read/write test
- 0: infinite, else
--------------
pll cmd arg1 arg2 arg3
info : display pll information
calc Fin Fout : calculate M/P/S values
- Fin : Input Frequency(decimal)
- Fout : Output Frequency(decimal)
ddr cmd arg1 arg2 arg3: ddr controller ( arg1, arg2, arg3 are hex value)
cmd  : dqs,dqsdelay, dqsoutdelay, wrdqsshift,dump, mk, cas, size
dqs - display searched dqs
dqsdelay - display searched dqs delay
dqsoutdelay - display searched dqs out delay
wrdqsshift - display searched wr dqs shift
dump - display current ddr controller register
mk - display
size - display current dram size
info - display dram information
arg1 : dram base address to test
arg2 : start value
arg2 : end value

memtest cmd arg1 arg2 : test memory( arg1, arg2 are hex value)
cmd  : r, w, toggle, rwv, drwv,drw,dw, clear, databus
r - read as 64bit unit
w - write as 64bit unit
toggle - write toggle data as 64bit unit and then read the data a
s 64bit unit
drwv - dma write,read,verify
drw - dma write,read
dw - dma write
arg1 : burst length(0x2, 0x4, 0x8, other value is set as currnet value)
arg2 : driver strength(0x0 ~ 0x7, other value is set as currnet value)

--------------
arm cmd arg1
info : display arm core information
dc on/off : Data cache on/off
ic on/off : Instruction cache on/off
wb on/off : Write buffer on/off
mmu on/off : MMU on/off
--------------
ope cmd arg1
read : read ope key
led val : send LED to ope(without 0x)
lcd val : send string to ope
fill val : fill with value to ope(without 0x)
sp.info : display serial flash info
fp.spi.read source_addr dest_addr length : serial flash read test
fp.spi.dmaread source_addr dest_addr length : serial flash read test with dma
fp.spi.ep source_addr dest_addr length : serial flash erase program test
fp.spi.ce : serial flash chip erase test

nvram clear test_mode
0 - all nvram and memory clear
1 - memory clear
2 - backup memory clear
3 - backup main flash clear
4 - backup main eeprom clear
5 - backup network eeprom clear
6 - backup wireless network eeprom clear

format cmd
hdd   : HDD will be formatted at kernel start up
flash : Backup Flash will be formatted at kernel start up
all : HDD, Backup Flash will be formatted at kernel start up
debugall : HDD, Backup Flash will be formatted and display debug message
at kernel start up
off : Cancel format at kernel start up

debug cmd
on    : Display debug message at kernel start up
off   : Do not display debug message at kernel start up
unzip src_addr dest_addr [count]: unzip kernel
--------------
reboot
ctrl+c   : Download image

pROBE+>

P.S. Но если вы "дружите" с паяльником, то можете залить "чужой" одноаппаратный фикс  в свой аппарат. Но это, естественно, все вы будете делать на свой страх и риск. И перед вами, будет стоять  моральная проблема - в этом случае изготовитель фиксов и его команда не получает прибыли, а вы лишаетесь техподдержки в случае необходимости .

P.P.S.После некоторых изысканий обнаружилась возможность менять серийный номер аппарата через дебаг. И затем через USB. (И сменщик серийника уплыл в интернет из-за разногласий между фиксоделами). Как вы можете наблюдать в данный момент, сменщик серийного номера через USB выкладывают все кому не лень, он объявлен главным оружием возмущенной общественности против продавцов прошивок, так как позволяет одной прошивкой прошить множество принтеров, не тратя деньги на каждую прошивку. Так же против продавцов прошивок сейчас стали использовать многоаппаратные прошивки, которые переделывают из одноаппаратных, причем не из каждой одноаппаратной прошивки можно сделать многоаппаратную, а только из той, которая плохо защищена (на данный момент это прошивки одного популярного он-лайн сервиса) Итак, резюмируя, можно с уверенностью сказать, что сложившаяся на данный момент ситуация с прошивками, это результат раскола в команде фиксоделов, а не стремление к некой всемирной "справедливости", которой прикрывается вторая сторона, ратующая за бесплатность фикс-прошивок.

Я же в общем случае рекомендую воспринимать цену прошивки, как цену за техподдержку, которая очень часто требуется новичкам прошивочного дела, которые в случае проблем получают грамотную консультацию, консультацию через удаленного клиента или по скайпу, снабжает покупателя в случае необходимости оригинальными прошивками да и вообще морально поддерживает, так же, в случае неудачи с прошивкой, может каким-либо образом компенсировать за непрошитый или "упавший" аппарат, например выдачей определенного количества фикс-прошивок бесплатно. Естественно, что прошивая аппарат скаченной прошивкой из торрентов или другого трекера, вы такого не получите и останетесь наедине с погибшим (естественно, тут как повезет, процент положительно прошитых аппаратов достаточно велик) аппаратом. Конечно с вопросом вы можете обратиться на тот форум, где вы скачали бесплатную фикс-прошивку, но на нем ни у кого нет никаких обязательств перед вами и поэтому ответа вы скорее всего не получите. Говорю все это не по наслышке - мне приходиться каждый день отвечать на множество вопросов как прошить, чем прошить, что делать, если прошить аппарат не получается, как пользоваться дебаг-кабелем и.т.п., в почте или на форуме или через личные сообщения в программе usbprns3, это довольно-таки утомительное занятие и затратное по времени. И как видите я не рекламирую наш сервис по генерации прошивок, не призываю покупать прошивки только у нас, не заявляю, что наша техподдержка лучше, чем на каком-нибудь другом сайте - выбор всегда остается за вами.