У нас есть множество технологий. Одни неимоверно быстры, другие неимоверно удобны. Одни позволяют летать со скоростью света, другие позволяют разрабатывать со скоростью света.
Споры насчёт того, какой же подход лучше, утихают редко. Сейчас я покажу, как можно скрестить ежа с ужом. У нас есть .NET, которым можно быстро делать и есть Native, который может быстро делать.
В образовательных целях мы будем скрещивать эти два направления. У статьи есть ещё одна цель. В её основе лежит написанная мною и Arwyl’ом программа под названием DuSter. Эта программа представляет собой сервер-пустышку, который позволяет тестировать сетевые программы.
Сервер очень прост в использовании, достаточно гибко настраивается, поддерживает файлы описания протоколов, которые позволяют более-менее автоматизировать тестирования работы любых протоколов. Я занимался разработкой сетевого уровня, мой друг — бизнес-логикой и парсингом протоколов. Получилось что-то неимоверно хорошо вылизанное и приятное. Мы гордимся своей программой, и хотим предоставить её сорцы миру, для некоммерческого использования.
c# — это просто. Работа с Excel файлом через Interop.Excel
Существует CLR — Common Language Runtime, среда, которая позволяет выполнять программы, написанные на языках, поддерживающих CLI (Common Language Infrastructure). Всё это дело + компиляторы и библиотеки образует .NET Framework, одну из самых распространённых сред разработки в мире. Я не буду рассказывать о том, как работают программы, написанные на .NET, поскольку эта тема достойна ещё пары статей.
Скажу лишь основную вещь, необходимую для нашей статьи. Машинный код .NET и машинный код Native (Не-.NET) приложений это не одно и то же. Соответственно, выходит интересная штука: мы можем взять одно Native приложение, написанное на языке Assembler, и взять другое Native приложение, написанное я языке Pascal, и скрестить их вместе. Это достаточно просто. Нам давали такое задание в универе.
Я, следуя своей любопытной натуре, решил выпендриться. Я решил скрещивать Assembler и C#. Я думал, что всё будет просто, я возьму, да и впишу в C# код ассемблера. Как же я ошибался. Естественно, узнав про то, что такое MSIL, я понял, что затея была не лучшая, но сдаваться не хотелось.
Я долго искал выход из этой ситуации — и нашёл: PInvoke через DllImport.
И так, мы имеем — программу на языке .NET, которая работает с использованием среды исполнения .NET. Задача, сделать так, чтобы среда исполнения дёргала внешние библиотеки. Что же, ещё немного усложним задачу — пусть программа позволит работать с сокетами на основе Windows Socket 2.0.
Когда у нас в институте было сетевое программирование, нас заставляли писать с использованием WS2, но мы, как заядлые шарписты воротили нос от этой библиотеки, так как в сравнении с библиотекой System.Net.Socket WS2 — это жалкая пародия на код.
Мы долго искали компромиссы с нашим преподом, и в итоге пришли к следующему: Нам позволяют использовать .NET при условии, что WS2 мы будем дёргать через DllImport.
Interop
Приступим, и сразу перейдём к разбору кода:
[DllImport( «ws2_32.dll» , CharSet = CharSet.Auto, SetLastError = true )]
public static extern Int32 accept( Int32 socketHandle, ref SocketAddres socketAddress, ref Int32 addressLength);
[DllImport( «ws2_32.dll» , CharSet = CharSet.Auto, SetLastError = true )]
public static extern Int32 bind( Int32 socketHandle, ref SocketAddres socketAddress, Int32 addressLength);
[DllImport( «ws2_32.dll» , CharSet = CharSet.Auto, SetLastError = true )]
public static extern Int32 listen( Int32 socket, Int32 queue);
[DllImport( «ws2_32.dll» , SetLastError = true )]
public static extern Int32 WSAStartup(Int16 wVersionRequested, ref WSADATA lpWSAData);
[DllImport( «ws2_32.dll» , SetLastError = true )]
public static extern String inet_ntoa( Int32 inadr);
[DllImport( «ws2_32.dll» , SetLastError = true )]
public static extern Int32 inet_addr( String addr);
[DllImport( «ws2_32.dll» , SetLastError = true )]
public static extern Int32 WSACleanup();
[DllImport( «ws2_32.dll» , SetLastError = true )]
public static extern Int32 WSAGetLastError();
[DllImport( «ws2_32.dll» , SetLastError = true , CharSet = CharSet.Ansi)]
public static extern Int32 gethostbyname( String name);
[DllImport( «ws2_32.dll» , SetLastError = true )]
public static extern Int32 socket( Int32 af, Int32 type, Int32 protocol);
[DllImport( «ws2_32.dll» , SetLastError = true )]
public static extern Int32 closesocket( Int32 socket);
* This source code was highlighted with Source Code Highlighter .
Это код на C#, он делает простую и очевидную вещь. Обращаясь к стандартной для Windows библиотеке ws2_32.dll он импортирует указатели на вышепреведённые методы в .NET. То есть, с виду получается следующее — я позволяю своей программе использовать Native методы.
Основные методы уже есть в программе — осталось привести их в порядок.
Что меня всегда раздражало в библиотеке WS2 — так это способы возвращения ошибок, и чтения информации. Я очень опасливо отношусь к методам, которые возвращают значение прочитанных байт и -1 в случае ошибки. Тем более, мне не нравится после получения результата -1 делать GetLastError, чтобы понять, в чём была ошибка. Механизм раскрутки стэка исключений, который присутствует в .NET намного больше удовлетворяет моим эстетическим требованиям.
Если вы не знали, хотел бы заметить, что такой способ обработки ошибок — это специфика WinAPI. В нем все (или большинство) функции возвращают коды ошибок, в том числе через HRESULT, 0, -1… Ну а GetLastError — это вовсе как раз системная функция созданная для того, чтобы понять что собственно произошло.
Собственно, переход на обработку ошибок через исключения — это одно из ключевых особенностей платформы .net. В момент выхода этот момент широко рекламировался, позиционировался как решение проблемы разнообразия и бардака с кодами ошибок.
* если вы это знали, то, надеюсь, информация пригодится тем, кто не знал
Поэтому — следующий наш шаг был таков: Привести механизм работы с сокетами на уровень .NET приложений. Что для этого надо?
Для начала — соберём все константы, которые есть в Native приложениях в enum’ы, чтобы они не болтались где не надо.
* This source code was highlighted with Source Code Highlighter .
Далее — методы, экспортированные нами из WS2 работают с переменными, которых не существует в среде .NET. Поэтому, необходимо было немного поизвращаться с технологией маршалинга, чтобы свести концы с концами:
[StructLayout(LayoutKind.Sequential)]
public struct SocketAddres
public Int16 sin_family;
public UInt16 sin_port;
public Int32 sin_addr;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 8)]
public String sin_zero;
>
* This source code was highlighted with Source Code Highlighter .
Эта структура позволяет вам оперировать адресом удалённого хоста.
В результате — мы имеем полный импорт библиотеки WS2 в .NET. Это круто, но мы сочли это недостаточным. Потому что пользоваться этой библиотекой жутко неудобно. Поэтому, имея под рукой WS2 методы, мы начали разрабатывать класс NSocket. Первым шагом, было создание наипростейшего класса исключений.
Потому что работа с сетью проблемами полнится, и сообщать об этих проблемах необходимо разработчику. А в .NET самый лучший способ сообщить об ошибке — это кинуть Exception.
///
/// Класс обработки исключения сокета
///
public class NSocketException : System.Net.Sockets.SocketException* This source code was highlighted with Source Code Highlighter .
Этот класс является простой обёрткой, которая позволяет сообщать об ошибках. Отлично, ошибки у нас уже есть, теперь надо сделать то, что бы их кидало. Для этих целей написано ещё 2 класса. NSocket и NNet. Эти классы производят основную работу с сетью.
Если класс NNet больше заточен для работы с сетью, то NSocket представляет собой объектно-ориентированное представление сокета (то, чего больше всего не хватает мне в WS2).
///
/// Принять входящее соединения на данном сокете.
///
/// Привязанный сокет, по которому надо получать соединение
/// Указатель на подключившейся сокет
public static NSocket Accept(NSocket bindedSocket)
WS2_NET.SocketAddres n = new WS2_NET.SocketAddres();
Int32 toref = Marshal.SizeOf(n);
NSocket s = new NSocket(WS2_NET.accept(( Int32 )bindedSocket, ref n, ref toref));
s.Connected = true ;
return s;
>
* This source code was highlighted with Source Code Highlighter .
Вот один из методов класса Nnet, который позволяет принять входящее соединение.
///
/// Содзание нового сокета.
/// Сокет будет автоматически создан для IPv4
///
/// Тип сокета
/// Протокол сокета
public NSocket(NSocketType type, NProtocol proto)
if ( this .Disposed)
throw new InvalidOperationException( «Component is disposed» );
socket = WS2_NET.socket(2, ( Int32 )type, ( Int32 )proto); // 2 = AIF_INET
if ( this .HasError)
throw new NSocketException(WS2_NET.WSAGetLastError());
this .Closed = false ;
this .Protocol = proto;
this .SocketType = type;
>
* This source code was highlighted with Source Code Highlighter .
А это — конструктор класса NSocket, который инициализирует новый экземпляр сокета.
Что мы имеем на выходе?
Да, признаться честно — я не очень-то хорошо тогда разбирался в .NET, поэтому в реализации классов есть кое-какие огрехи, но в общем — мы создали с нуля работу с сокетами за 1 неделю не очень напряжённой работы. Следует учесть, что здесь мы проследили эволюционный путь от Native WS2 к .NET Objects.
Действительно, задача является несколько невостребованной, потому что в .NET существуют не только отличные классы работы с сокетами, но и классы, реализующие серверы и клиенты популярных протоколов. Я уже не говорю о такой штуке, как WCF — одного из столпов .NET 3.0, который позволяет связывать программы по сети, не требуя знания о сокетах. Но! Для целей этих гигантов, которые избавляют сетевых программистов от проблем, трудятся забытые всеми WS2. Изучить их было бы неплохо, чисто для понимания.
В реальной программе, которую мы вам отдаём кода в десятки раз больше. Мы очень старались и писали комментарии к каждому методу, чтобы во всём этом можно было разобраться.
В итоге, работа с сокетами превратилась в песню:
try
NetModule.NNet.StartWS();
if (CurrExemp.SocketProtocol == NetModule.NProtocol.Tcp)
CurrExemp.Socket = new NetModule.NSocket(NetModule.NSocketType. Stream , CurrExemp.SocketProtocol);
else
CurrExemp.Socket = new NetModule.NSocket(NetModule.NSocketType.Datagram, CurrExemp.SocketProtocol);
CurrExemp.Socket.Bind(CurrExemp.Port);
if (CurrExemp.SocketProtocol == NetModule.NProtocol.Tcp)
CurrExemp.Socket.Listen();
>
catch
if (CurrExemp.ClientSocket != null CurrExemp.ClientSocket.Connected)
CurrExemp.ClientSocket.Close();
if (CurrExemp.Socket != null CurrExemp.Socket.Binded)
CurrExemp.Socket.Close();
if (NetModule.NNet.Started)
NetModule.NNet.StopWS();
MessageBox.Show( «Can’t create socket on specified port!» );
return ;
>
* This source code was highlighted with Source Code Highlighter .
Чем отличается InterOp от SMPTE
InterOp – более ранний стандарт DCP который использовался до появления более современного стандарта SMPTE. Используйте его, если не уверены, что оборудование в кинотеатре не поддерживает DCP созданного в соответствии со стандартом SMPTE.
SMPTE – это основной набор стандартов в соответствии с которыми создаются DCP. В большинстве кинотеатров установлено оборудование, которое поддерживает DCP созданный в соответствии со стандартом SMPTE. Выберите этот стандарт, если уверены, что кинотеатр поддерживает DCP стандарта SMPTE.
Поскольку SMPTE DCP гораздо более современный и актуальный, он поддерживают новые функции и технологии. DCP SMPTE могут поддерживать новые аудиоформаты, включая Dolby Atmos и гораздо большую частоту кадров, чем InterOp, включая воспроизведение материала HFR (High Frame Rate). Пакеты SMPTE также лучше справляются с субтитрами и шифрованием.
Итак, в каком формате я должен сделать свой DCP? #
Обычно мы предлагаем нашим клиентам следующие приблизительные рекомендации:
Если ваш фильм HFR, должен иметь частоту кадров, отличную от 24 кадров в секунду, или имеет звук Dolby ATMOS, ваш единственный вариант – использовать SMPTE.
Если вашему фильму требуется шифрование или субтитры, вам следует использовать SMPTE. Есть недостатки безопасности в том, как InterOp обрабатывает зашифрованный материал, и проблемы с поддержкой электронных субтитров. Эти проблемы были исправлены в SMPTE.
Если для вас важна гибкость (субтитры или описанное видео), вам следует подумать о SMPTE. В новом формате гораздо более богатая реализация специальных возможностей. Чем больше используется стандарт SMPTE, тем сильнее может быть давление на отрасль, чтобы обеспечить широкую поддержку этих функций.
Если режиссер заботится о долгосрочной совместимости, вам следует подумать о SMPTE. Поскольку InterOp не является официальным отраслевым стандартом, нет никаких гарантий его поддержки в будущем. Хотя это очень маловероятно, вполне возможно, что некоторые будущие разработки стандарта SMPTE могут нарушить совместимость с пакетами InterOp.
Для 100% совместимости DCP, включая с кинотеатральным оборудованием, произведенным до 2009 г., следует создать DCP InterOp.
Источник: dcpmaker.com
Как установить Interop Unlock на Windows 10 Mobile
Операционные системы iOS и Android уже давно господствуют на рынке мобильных устройств и энтузиасты давно выпустили специальные инструменты для более «функционального» использования своих устройств. Для iOS служит операция Jaibreak, а в Android обойти систему можно получив ROOT-права. Во время того, как Microsoft активно развивает свою мобильную платформу, энтузиасты добрались и до нее, представив Interop Unlock для устройств, работающих на Windows 10 Mobile, и благодаря инструкции ниже вы сможете «установить» его и себе на смартфон.
Подписывайтесь на наш Дзен
Необходимое
Для успешного выполнения нижеописанных действий вам понадобится компьютер под управлением Windows 7 и выше, а также смартфон линейки Lumia, работающий на Windows 10 Mobile, либо смартфон от Samsung, также с Windows 10 Mobile на борту (в последствии список поддерживаемых устройств расширится и можно будет работать со смартфонам других ОЕМ-производителей). Также вы должны уметь устанавливать взломанные приложения на смартфон через компьютер.
Все, что вы будете делать дальше согласно нашей инструкции, вы делаете на свой страх и риск, мы не несем ответственности за возможный причиненный ущерб.
Взлом первого смартфона на WP8 — Interop Unlock на Samsung ATIV S
Samsung ATIV S — первый «взламываемый» смартфон на Windows Phone 8. Хотите получить на свой девайс третий ряд плиток, возможность ставить собственные системные мелодии (GDR3 не предлагать), работать с файловой системой? Interop Unlock — инструкция с видеопримером для Samsung ATIV S — ниже.
Сделав Interop Unlock и применив регистр-твики, вы получите:
— Полный доступ к файловой системе; — Изменение цветов каждой плитки; — Третья колонка плиток; — Собственные системные звуки; — Региональный формат, поиск Google в Internet Explorer и изменяемые Connections Strings (иконки уведомления о типе сотовой связи); — Настройка уровня громкости по умолчанию (до Interop Unlock — 19, после — столько, сколько захочет юзер), продолжительности и интенсивности виброзвонка; — Сохранение карт на SD-карте (освобождает место на смартфоне); — Регулировка уровня яркости в процентах; — Возможность переименовать свой Samsung в Nokia ATIV S.
Windows 8 64-битный ПК с 4 ГБ RAM, Windows Phone 8 SDK (можно сделать бесплатно) и Samsung ATIV S.
Developer Unlock и Windows Phone SDK
1. Создайте аккаунт разработчика Microsoft. Самый бесплатный способ сделать это — зарегистрироваться в программе Windows Phone App Studio. Перейдите по ссылке, нажмите на «Start building» и зарегистрируйтесь при помощи вашего аккаунта Microsoft (на почту придет письмо). 2. Скачайте и установите Windows Phone 8 SDK. Системные требования — 64-битный Windows 8-ПК с 4 ГБ оперативной памяти.
Инсталляция на другие ОС (в том числе и более старые версии Windows) невозможна. Загрузка SDK может занять до одного часа. 3. Подключите ваш ATIV S к ПК через USB и запустите приложение «Windows Phone Registration Tool». Важно — в этот момент экран смартфона не должен быть заблокирован! Через несколько секунд ваше устройство будет распознано.
Кликните на «Register» и укажите данные аккаунта, которым вы пользовались при регистрации в Windows Phone App Studio. Пара мгновений — и ваш смартфон будет распознан как устройство разработчика.
Interop Unlock через Registry Tweak
4. Скачайте приложение Interop Unlock Helper. Запустите инструмент «Application Deployment», и через обзор найдите на вашем ПК ранее загруженный файл с расширением .XAP. Важно: позаботьтесь, чтобы ваш ATIV S был открыт на стартовом экране. Когда вы нажмете на кнопку Deploy, экран смартфона не должен быть заблокирован! Через несколько секунд в списке новых приложений появится программа Interop Unlock Helper.
5. Запустите приложение и нажмите «Next». Вас попросят установить Samsung Diagnostics app. Чтобы сделать это, перейдите в телефонное приложение. Наберите ##634# и нажмите «Сохранить». Инсталляция приложения займет от нескольких секунд до минуты. 6. Перейдите в приложение Interop Unlock Helper и снова нажмите на Next. Коснитесь надписи Send Toast, затем — появившегося в верхней части экрана уведомления.
7. Через меню многозадачности вернитесь в Interop Unlock Helper и опять нажмите на Next. Скопируйте написанное в строке Path и перейдите обратно в диагностическое приложение. Выберите параметр «HKEY_LOCAL_MACHINE» и поставьте галочку напротив «Check if value is DWORD». Вставьте скопированный из Helper-приложения текст в строку «Registry path to operate». В поле «Registry Key» напишите (или скопируйте из Helper’a) MaxUnsignedApp.
Если случилась описка — скорее всего, ничего страшного не произойдет. В разделе «Registry Value» укажите значение 10003. Нажмите Write. Вы увидите сообщение об ошибке (Failed). Не пугайтесь — пока всё в порядке.
8. Вернитесь в Helper, снова нажмите Next. Скопируйте новые значения, вставьте их в соответствующие поля диагностического приложения, уберите галочку с «Check if value is DWORD». Нажмите на «Write». Если все сделано правильно, внизу появится «ОК!». 9. Готово! Закройте Helper и Registry Editor.
Ваш Samsung ATIV S имеет Interop Unlock.
Для того, чтобы воспользоваться всеми преимуществами Interop Unlock, нужно сделать следующее:
1. Скачайте приложение BootstrapSamsung. Подключите ваш ATIV S к ПК и запустите инструмент Application Deployment. Найдите на компьютере только что скачанное приложение и кликните на Deploy. Через несколько секунд программа появится на вашем смартфоне. Не отключая смартфон от ПК, запустите приложение, нажмите на «Okay». После появления надписи «SUCCESS» BootstrapSamsung можно закрыть.
2. Скачайте приложение EnableAllSideloading и поставьте его через Application Deployment описанным выше способом на свой ATIV S. Запустите приложение. После появления надписи «SUCCESS» его можно закрыть, а затем — удалить и BootstrapSamsung, и EnableAllSideloading. 3. Вам доступны дополнительные права, которые реализованы в следующих приложениях: — SAMWP8 Tools: изменение цвета плиток, дополнительный ряд плиток, доступ к файловой системе, апгрейды для разработчиков; — WPH Tweaks (регулировка громкости, Google как стандартная поисковая машина в Internet Explorer, регион, свои системные уведомления и др.; — File Explorer (файловый менеджер, доступ к системным данным).
Инструкция №1 — для смартфонов Lumia
Этот способ самый простой, но работает только на смартфонах Lumia.
- Скачайте архив на компьютер, разархивируйте его и установите файл Root_Tool.xap на свою Lumia с помощью программ WPPT либо Application Deployment 8.0 (с помощью версии 8.1 не получится).
- На смартфоне откройте только что установленную программу и нажмите на Lumia Registry Editor.
- Нажмите на «три точки», и в открывшемся меню выберите пункт под названием «Templates».
- Далее вы увидите две опции «Interop/Capability Unlock» и «Full FS Access with MTP» — поставьте галочки для каждой из них и нажмите Apply
.
YouTube Premium
Хотите сохраните это видео?
- Пожаловаться
Пожаловаться на видео?
Выполните вход, чтобы сообщить о неприемлемом контенте.
Понравилось?
Не понравилось?
INTEROP-UNLOCK Lumia X50 apps link: https://mega.nz/#F!mwdjVKxA!nNIYlk4gb. 1st download these apps mobile: WP8.0 SDK Tools Lite Setup Av1.20 WPV XAP Deployer 2.0 WP_CPTT_NT-x86-fre InteropTools_x86_x64_arm_LegacyRelease_FarewellS-1711 vcREG i386
From your phone, to enable the developer mode. Simply go to Settings Update and Security For developers Developer mode or, alternatively, recording the phone from the PC via the tool Windows Phone Developer Registration
From the PC, start the tool Application Deployment and executed the deployment of .xap file vcReg 1.6 on the phone.
Move your phone and run vcReg 1.6 . Press the three dots at the bottom and choose the voice x50 Series Unlock .
In the menu that appears by touching the button Step 1 , there will be explained, in short, it will be necessary before to Step 2.
Move on PC, extract the files i386.zip , open the folder where you extracted the files (you should see a list of libraries) make cabs folder фактически вместо iPhone получался iPod Touch.
А если ты просто собираешься продать надоевший телефон и не хочешь, чтобы у покупателя возникли проблемы? Тут все просто, но сделать это тебе придется до того, как ты сбросишь устройство к заводским настройкам:
- Разблокируй телефон (датчиком отпечатков или паролем).
- Отключи Find My iPhone в настройках iCloud.
- Введи пароль от Apple ID.
Все, можно сбраcывать. Защита отключена. А вот злоумышленнику отключить защиту не удастся. Для этого ему придется преодолеть два уровня защиты: блокировку экрана и пароль от Apple ID.
Защита от сброса и неавторизованной активации в смартфонах Apple прекрасно работает по всему миру. Обойти ее программными способами не представляется возможным. Забыл пароль от Apple ID или удалил учетную запись? Иди в Apple Store или звони в поддержку, готовься предъявить чек или иные доказательства легитимности владения устройством. Поскольку защита активируется на стороне сервера, при предъявлении таких доказательств сотрудники Apple могут помочь.
Существуют аппаратные способы обхода защиты. Для очень старых устройств достаточно было перепаять единственный кoнденсатор. Для современных требуется разборка, прямой доступ к микросхеме памяти и ручная работа программатором для смены идентификатора устройства. После смены идентификатора устройство может пройти активацию, но нет ни малейшей гарантии, что оно продолжит это делать после обновления системы. В любом случае такой способ обхода слишком сложeн для обычного воришки, так что с iPhone стараются не связываться — продать украденное устройство можно будет разве что на запчасти.
BlackBerry 10
- Защита от сброса к заводским настройкам: да, на всех устройствах под управлением BlackBerry 10 10.3.2
- Удаленная блокировка: доступна на всех устройствах с момента выхода платформы
- Дата появления защиты от сброса: BlackBerry 10 OS версии 10.3.2 (июнь 2015 года)
- География: по всему миру
- Защита от понижения версии прошивки: да, но можно обойти на всех сборкaх за исключением 10.3.3 (которая официально еще не вышла)
- Для снятия защиты: разблокировать устройство, отключить BlackBerry Protect, ввести пароль от BlackBerry ID
- Альтернативный способ: произвести сброс к заводским настройкам через настройки телефона, ввести пароль от BlackBerry ID. Отключение после сброса: зайти на https://protect.blackberry.com/, Manage Devices, выбрать нужное устройство и нажать Remove. Защита будет отключена, и устройство можно будет активировать с новой учетной записью
- Актуальный статус: на большинстве устройcтв обходится без особых проблем
Телефоны BlackBerry подавались как самые безопасные устройства на рынке. Защита данных путем дистанционного сброса и блокировки устройства была доступна уже в момент выхода на рынок первых устройств, а защита от активации после сброса к заводским настройкам появилась только в июне 2015 года с выходом BlackBerry 10 версии 10.3.2 (актуальная версия ОС и по сегодняшний день).
Структура загрузчика BlackBerry 10 такова, что обойти систему защиты или мастер активации при помощи манипуляций, подобных тем, что мы видели в Android, не представляется возможным. Идеальная схема защиты? Как оказалось, нет.
Следи за руками.
Раз. Защита от аппаратного сбpоса появилась в ОС 10.3.2. Более ранние версии (доступные, к слову, для всех устройств линейки) такой защиты не имели. Откатиться к более ранней сборке — никакая не проблема, если использовать автозагрузчик (простой исполняемый файл, который уже содержит все необходимые драйверы и собственно прошивку).
Два. В BlackBerry сидят не совсем дураки, и защиту от понижения версии прошивки предусмотрели — именно начиная с ОС 10.3.2. Откатиться на более старую версию ОС ты не сможешь.
И три. Одна из альфа-версий прошивок для разработчиков, какое-то время доступная для скачивания с сайта BlackBerry, декларирует номер сборки, более высокий по сравнению с любой актуальной версией ОС 10.3.2. При этом никакой защиты от аппаратного сброса в альфа-сборке нет. Шах и мат: достаточно зaйти на любой тематический форум, посвященный смартфонам BlackBerry, и ты найдешь работающую ссылку на пpесловутую прошивку. Да, их удаляют, но пользователи продолжают их выклaдывать.
К слову, все сказанное никак не относится к телефонам BlackBerry пoд управлением Android.
Источник: ninjat.ru