Windows Phone 7 Unlock Adventures

We believe Windows Phone development should be accessible to anyone. We are providing a Windows Phone developer unlocking service to developers across all skill levels and regions for just $9 USD per phone.

Давно витала в голове моей мысль о том, что неплохо бы написать парочку приложений для своего телефона для собственного пользования, но подписка разработчика в AppHub на год стоит $99, причем для правильной регистрации надо еще заморочиться разного рода документами и налогами. Совершенный демотиватор. Однако, буквально пару недель назад, я узнал, что можно разлочить свой телефон для персональных нужд, причем с благословения самой Microsoft. Стоит услуга $9, никаких действий по бумагомарательству не требует. Продано.

Как написано на странице разблокировки, вначале надо скачать тулзу, затем получить токен. Тулзу я закачал, запустил, оно сругалось на то, что у меня не стояло девелоперских приблуд для разработки под Windows Phone 7.1, дало ссылку, откуда скачать. Там все просто, скачал веб-инсталлер и запустил установку, из инета подсосалось около 500 Мб и без проблем установилось.

Купить токен разблокировки с первого раза не получилось, их похоже разбирают очень шустро. В итоге купил со второго раза, проплатив своей картой Mastercard.

Дальше по инструкции надо было запустить их тулзу, ChevronLabs.Unlock.exe. Что ж, подключаю телефон, запускаю, ругается, что «Your phone is ignoring us» (мой телефон походу оказался таким же своевольным, как и его хозяин). Попробовал разлочить экран, запустить программу снова — прокатило, программа просит ввести токен разблокировки, ввожу токен, жму кнопочку для разблокировки. Ничего не происходит, в статусной панели программы строчка «Internal Error. Contact support«. И всё, логов никаких.

Думаю, что-то не так сделал. Перезагрузил телефон, снова повторяю — та же ошибка. Полез на сайт производителей приблуды, смотрю FAQ, а там у людей такая же проблема, и решения не наблюдается.

Захотелось мне узнать, в чем проблема всё-таки. По виду программы было понятно, что писана была она на WPF, поэтому открыл exe-файл в dotPeek от JetBrains. Посмотрел код, полистал их классы. Вот и вырасло поколение программиздов, которые любят всё на лябдах писать, да так, что исходный код становится месивом каким-то.

В общем, нашел в их классах строчку, которая обновляла статус на форме. Смотрю, ловится обычный Exception:

image

ОК, уже что-то, осталось выяснить, что за класс такой App и что делает его метод OutputDebugString. Класс такой нашелся в этой же сборке, правда, как оказалось, OutputDebugString взят из kernel32.dll. Ну-с, как бы это интеграторов никогда не останавливало, поэтому полез смотреть на MSDN (кстати, крутой дизайн, да?), что за чудо-функция такая. Там мне сказали, что функция выводит строку в подключенный дебаггер либо в системный дебаггер, а если ничего такого нет, то и функция ничего не делает. Интересно чем им TraceSwitch не угодил. Что ж, попробовал подключиться с помощью Visual Studio и повторил попытку активации. Ничего на выводе не увидел. Скачал тогда DebugView от SysInternals, снова попробовал и вуаля, увидел логи. Там была вот такая строчка:

System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at https://labs.chevronwp7.com/Services/TokenService.svc that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. —> System.Net.WebException: The remote server returned an error: (407) Proxy Authentication Required.

В общем-то, я на это сразу и подумал, встречались мне уже мега-программы, которые сквозь прокси не умели пробиваться, да и сам с этим как-то провозился, оттого и знал, как решать. Надо было в конфиг-файл прописать несколько магических строк, что я и сделал. Запускаю снова – та же ошибка, причем по той же причине, судя по логам. Стало интересно. После еще нескольких безуспешных попыток заметил, что почему-то конфиг-файл создается заново при каждом запуске программы, полез снова в dotPeek копаться в кишочках тулзы. Нашел в App.cs презабавный код, по какой-то причине авторы натурально решили перепизаписывать свой конфиг из добавленного в ресурсы файла с конфигом

using (Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("ChevronLabs.Unlock.app.config"))
            {
              using (StreamReader streamReader = new StreamReader(manifestResourceStream))
              {
                string path3 = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase).Replace("file:\\", string.Empty), Process.GetCurrentProcess().ProcessName + ".exe.config");
                try
                {
                  File.WriteAllText(path3, streamReader.ReadToEnd());
                }
                catch (Exception ex)
                {
                  int num = (int) MessageBox.Show("The ChevronWP7 Labs unlock tool could not configure itself. Move the tool's executable to a writeable folder and try again.", "Reconfiguration error", MessageBoxButton.OK, MessageBoxImage.Hand);
                  Application.Current.Shutdown();
                  return;
                }
              }
            }
            Settings.Default.Reload();

Посмотрел через dotPeek – да, действительно есть файлик:

image

Сохранил его, открыл – да, действительно содержимое конфига.

И как бы на самом деле, если сделать файл конфига read-only, выдается окно с той ошибкой. Неисповедимы пути людей-снежинок.

Что делать? В саппорт написал, начал ждать, когда ответят, а телефон-то разлочить хочется. Как сильному духом программисту пришла мне идея исправить в ресурсах файл с конфигом, вспомнил, что еще в пору программирования на Дельфи успешно удавалось изменить ресурсы и не только.

В общем, сделал такие пассы руками:

1. Разобрал код (disassemble)

ildasm /out=ChevronLabs.Unlock.il ChevronLabs.Unlock.exe

2. Изменил файл конфига ChevronLabs.Unlock.app.config

3. Собрал код обратно (reassemble)

ilasm /resource=ChevronLabs.Unlock.res /exe /output=ChevronLabs.Unlock.exe ChevronLabs.Unlock.il

Сшитая программка даже запустилась. И даже заработала как надо Winking smile

В общем, сразу после анлока открыл студию, склепал традиционное Hello world и задеплоил на телефон, ура, товарищи.

P. S. Последние действия с ilasm напомнили мне сюжет из к\ф «Трон: Наследие», это когда мужик 80-го левла вернул тетке отрубленную руку. Похоже, ага?

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *