Исповедь крэкера: Как я ломал систему мобильной связи GSM
   Привет всем! Особенно - любителям чего-нибудь поломать +_+. Знаю, среди вас найдется немного людей, которые в состоянии дочитать мою очередную статью до конца, поэтому сразу скажу - речь будет о всевозможных проявлениях Халявы для вашего мобильного телефона, о способах облегчить свои кошельки от ненужных растрат и о способах наживиться на людях, которые хотят получить халяву… Заинтересовал?

   Предупреждаю - иногда в тексте будут идти непонятные фразы - Не пугайтесь! - если что будет непонятно, пропускайте, главное я напишу по человечески +_+. Так-с, фанаты Counter Strike уже должны были нажать крестик, идем дальше…
   Вначале - об обломах…


   Часть 1. Кидалы Телетекста.
  
   Идея уменьшения расходов на телефон пришла мне в голову на вторую неделю после приобретения мобилки +_+. С Инетом были траблы, включил ТВ, «Интер», страница 155 и… увидел кучу объяв от «самоучек-гениев», которые наперебой предлагали «помочь активизировать услугу типа SMS=0 коп., минута разговора = 7 коп., стоимость WAP снизить на 50 %» и т.д. За это они просили отослать им код карточки или перевести деньги на указанный счет. Причем каждый второй заявлял, что он когда-то работал оператором GSM, а каждый третий требовал «Кидалам - не беспокоить».
   Я заинтересовался. Стал следить за новостями.
   Через пару дней я начал встречать сообщения типа «Номер +38*** - Кидала!». Кидализм заключался в следующем - после того, как пользователь (далее - Лопух) отсылал коды карточек /пополнял счет/ псевдо-экс-гению-оператору, никакой активации со стороны последнего не происходило.
   Уже через пару недель я выявил закономерность - как только появляется сообщение о кидализме, «супер-тариф» сразу меняется, скорее всего так же, как и номер кидалы, и буравчик  идет на второй круг…
   Хотя иногда ожидания Лопухов оправдывались - об этом в части 3…


   Часть 2. Кидалы Интернета - «гениальные» Java-программисты.

   Через какое-то время с «155» мне все стало ясно, и взор направился в сторону Сети… Через поисковики я нашел кучу инфы и предложений о «перепрошивки» телефона. Суть проста - любой телефон - это груда металлолома, которым управляет программа. Эту программу можно либо изменить, либо написать свою, либо взломать… Для современных телефонов эти программы написаны на тормознутом, но платформенно-независимом языке Java. «Гении» Явы (или «Джавы») предлагают в обмен на перевод нескольких (чаще всего - 25) у.е. по системе WebMoney «перепрошивку» для вашего телефона, причем для правдоподобности требуют от вас запроса на модель мобилки.
   Некоторые «программисты» откровенно меня смешили, над некоторыми я решил приколоться по старой системе, - я понамыливал им запросы на перепрошивку таких моделей телефонов, которых Никогда не существовало +_+. Ответы подтвердили мои прогнозы…


   Часть 3. Как реально уменьшить расходы на SMS.

   Это - единственное, что мне удалось узнать от кидал (причем совершенно бесплатно… методом социальной инженерии +_+), чем можно пользоваться в жизни.
   Итак, нам нужен: а) мобильный телефон (странно +_+), б) активированный WAP (интернет для мобилок).
   Заходим через телефонный браузер на какой-нибудь сайт отправки Free-SMS, находим, на какой оператор нам надо отослать SMS, выбираем его, появляется стандартная форма с полем ввода телефона, текстом сообщения и ссылкой «отправить». Теперь, если у вас нет поддержки GPRS, т.е. у вас обычный CSD, то Быстро отключаемся от Инета и заходим снова, но теперь уже на «последнюю посещенную страницу». Тогда с вас не будут брать деньги за пребывание в OnLine, а за OffLine. (Кстати, все последующие SMS тоже отправляйте, напечатав их с «последней страницы».) Теперь спокойно, не спеша пишем SMS и отпраляем его (не забывайте после отправки отключаться, если вы на CSD). Смотрим баланс счета - у вас должно отняться:
   1-2 копейки (если вы на GPRS)
   5-6 копейки (если вы на CSD).
   Выгодно, не так ли? (ведь 1 смс, отправленное обычным способом стоит от 25 до 40 копеек - в зависимости от оператора).
   Еще одним плюсом является Анонимность отправителя (!), что в сети «Life», насколько я помню, стоит 50 грн…
   Минус - опять таки, в анонимности (надо писать «от кого» вручную) и типа «баннеры» - пару слов, которые допишутся в конце SMS. В принципе, ничего плохого.
   С вас пиво +_+
   Ах да, вот один из сервисов:  http://waptrue.ws/sms/sent.php
   А вот, если хотите сразу перейти на форму отправки SMS Jeans-абоненту: http://waptrue.ws/sms/jeans.php
   «Жыття стае цикавишым» (с) Лайф.

   Часть 4. Генерация карточек пополения счета.

   Народ… Нет, «вы не козлы» - это не по моей части… Пополнить счет на халяву <i>теоретически</i> возможно!
   Итак, какова система?
   У нас кончается счет. Мы покупаем «пополнялку» и отсылаем код карточки с некоторыми символами на номер, определенный оператором. Надеюсь, никто не считает, что на номере сидит дядя администратор и сверяет - продана ли такая карточка или нет, а потом вручную правит ваш счет +_+. Все, естественно, гораздо проще - номер, на который приходит пополнялка, обслуживается прогой, которая, проверив присланный код, пополняет счет…
   Таким образом, наша задача - всего лишь (+_+) найти закономерность и отправить на номер липовый код, который должна «проглотить» прога… Вся трудность в том, что закономерность эта - штучка далеко не x[i]=int((x[i-1]+x[i-2])/2), хотя эту формулу я не проверял +_+, в общем, сложная…

   Здесь вы можете попытаться ткнуть меня в грязь - «а ты нашел закономерность?». Я - нет…
   Но…
   Разрешите описать Известные Факты - люди покупали карточки, отсылали коды и… Получали в ответ «Операция не выполнена», т.е. «Карточка уже была использована». Почему так бывает? Отвечаю:
   1. Продавцы уже вскрывали эти карточки / находили использованные в мусорных урнах +_+ /, а потом вновь затирали место для кода спец-материалом. Этот вариант мне кажется мало правдоподобен, т.к. а) материал редкой технологии, доступен не каждому, б) продавец дорожит своим местом и репутацией, и проводить аферы вряд ли будет, в) не думаю, что владельцы телефонов такие слепые параноидальные шизофреники, что не смогли определить повторную заклейку карточек. В общем, вариант отпадает.
   2. Программа, обрабатывающая коды, дает сбой. Не смешите мои декомпиляторы +_+. Эта отмазка принята «официальной», и при таких неординарных ситуациях операторы, если к ним обращаются, приносят извинения, ссылаясь на «технические причины». Кстати, могут и отдать $ за карточку или таки пополнить счет, ежели умеючи обратиться… Но, как я и говорил, это просто смешно. Не думаю, что GSM-фирмы стали бы нанимать программеров-ламосов, чтоб пользоваться инвалидной программой. Во всяком случае, если бы меня попросили написать что-либо подобное (только не на Java, это я так, на всякий случай, вдруг попросят +_+), я бы гарантировал работоспособность и отсутствие сбоев даже при неожиданной перезагрузке… В общем, этот вариант тоже отпадает.
   3. Что же остается? Остается правда - код карточки таки действительно уже был использован… Как такое могло случиться? Чаще всего - из-за того, что какой-нибудь умник вроде меня в борьбе с бессонницей отправлял оператору коды, которые на ходу и придумывал… На Jeans-e после двухчасовой брутфорс-атаки (ака случайный подбор) мне не пришло никакого предупреждения, типа «хорош, чувак, а то отключим»… Не исключено, что кто-то другой все-таки набрал нужный код…

   Однако есть еще одна лазейка… Программы - генерации карточек поплнения, которые распространяются через Webmoney за те же 25-30 $. В начале я подумал - «ура, нашел!», но… В общем, о взломе одной из таких прог читайте ниже, я же скажу, что надежд я не потерял и все еще хочу найти такую «чудо-программу», которую и могли написать ТЕ ЖЕ программисты, что и писали прогу для GSM-фирмы… Или же программисты, которые взломали прогу и поняли алгоритм исходной проги… Согласитесь, это вполне здравая мысль.

   Но пока что у меня на руках был пример готовой программы-«генератора», которая для своей работы требовала «Регистрационный Код» (в общем - обычная ShareWare с функциональным ограничением).
   Итак, самое интересное впереди…


   Часть 5. Взлом программы - «генератора» карточек пополнений.

   Объект - «gener_all.exe» (220 Кб). В Инете его можно найти (хоть и придется попотеть) в архиве «MobileGen.rar» или «MobileGen.zip» (попробуйте на rolgen.tk). Прога запускается, генерирует серийный номер карты, по которому в дальнейшем и производиться расчет кода-«пополнялки». Одна эта зависимость уже вызвала во мне подозрения…
   Ну, главная фишка проги, конечно, в том, что после нажатия на кнопку «Расшифровать» (т.е. сгенерировать код-«пополнялку»), прога, как истинный представитель шаровар, требует регистрации… В проге присутствует скрин-шот из версии зарегеной gener_all, где видно, что программа таки генерирует код! За регистрацию - всего 2 $ ! Никто не хочет заплатить? +_+ Если кто хочет - заплатите лучше мне! +_+ За статью…
   Как вы уже догадались, я никому ничего не платил… Взялся за то, что я умею - программирование. Точнее, за взлом.
   Итак, открываем прогу в дизассемблере и / или отладчике. Можно использовать SoftIce из Driver Studio, которая вышла на последний момент, но мне ближе по Уху OllyDbg v.1.10 и W32Dasm.
   Олли мне как-то роднее, так что пользуемся ей… то есть им… отладчиком. Загружаем, смотрим. Те, кто через PE iD не определил, что объект написан на Visual Basic 6, определят сейчас. Я же отношусь к категории шибко умных, которые сразу смотрят на иконку проги +_+ Если вы уже программировали в Win-системе, то без труда вспомните, где видели эту иконку…
   Идем «научным» путем. Запускаем прогу, идем региться, вводим от фонаря какие-нибудь символы. «Если вы после этого зарегились, то бросайте читать эту статью, пакуйте вещи и отправляйтесь в Лас-Вегас! С вашей-то удачей только в рулетку играть!» (с) не мой. В общем, после попытки нахаляву зарегистрироваться, выпадает стандартный MessageBoxA с текстом типа «ты гонишь, чувак». Стоп! Это ж VB, тут может быть и MsgBox… Значит…
   Ищем в intermodular calls наш MsgBox. Находим… И не один… Что же делать? Ставим breakpoints на все вызовы окошка! Запускаем прогу по F9. Залазим опять в регистрацию, вводим в поле кода что-нибудь вроде «1122334455», жмем «Регистрировать» и… вылетаем в Олю, точнее, на breakpoint по адресу:
   0043386A   . FF15 34104000  CALL DWORD PTR DS:[<&MSVBVM60.#595>]     ;  MSVBVM60.rtcMsgBox.
   То, что нужно! Поднимаемся вверх, смотрим, откуда идут ноги у этого MsgBox-a.
   Находим прыжок в адрес 00433820 от 004336A7. Видим:
004336A7   . 0F84 73010000  JE gener_al.00433820
   Ну разве это защита? +_+ Все очевидно, это и есть прыжок-джамп (переход, в нашем случае - на функцию с выводом MsgBox-a), если мы вводим неправильный код. Для подтверждения гипотезы ставим сюда бряк, перезапускаемся, по старой схеме пытаемся зарегистрироваться, вылетаем в Олю на адрес джапма, читаем: «Jump is taken». Значит,  надо, чтобы было «not taken». Берем и затираем с адреса 004336a7 весь джапм ассемблерскими командами nop (что значит no operator, т.е. «ниче не делать!»). Продолжаем работу и… «Поздравляем! Теперь вы можете насладиться Халявой!» - такое вот окошко появляется, мда… Теперь остается открыть gener_all в любом Hex-Editore (лучше - в HiView), найти этот джамп и ввести 6 раз шестнадцатеричную цифру «90» (мнемокод команды nop, описанной выше), начиная с адреса 004336a7. Сохраняем, дело сделано! +_+

   В принципе, можно было все сделать проще, пролистав код рядом с джапмом. Регистрационный код засвечивается при толкании его в стек… Эта команда находится по адресу 00433668.
   Можно еще проще! Найти в string references подозрительный набор символов "pQYcU…" (и так дальше) - это и есть код (!), но это вообще уму не постижимо - чтобы программист не позаботиться о скрытии рег.кода в strings references… В общем, «креатифф г., афтар м.» (с) udaff.
  
   Представляете, как я обрадовался, когда зарегил прогу? Представляю, как вы обрадовались +_+. Думаете, все, халява началась? Ага, щас же! Берем пропатченую / зарегеную прогу, запускаем, регимся и… после появления «Поздравления» вылетает еще один MsgBox с заголовком «Ошибка Windows» и очень заумным (по задумке автора) текстом: «Неустранимая ошибка non OC Mac OS X v10.1 не хватает памяти или файл поврежден», после чего прога без лишней скромности закрывается +_+

   Лишь тогда до меня дошла схема кидания. Вы скачиваете прогу, смотрите, решаете «о! круто!», покупате код, регистрируетесь и видите сообщение «Ошибка Windows». В худшем случае вы присоединяетесь к жалобному вою «У-у-у! Проклятый Билл Гейтс!», в лучшем - мылите авторам проги - «мля, типа, че за дела?» Скорее всего, они присылают вам ответ типа «Ну вы же сами видите - ошибка windows… У вас Windows пиратский? Вот, то-то же… Хотите я вам лицензионный пришлю по e-mail? Всего за $ 10 (+_+). У вас уже лицензионный? Ну, вы же видите - у вас памяти мало… Хотите, я вам прогу пришлю по разгону Ram-a (+_+)Всего $5… Ну, не хотите - как хотите! Тогда не жалуйтесь… А программа у меня работает, чесслово… Скрин-шот посмотрите…» +_+
   Примечание. Текст «ответа» я сам придумал, если что…

   В принципе, я поковырялся в проге еще, убедился, что если убрать «ошибку windows» и последующий вылет проги, то ничего не измениться, и код пополнялки вы так и не получите… Хотя вы можете покопаться сами, может, я ламо +_+

   Вот такие дела… Мне почему то кажеться, что остальные «программы» (если их еще вам пришлют кидалы - могут ведь просто $ забрать) работают по такому же принципу…

   (c) Автор:   Дмитрий «AjaxVS» Кравцов.
   Mail:    ajaxvs@mail.ru.

Используются технологии uCoz