Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #56, ИЮЛЬ 2005 г.

Безопасный взлом через GPRS

Крис Касперски ака мыщъх

Спецвыпуск: Хакер, номер #056, стр. 056-074-4


Перепрограммирование микросхемы "вживую" намного проще, хотя и обладает намного более скромными возможностями. К тому же существует риск необратимо испортить свой телефон. Но охота пуще неволи. Прежде чем выпаивать микросхему, хакер определяет ее тип. Большинство производителей используют серийные чипы, модель которых легко опознается по разводке даже при полностью уничтоженной маркировке. Основные используемые микросхемы перечислены во врезке. Остается только достать программатор, который можно приобрести на радиорынке или спаять самостоятельно.

Прежде чем изменять что-то в NAM, необходимо научиться рассчитывать контрольную сумму. Чтобы не делать этого вручную, используй простенький скрипт для дизассемблера IDA Pro, исходный текст которого приведен ниже:

IDA-скрипт, автоматически рассчитывающий контрольную сумму

auto a; auto b; b=0;

PatchByte(MaxEA()-1, 0);

for(a=MinEA();a<MaxEA();a++)

{

b = (b + Byte(a)) & 0xFF;

}

b = (0x100 - b) & 0xFF ; Message("\n%x\n",b);

PatchByte(MaxEA()-1, b);

С таким скриптом ничего не стоит захачить MIN по полной программе. С формальной точки зрения, MIN представляет собой 34-битное число, разделенное на две половинки. Младшие 10 бит обознаются MIN2 и отвечают за хранение кода области (area code), оставшиеся 24 бита - личный номер мобильного устройства.

Код области хранится в упакованном двоично-десятичном формате и, чтобы привести его к естественной форме отображения, к каждому десятичному разряду нужно прибавить цифру 9, разделить результат на 10 и записать остаток. В частности, зоне 213 будет соответствовать следующий MIN2: (2 + 9) % 10 = 1; (1 + 9) % 10 = 0; (3 + 9) % 10 = 2. Объединив все вместе, получим: 102 или 0001100110 в двоичном представлении. Именно такое число будет содержаться в микросхеме.

Следующие 24 бита (MIN1) кодируются чуток сложнее. Личный идентификационный номер телефона для удобства разбит на две части, которые записываются приблизительно так: 376-0111. Но это только с точки зрения неискушенного пользователя. В действительности же есть три части: первые 10 бит MIN1 содержат три левых разряда (в данном случае - 111), которые кодируются так же, как и MIN2. Следующие четыре бита содержат четвертую цифру идентификационного номера, записанную в двоичной форме "как есть". При этом 0 (ноль) записывается как 10 (1010 в двоичной форме). Оставшиеся 10 старших бит содержат три первых цифры идентификационного номера, кодируемые так же, как и в MIN2. Таким образом, поле MIN1 для нашего идентификационного номера будет выглядеть так: 265-10-000 (или 0100001001 1010 0000000000 в двоичной форме).

Разобравшись с NAM'ом, перейдем к ESN - 11-значному 32-битному уникальному номеру. В GSM-устройствах он называется IMEI (International Mobile Equipment Identity - международный идентификатор мобильного устройства) и занимает 15 знаков, что на четыре знака больше, чем ESN, но это уже формальности.

Стандарты беспроводной связи требуют от производителей невозможности изменения ESN/IMEI программным путем, однако далеко не все производители выполняют это требование. Часто ESN/IMEI хранятся в NAM, что является вопиющим нарушением, а в некоторых случаях перепрограммируются прямо с клавиатуры. Впрочем, даже если ESN зашит в PROM (однократно программируемое ПЗУ), микросхему можно выпаять с платы и заменить на свою собственную. Чтобы телефон не сдох и печатные проводники не оборвались от постоянно перегрева, имеет смысл установить панельку, и тогда операция замены микросхемы займет несколько секунд. Знатоки дизассемблера дорабатывают прошивку так, чтобы ESN/IMEI не считывался с ПЗУ, а вводился с клавиатуры или автоматически генерировался при каждом включении телефона.

Назад на стр. 056-074-3  Содержание  Вперед на стр. 056-074-5