Portable shell-coding under nt and linux
.RU

Portable shell-coding under nt and linux


portable shell-coding under NT and linux
kris kaspersky aka nezumi
аннотация
Мы живем в суровом мире. Программное обеспечение, окружающее нас, содержит дыры, многие из которых размерами со слона. в дыры лезут хакеры, вирусы и черви, совершающие набеги изо всех концов сети. Подавляющее большинство удаленных атак осуществляется путем переполнения буфера (buffer overfull/overrun/overflow), частным случаем которого является переполнение (срыв) стека. Тот, кто владеет техникой переполнения буферов, управляет миром! Если вам нужен путеводитель по стране переполняющихся буферов, снабженный исчерпывающим руководством по выживанию – эта книга для вас! Откройте двери в удивительный мир, расположенный за фасадом высокоуровневого программирования, где вращаются те шестеренки, что приводят в движение все остальное.

Почему ошибки переполнения носят фундаментальный характер? Что можно сделать с их помощью? Как найти уязвимый буфер? Какие ограничения он накладывает на shell-код? Как эти ограничения преодолеть? Чем компилировать shell-код? Как заслать его на удаленный узел и остаться при этом незамеченным? Как обойти брандмауэр? Как выловить и проанализировать чужой shell-код? Как защитить свои программы от ошибок переполнения?

Ни для кого не секрет, что антивирусная индустрия – это закрытый "клуб", владеющий информацией, предназначенной только для "своих". Отчасти так делается по соображениям безопасности, отчасти – тлетворное веяние конкуренции дает о себе знать. Эта книга частично приоткрывает занавесу тайны…




^ Картинка 1 shell-coding — дороги которые мы выбираем
введение
Чудовищная сложность современных компьютерных систем неизбежно приводит к ошибкам проектирования и реализации, многие из которых позволяют злоумышленнику захватывать контроль над удаленным узлом или делать с ним что-то нехорошее. Такие ошибки называются дырами или уязвимостями (holes и vulnerability соответственно).

Мир дыр чрезвычайно многолик и разнообразен: это и отладочные люки, и слабые механизмы аутентификации, и функционально-избыточная интерпретация пользовательского ввода, и некорректная проверка аргументов и т. д. Классификация дыр чрезвычайно размыта, взаимно противоречива и затруднена (во всяком случае, своего Карла Линнея дыры еще ждут), а методики их поиска и "эксплуатации" не поддаются обобщению и требуют творческого подхода к каждому отдельно взятому случаю. Было бы наивно надеяться, что одна-единственная публикация сможет описать весь этот зоопарк! Давайте лучше сосредоточимся на ошибках переполнения буферов (buffer overflow/overrun) – как на наиболее важном, популярном, перспективном и приоритетном направлении.

Первую половину книги мы будем витать в бумажных абстракциях теоретических построений и лишь к концу спустимся на ассемблерную землю, обсуждая наиболее актуальные проблемы практических реализаций. Нет, не подумайте! Никто не собирается в сотый раз объяснять, что такое стек, адреса памяти и откуда они растут! Это издание рассчитано на хорошо подготовленную читательскую аудиторию, знающую ассемблер и бегло изъясняющуюся на Си/Си++ без словаря. Как происходит переполнение буфера вы, вероятно, уже представляете и теперь хотели бы ознакомится с полным списком возможностей, предоставляемых переполняющимися буферами. Какие цели может преследовать атакующий? По какому принципу происходит отбор наиболее предпочтительных объектов атаки?

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




Картинка 2 основное оружие хакера
^ глава 1
что нам потребуется


Картинка 3 завтрак в дорогу

Для совершения набегов на мирные пастбища Интернета как минимум потребуется холодное пиво и хороший эксплоит. Пиво можно найти в магазине, эксплоит – в сети. Открываем пиво, запускаем эксплоит… Грязно материмся, что ни хрена не работает и берем другой. Материмся опять…

Основная масса халявных эксплоитов, блуждающих по сети, спроектирована с грубыми конструктивными ошибками и неработоспособна в принципе. Те же из них, что работают, обычно ограничиваются лишь демонстрацией уязвимости, но не дают никаких рычагов управления (например, создают новую учетную запись администратора и тут же блокируют ее). А для доработки готового эксплоита напильником требуется умение держать этот самый напильник в руках! Разработка (равно, как и доработка) эксплоитов требует определенного образа мышления и обширной глубины знаний. Это не та область, в которую можно прийти с улицы и тут же крутить винты. Для начала необходимо выучить Си (и немножечко Си++), освоить ассемблер, разобраться с устройством микропроцессоров, постичь архитектуру операционных систем Windows и UNIX, научиться бегло дизассемблировать машинный код… Словом, нам предстоит длинный и тяжелый путь, пролегающий через непроходимый таежный лес полный логических ловушек и битовых опасностей, с которыми трудно справиться без провожатых. Лучшие наставники — это книги, а книг нам потребуется много. Список рекомендуемых книг приведен во врезке. Это лучшее, что есть на рынке (только не спрашивайте меня где все это брать, я не книготорговец, многие вещи сам разыскивал годами!).

Теперь поговорим об инструментах. Shell-код пишется преимущественно на ассемблере, а, значит, нам потребуется ассемблерный транслятор. Под DOS'ом большой популярностью пользуется пакет TASM от компании Borland, но на Windows его позиция выглядит неубедительной и большинство программистов использует транслятор MASM от Microsoft, входящий в состав DDK (Device Driver Kit – набор инструментов разработчика драйверов), который можно бесплатно скачать с сервера www.Microsoft.com (для каждоый версии Windows он свой). С ним конкурирует некоммерческий транслятор FASM (http://flatassembler.net/), заточенный под нужды системных программистов и поддерживающий более естественный синтаксис. Существуют ассемблеры и под UNIX, например, NASM (http://nasm.sourceforge.net/), входящий в штатный комплект поставки большинства дистрибьютивов. В общем, какой ассемблер выбрать — дело вкуса.




^ Рисунок 1 логотип ассемблера NASM

Прежде чем ассемблированная программа заработает ее необходимо скомпоновать. Для этого вполне подойдет стандартный линкер, выдернутый из той же Microsoft Visual Studio или Platform SDK. Из нестандартных можно порекомендовать ulink от Юрия Харона, поддерживающего большое количество форматов файлов и множество тонких настроек, которых другие линкеры крутить не дают. Его можно скачать с сайта фирмы Стикс: ftp://ftp.styx.cabel.net/pub/UniLink/ulnbXXXX.zip. Для некоммерческого использования он бесплатен.

Для поиска дыр нам понадобиться отладчик и дизассемблер. Голыми руками много дыр не наловишь! Агрессивная природа двоичного кода требует применения специального инструментария. Отладчик это инструмент для поиска ошибок в своих собственных приложениях и взламывания чужих. Их много разных: Microsoft Visual Debugger, интегрированный в состав Microsoft Visual Studio, Microsoft Windows Debugger (сокращенно WDB), и Kernel Debugger, входящие в состав SDK и DDK, soft-ice от NuMega, OllyDbg от Олега Яшкина и т. д. Классический выбор – soft-ice (см. рис. 3), однако, в последнее время его жирная туша начинает уступать маленькому и подвижному OllyDebugger'у (см. рис. 4), главная вкусность которого – автоматическое отображение распознанных ASСII-строк рядом со смещениями, что значительно упрощает поиск переполняющихся буферов, поскольку они становятся видны как на ладони. К сожалению, будучи отладчиком прикладного уровня, OllyDebugger не может отлаживать ядерные компоненты Windows (и некоторые серверные процессы в том числе).




^ Рисунок 2 маленький и шустрый OllyDebuger




Рисунок 3 профессионально-ореентированный отладчик soft-ice

Дизассемблер — это, конечно, IDA Pro — бесспорный лидер, оставляющий своих конкурентов далеко позади и поддерживающий практически все форматы исполняемых файлов, процессоры и компиляторы, существующие на сегодняшний день (см рис. 4).





^ Рисунок 4 консольная версия IDA PRO – среда обитания профессиональных кодокопателей



Рисунок 5 и под Palm PC тоже есть дизассемблер

Если исследуемая программа упакована, перед началом дизассемблирования ее следует распаковать. Сделать это можно любым универсальным дампером (Proc Dump, PE-Tools, Lord-PE), а еще лучше – специализированным распаковщиком, знающим данный упаковщик в лицо (правда, не для всех упаковщиков распаковщики существуют). Дампы, снятые с программы, чаще всего неработоспособны и для своего запуска требует серьезной доработки напильником. Однако, зачем нам их запускать? А для дизассемблирования они подойдут и так.

Из HEX-редакторов наибольшей популярностью пользуется HIEW, но лично я предпочитают QVIEW. Мелочь типа сравнивателей файлов, дамперов памяти, упаковщиков/распаковщиков так же должна быть все время под рукой. Еще нам потребуется принтер, пиво и остро заточенный карандаш.

Все вышеупомянутые продукты можно найти в Осле (eDonkey) или в Муле (eMule) – файло-обменных сетях, грубо говоря, представляющие собой Интернет внутри Интернета. С их появлением поиски вареза на WEB'е стали уже неактуальны (удивительно, но о существовании осла многие до сих пор не знают!).




Картинка 4 осел – животное упрямое. может качать, а может не качать. но если он разгонится – ничто его не остановит! к тому же это он практически всеяден. в смысле в нем есть все! любой софт! музыка, фильмы и документация!
^ >>> врезка: что читать



Картинка 5 штурм книжкой стопки ничуть не легче восхождения на Эльбрус
^ языки разработки
Настоящие хакеры признают только один, ну максимум два языка – Си и Ассемблер, причем последний из них стремительно утрачивает свои позиции, уступая место Бейсику, DELPHI и прочей дряни, на которой элегантный вирус невозможно создать в принципе.

А что на счет Си? С эстетической точки зрения – это чудовищный выбор и вирусописатели старой школы вас за него не простят. С другой стороны, будучи низкоуровневым системно-ориентированным языком, Си неплохо походит для разработки вирусов, хотя от знания ассемблера все равно не освобождает.

К коду, генерируемому компилятором, предъявляются следующие требования: он должен быть полностью перемещаемым (т. е. независимым от базового адреса загрузки), не модифицировать никакие ячейки памяти, за исключением стекового пространства, и не использовать стандартные механизмы импорта функций, либо подключая все необходимые библиотеки самостоятельно, либо обращаясь в native-API. Этим требованиям удовлетворяет подавляющее большинство компиляторов, однако, от программиста тоже кое-что потребуется.

Не объявляйте главную функцию программы как main – встретив такую, линкер внедрит в файл start-up код, который вирусу на хрен не нужен! Не используйте глобальных или статических переменных – компилятор принудительно размещает их в сегменте данных, но у вирусного кода не может быть сегмента данных! Даже если вирус захочет воспользоваться сегментом данных пораженной программы, он будет должен во-первых, самостоятельно определить адрес его "хвоста", а во-вторых, растянуть сегмент до необходимых размера. Все это тривиально реализуется на ассемблере, но для компилятора оказывается через чур сложной задачей. Храните все данные только в локальных переменных, задавая строковые константы в числовом виде. Если вы напишите char x[] = "hello, world", коварный компилятор разместит строку "hello, world" в сегмент данных, а затем динамические скопирует ее в локальную стековую переменную x. Делайте так: x[0]='h', x[1]='e', x[2]='l'… или преобразуйте char в int осуществляйте присвоение двойными словами, не забывая о том, что младший байт должен располагаться по наименьшему адресу, что разворачивает строку задом наперед.

Не используйте никаких библиотечных функций, если только вы не уверены, что они полностью удовлетворяют всем вышеперечисленным требованиям. Системные функции обычно вызываются через интерфейс native-API, так же известный под именем sys-call (в LINUX-подобных системах за это отвечает прерывание int 80h, другие системы обычно используют дальний вызов по селектору семь, смещение ноль). Поскольку, системные вызовы варьируются от одной системы к другой, это ограничивает среду обитания вируса и при желании он может прибегнуть к внедрению в таблицу импорта.

Откомпилировав полученный файл, вы получите объективник и ругательство компилятора по поводу отсутствия main. Остается только слинковать его в двоичный 32/64-разрядный файл. Естественно, внедрять его в жертву придется вручную, т. к. системный загрузчик откажется обрабатывать такой файл.



Картинка 6 патроны это еще не оружие
^ средства анализа, отладки и плагиата
Ну какой вирусописатель может удержаться от соблазна, чтобы не пополнить свой заплечный рюкзак за чужой счет, выдирая идеи и алгоритмы из тел попавших к нему вирусов? Чаще всего вирусами обмениваются тет-а-тет. Коллекции, найденные в сети, для опытных хакеров не представляют никакого интереса, поскольку набираются из открытых источников, но для начинающих исследователей это настоящий клад.

Если исходные тексты вируса отсутствуют (кривые дизассемблерные листинги, выдаваемые за божественное откровение, мы в расчет не берем), препарировать двоичный код вируса приходится самостоятельно. Тут-то нас и поджидает одна большая проблема. Дизассемблер всех времен и народов – IDA PRO – не приспособлен для работы с ELF-вирусами, поскольку отказывается загружать файлы с искаженным section header'ом, а большинство вирусов никак не корректируют его после заражения! (примечание: в новых версиях эта багофича была исправлена). Других достойных дизассемблеров, переваривающих ELF-формат, мне обнаружить так и не удалось (а самому писать лень). За неимением лучших идей, приходится трахаться с HEX-редакторами (например, тем же HIEW'ом), разбираясь со служебными структурами файла вручную.

С отладчиками дело обстоит еще хуже. Фактически под UNIX существует всего один более или менее самостоятельный отладчик прикладного уровня – gdb (GNU Debugger), являющийся фундаментом для большинства остальных. Простейшие антиотладочные приемы, нарытые в хакерских мануалах времен первой молодости MS-DOS, пускают gdb в разнос или позволяют вирусу вырваться из-под его контроля, поэтому отлаживать вирусный код на рабочей машине категорически недопустимо и лучше использовать для этой цели эмулятор, такой например, как BOCHS. Особенно предпочтительны эмуляторы, содержащие интегрированный отладчик, обойти который вирусу будет очень тяжело, а в идеале вообще невозможно (BOCHS такой отладчик содержит). Кстати говоря, совершенно необязательно для исследования ELF-вирусов устанавливать UNIX. Эмулятора для этих целей будет более чем достаточно.




^ Рисунок 6 отладка вирусного кода на интегрированном отладчике эмулятора BOCHS, запущенного под управлением Windows 2000




Рисунок 7 исследование вирусов под UNIX с помощью дизассемблера iceix
^ >>> врезка: bochs
Качественный эмулятор ПК с интегрированным отладчиком внутри. Хорошо подходит для экспериментов в вирусами непосредственно на вашей рабочей машине без риска уничтожения информации. Бесплатен, распространяется с исходными текстами. http://bochs.sourceforge.net
^ глава 2
ассемблер — это просто!
Низкоуровневое программирование – это разговор с компьютером на естественном для него языке, радость общение с голым железом, высший пилотаж особого полета свободной мысли и безграничное пространство для самовыражения. Ассемблер намного проще большинства языков высоко уровня, он значительно проще, чем Си++ и овладеть им можно буквально за несколько месяцев, главное взять правильный старт, уверенно продвигаясь в нужном направлении, а не петляя впотьмах наугад.




^ Картинка 7 харадкорный ассемблер

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

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

Ассемблер — это мощное оружие, дающее безграничную власть над системой. Это отнюдь не заумная теоретическая муть, а самый настоящий хардкор. Самомодифицирующийся код, технологии полиморфизма, противодействие отладчикам и дизассемблерам, экплоиты, генетически модифицированные черви, шпионаж за системными событиями, перехват паролей…

Ассемблер — это седьмое чувство и второе зрение. Когда выскакивает хорошо известное окно с воплем о критической ошибке, прикладники лишь матерятся и разводят руками (это карма у программы такая). Все эти буковки и циферки для них китайская грамота. Но не для ассемблерщиков! Эти ребята спокойно идут по указанному адресу, правят баг, зачастую даже без потери не сохраненных данных!



Картинка 8 
^ философия ассемблера
Ассемблер — это низкоуровневый язык, оперирующий машинными понятиями и концепциями. Не ищите команду вывода строки "hello, world!". Здесь ее нет. Вот кратный перечень действий, которые может выполнить процессор: сложить/вычесть/разделить/умножить/сравнить два числа и в зависимости от полученного результата передать управление на ту или иную ветку, переслать число с одного места в другое, записать число в порт или прочитать его оттуда. Управление периферией осуществляется именно через порты или через специальную область памяти (например, видеопамять). Чтобы вывести символ на терминал, необходимо обратиться к технической документации на видеокарту, а чтобы прочитать сектор с диска — к документации по накопителю. К счастью, эту часть работы берут на себя драйвера и выполнять ее вручную обычно не требуется (к тому же, в нормальных операционных системах, таких, например, как Windows NT с прикладного уровня порты недоступны).

Другой машинной концепцией является регистр. Объяснить, что это такое, не погрешив против истины, невозможно. Регистр это нечто такое, что выглядит как регистр, но таковым в действительно не является. В древних машинах регистр был частью устройства обработки данных. Процессор не может сложить два числа, находящихся в оперативной памяти. Сначала он должен взять их в руки (регистры). Это — на микро уровне. Поверх микро уровня расположен интерпретатор машинных кодов, без которого не обходится не один современных процессор (да! да! машинные коды интерпретируются!). PDP-11 уже не требовал от программиста предварительной загрузки данных в регистры, делая вид, что он берет их прямо из памяти. На самом же деле, данные скрыто загружались во внутренние регистры, а после выполнения арифметических операций результат записывался в память или в… "логический" регистр, представляющий собой ячейку очень быстрой памяти.

В x86 регистры так же виртуальны, но в отличие от PDP, частично сохранили свою специализацию. Некоторые команды (например, mul) работают со строго определенным набором регистров, который не может быть изменен. Это — плата за совместимость со старыми версиями. Другое неприятное ограничение состоит в том, что x86 не поддерживает адресации типа память – память и одно из обрабатываемых чисел обязательно должно находится в регистре или представлять собой непосредственное значение. Фактически, ассемблерная программа наполовину состоит из команд пересылки данных.

Все эти действия происходят на арене, называемой адресным пространством. Адресное пространство — это просто совокупность ячеек виртуальной памяти, доступной процессору. Операционные системы типа Windows 9x и большинство UNIX'ов создают для каждого приложения свой независимый 4 Гбайтный регион, в котором можно выделить по меньшей мере три области: область кода, область данных и стек.

Стек — это такой способ хранения данных. Что-то среднее между списком и массивом (читайте Кнута, от рулез). Команда push кладет новую порцию данных на верхушку стека, а команда pop — снимает. Это позволяет сохранять данные в памяти не заботясь об их абсолютных адресах. Очень удобно! Вызов функций происходит именно так. Команда call func забрасывает в стек адрес следующей за ней команды, а ret стягивает его со стека. Указатель на текущую вершину хранится в регистре ESP, а дно… формально стек ограничен лишь протяженностью адресного пространства, а так — количеством выделенной ему памяти. Направление роста стека: от больших адресов — к меньшим. Еще говорят, что стек растет снизу вверх.

Регистр EIP содержит указатель на следующую выполняемую команду и непосредственно недоступен для модификации. Регистры EAX, EBX, ECX, EDX, ESI, EDI, EBP называются регистрами общего назначения и могут свободно участвовать в любых математических операциях или операциях обращения к памяти. Их всего семь. Семь 32-разрядных регистров. Четыре первых из них (EAX, EBX, ECX и EDX) допускают обращения к своим 16-разрядным половинкам, хранящим младшее слово — AX, BX, CX и DX. Каждый из них в свою очередь делиться на старший и младший байты — AH/AL, BH/BL, CH/CL и DH/DL. Важно понять, что AL, AX и EAX это не три разных регистра, а разные части одного и того же регистра!

Существуют так же и другие регистры — сегментные, мультимедийные, регистры математического сопроцессора, отладочные регистры… Без хорошего справочника в них легко запутаться и утонуть, однако, на первых порах мы их касаться не будем.



Картинка 9
^ объяснение ассемблера на сишных примерах
Основной ассемблерной командой является команда пересылки данных mov, которую можно уподобить оператору присвоения. c = 0x333 на языке ассемблера записывается так: mov eax, 333h (обратите внимание на разницу записи шестнадцатеричных чисел!). Можно так же записать mov eax, ebx (записать в регистр EAX значение регистра EBX).

Указатели заключаются в квадратные скобки. Сишное a = *b на ассемблере записывается так: mov eax, [ebx]. При желании, к указателю можно добавить смещение: a = b[0x66] эквивалентно: mov eax, [ebx + 66h].

Переменные объявляются директивами db (переменная в один байт), dw (переменная в одно слово), dd (переменная в двойное слово) и т. д. Знаковость переменных при их объявлении не указывается. Одна и та же переменная в различных участках программы может интерпретироваться и как число со знаком и как число без знака. Для загрузки переменной в указатель применяется либо команда lea, либо mov с директивой offset. Покажем это на следующем примере:


LEA EDX,b ;// регистр EDX содержит указатель на переменную b

MOV EBX,a ;// регистр EBX содержит значение переменной a

MOV ECX, offset a ;// регистр ECX содержит указатель на переменную a


MOV [EDX],EBX ;// скопировать переменную a b


MOV b, EBX ;// скопировать переменную a b


MOV b, a ;// !!!ошибка!!! так делать нельзя!!!

;// оба аргумента команды MOV не могут быть в памяти!


a DD 66h;// объявляем переменную a типа двойного слова и инициализируем ее числом 66h

b DD ? ;// объявляем неинициализированную переменную b типа двойного слова

^ Листинг 1 основные типа пересылок данных

Теперь перейдем к условным переходам. Никакого if'a на ассемблере нет и эту операцию приходится осуществлять в два этапа. Команда cmp позволяет сравнить два числа, сохраняя результат своей работы во флагах. Флаги — это биты специального регистра, описание которого заняло бы слишком много места и поэтому здесь не рассматривается. Достаточно запомнить три основных состояния: меньше (bellow или less), больше (above или great) и равно (equal). Семейство команд условного перехода jx проверяют условие x и, если оно истинно, совершают прыжок по указанному адресу. Например, je прыгает, если числа равны (Jump if Equal), а jne если неравны (Jump if Not Equal). jb/ja работают с беззнаковыми числами, а с jl/jg — со знаковыми. Любы два не противоречащих друг другу условия могут быть скомбинированы друг с другом, например: jbe — переход если одно беззнаковое число меньше другого или равно ему. Безусловный переход осуществляется командой jmp.

Конструкция cmp/jx больше всего похожа на Бейсковское IF xxx GOTO, чем на Си. Вот несколько примеров ее использования:


CMP EAX, EBX ;// сравнить EAX и EBX

JZ xxx ;// если они равны переход на xxx


CMP [ECX], EDX ;// сравнить *ECX и EDX

JAE yyy ;// если беззнаковый *ECX >= EDX перейти на yyy

^ Листинг 2 основные типы условных переходов

Вызов функций на ассемблере реализуется намного сложнее, чем на Си. Во-первых, существует по меньшей мере два типа соглашений — Си и Паскаль. В Си-соглашении параметры в функцию передаются справа налево, а из стека их вычищает вызывающий функцию код. В Паскаль соглашении все происходит наоборот! Аргументы передаются слева направо, а из стека из вычищает сама функция. Большинство API-функций операционный системы Windows придерживаются комбинированного соглашения stdcall, при котором аргументы заносятся в соответствии с Си-соглашением, а из стека вычищаются по соглашению Паскаль. Возвращаемое функцией значение помещается в регистр EAX или (для передачи 64-разрядных значений используется регистровая пара EDX:EAX). Разумеется, этих соглашением необходимо придерживаться только при вызове внешних функций (API, библиотек и т. д.)."Внутренние" функции им следовать не обязаны и могут передавать аргументы любым мыслимым способом, например, через регистры.

Вот простейший пример вызова функции:


PUSH offset LibName ;// засылаем в стек смещение строки

CALL LoadLibrary ;// вызов функции

MOV h, EAX ;// EAX содержит возращенное значение

Листинг 3 вызов API-функции операционной системы
^ ассемблерные вставки как тестовый стенд
Как же сложно программировать на чистом ассемблере! Минимально работающая программа содержит чертовую уйму разнообразных конструкций, сложным образом взаимодействующих друг с другом и открывающих огонь без предупреждения. Одним махом мы отрезаем себя от привычного окружения. Сложить два числа на ассемблере не проблема, но вот вывести их результат на экран…

Ассемблерные вставки — другой дело. В то время как классические руководства по ассемблеру (Зубков, Юров), буквально с первых же строк буквально бросают читателя в пучину системного программирования, устрашая его ужасающей сложностью архитектуры процессора и операционной системы, ассемблерные вставки оставляет читателя в привычном ему окружении языков Си (и/или Паскаль) и постепенно, безо всяких резких скачков, знакомит его с внутренним миром процессора. Они же позволяют начать изучение непосредственно ассемблера с 32-разрядного защищенного режима процессора: дело в том, что в чистом виде защищенный режим настолько сложен, что не может быть усвоен даже гением, и потому практически все руководства начинают изложение с описание морально устаревшего 16-разрядного реального режима, что не только оказывается бесполезным балластом, но и замечательным средством запутывания ученика (помните, "забудьте все, чему вас учили раньше…"); По своему личному опыту и опыту моих друзей могу сказать, что такая методика обучения превосходят все остальные как минимум по двум категориям: а) скорость – буквально через три-четыре дня интенсивных занятий человек, ранее никогда не знавший ассемблера, начинает сносно на нем программировать; б) легкость освоения – изучение ассемблера происходит практически безо всякого напряжения и усилий, ни в какой момент обучения ученика не заваливают ворохом неподъемной и непроходимой информации: каждый последующий шаг интуитивно понятен и с дороги познания заботливо убраны все потенциальные препятствия.

Ну так чего же мы ждем? Для объявления ассемблерных вставок в Microsoft Visual C++ служит ключевое слово __asm, а простейшая ассемблерная программа выглядит так:


main()

{

int a = 1; // объявляем переменную a и кладем туда значение 1

int b = 2; // объявляем переменную a и кладем туда значение 1

int c; // объявляем переменную c, но не инициализируем ее

// начало ассемблерной вставки

__asm{

mov eax, a ;// загружаем значение переменной a в регистр EAX

mov ebx, b ;// загружаем значение переменной b в регистр EBX

add eax, ebx ;// складываем EAX с EBX, записывая результат в EAX

mov c, eax ;// загружаем значение EAX в переменную c

}

// конец ассемблерной вставки

// выводим содержимое c на экран

// с помощью привычной нам функции printf

printf("a + b = %x + %x = %x\n",a,b,c);

}

Листинг 4 ассемблерная вставка складывающая два числа
^ глава 3
безопасный взлом через GPRS
Сезон охоты на хакеров уже открыт! Нас разыскивают спецслужбы всего мира. Если ты релизишь варез, дизассмишь программы, отламываешь защиты, разводишь вирусов или атакуешь сеть — тебя сажают в тюрьму, а тюрьма в наши платы не входят. Там делают toss the salad и вообще… Чтобы остаться на свободе достаточно иметь сотовый телефон с GPRS-протоколом, паяльник, дизассемблер и немного смекалки….




Картинка 10 жизнь за колючей проволокой — цена свободы
^ почему не стоит использовать анонимные прокси
Любое расследование традиционно начинается с извечных вопросов: кому это выгодно и кто бы это мог сделать? Многие хакеры прокалываются на том, что оставляют за собой текстовые строки (так называемые "граффити") с указанием своего ника, города проживания, названия кафедры или другой информации подобного типа. Это существенно сужает круг поиска, после чего спецслужбам остается всего лишь перешерстить компьютерную тусовку. Реальных хакеров очень немного и все о них знают. Вот она цена известности!

В этом мире выживают только те, кто отрезает себя от внешнего мира, отказывается от общения и забившись в глухую нору одиночества, хакерствует в свое удовольствие. Основным источником информации, демаскирующим атакующего, становится его IP-адрес. С точки зрения сетевых протоколов это всего лишь 32-битное число в заголовке пакета, которое ничего не стоит подделать или исказить. Но вот толку от этого будет немного. Пакеты с левыми IP-адресами сдохнут на первом же машрутизаторе, а если и не сдохнут, никакого ответа отправитель все равно не получит, а, значит, не сможет установить TCP-соединение.

Для обеспечения собственной анонимности проще всего воспользоваться Proxy-сервером, расположенном в какой-нибудь отсталой стране, не симпатизирующей ни России, ни Америке. Таких серверов достаточно много, но далеко не все они анонимны. Существует множество служб, проверяющих proxy на "вшивость", самой лучшей из которых на мой скромный мыщъхиный взгляд является www.showmyip.com (см. рис. 8).




Рисунок 8 служба www.showmyip.com провряет японский proxy-сервер bi.ikenobo-c.ac.jp. proxy успешно скрыл мой IP, и даже попытался замаскировать континент (Asia), но позволил определить город проживания (Krasnodar), и название компании провайдера (Southern Telecommunication Company), а так же часовой пояс, который кстати говоря, определяется с помощью Java-скриптов, так что Proxy тут не причем и, чтобы не погореть на первом же взломе, хакер должен сменить сервер и отключить скрпиты

Но даже если proxy выглядит вполне благонадежным, он вполне может скрытно коллекционировать трафик, предоставляя эту информацию по первому требованию спецслужб. По слухам, самые быстрые анонимные proxy как раз спецслужбами и установлены. Но проблема даже не в этом. Каждый из нас может поставить честный proxy, который бы гарантированного не собирал никакой информации о пользователях, и отдать его в коллективное распоряжение — пускай хакерствуют (это характерно для институтов и других некоммерческих организаций с трафиком, оплачиваемым государством). Но где гарантия, что информацию о входящих/исходящих соединениях не собирает наш провайдер или провайдер провайдера? А, как показывает практика, большинство прововайдеров ее все-таки собирают, сохраняя логи на жестких дисках в течении нескольких дней или даже недель! К тому же не будем забывать про СОРМ, который как известно не дремлет.




Картинка 11 СОРМ — система оперативно-розыскных мероприятий, в настоящее время принятая практически всеми провайдерами и предназначенная для отлова хакеров, подробности здесь: http://www.loniis.ru:8101/RUS/products/catalogs/zips/sorm2001.zip

Конечно, если хакер дефейсит страничку Васи Пупкина, то хорошего proxy-сервера для этих целей вполне достаточно. Главное, не оставить на атакуемом узле никакой личной информации, ведь поднимать логи proxy по такому мелочному делу все равно никто не будет. А вот для серьезного взлома, proxy уже не подходит и приходится искать другие пути.




Картинка 12 анонимный взлом
^ >>> врезка: службы для тестирования proxy



Картинка 13 чем защищают свои права




Картинка 14 хакер — невидимка
^ >>> врезка: безопасный WEB-серфинг


Рисунок 9 логотип анонимного Proxy-сервера TRIUMPH PC
^ >>> врезка: секретный серфинг с комфортом!


Рисунок 10 внешний вид программы Secret Surfer, предназначенной для автоматического построения цепочки анонимных proxy, чем больше серверов будет задействовано — тем выше безопасность, однако, риск оказаться пойманным все же очень велик. Что если первый сервер в цепочке принадлежит ФБР?
^ общая стратегия взлома
Сотовый телефон — коварная штука. Каждый аппарат содержит уникальный заводской номер (точнее, серию номеров), автоматически передаваемый в сеть при включении питания или даже при каждом звонке (это уж как решит оператор!), что позволяет спецслужбам обнаруживать краденные телефоны, отслеживать перемещение их владельцев и делать много других нехороших вещей. Аналогичным образом поступает и SIM-карта, передающая идентификационную информацию, по которой легко определить имя и фамилию абонента. Продавцы телефонов ведут специальные списки, отмечающие кому и когда какой агрегат был продан — за этим строго следят блюдущие органы. Некоторые магазины требуют предъявления паспорта, некоторые — нет. Теоретически можно называться вымышленным именем, однако, всегда существует риск, что покупателя опознает продавец.




^ Картинка 15 война объявлена

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




^ Картинка 16 мобильная атака

Естественно, если хакер настолько обнаглеет, что начнет совершать взломы на регулярной основе, его быстро засекут и установят слежку. Даже если атаки совершаются из разных мест, запеленговать сотовый — плевое дело. Поэтому приходится действовать так: сотовый телефон с голубым зубом подкладывается в кучу мусора посреди пустыря (естественно, с предварительно протертыми "пальчиками"), а хакер сидит с нотебуком на порядочном отдалении (в радиусе прямой видимости с направленной антенной, голубой зуб держит устойчивую связь в пределах километра) и при появлении непрошеных "гостей" сматывает удочки и уезжает.




^ Рисунок 11 общий принцип GPRS-связи

Кто-то может спросить: зачем все эти сложности, когда можно просто зайти в любое Интернет-кафе, подключится к телефонной "лапше" на лестничной площадке и т. д.? На самом деле, все эти способы небезопасны и ненадежны. Сколько хакеров на этом погорело — не пересчитать! Но все-таки, выбрасывать телефон после каждой атаки получается слишком накладно. Так никаких телефонов не напасешься! С некоторой долей риска можно ограничиться тем, что после каждой атаки изменять идентификационный номер на другой, тогда уничтожать телефон будет необязательно. Спецслужбы все равно не смогут ничего отследить! При желании можно перепрограммировать и SIM-карту, однако, хлопоты не стоят того.




Рисунок 12 универсальный ридер/программатор любых SIM-карт
^ >>> выноска: GPRS-модемы vs сотовые телефоны
Кроме сотовых телефонов, для мобильного выхода в сеть можно воспользоваться GPRS-модемом. Они бывают двух типов. Первые предстают собой крошечную "мыльницу", подключающуюся по USB, вторые — PCI-плату расширения. Для взлома последние наиболее предпочтительны. Они намного дешевле и удобнее для экспериментов. Плотность монтажа на PCI-карте намного ниже, чем в USB-модеме или сотовом телефоне, что позволяет производителю использовать более доступные серийные компоненты. К тому же, если за продажей сотовых телефонов установлен жесткий контроль, но GPRS-модемы отгружаются бочками и продаются без предъявления паспорта или иных удостоверений личности.




^ Рисунок 13 GPRS-модем, подключаемый к нотебуку по USB




Рисунок 14 GPRS-модем, выполненный в виде PCI-карты, восьми-контактная микросхема чуть выше центра — и есть EEPROM
^ внутри сотового телефона
Идентификационный номер состоит из двух частей ESN (Electronic Serial Number – Электрический Серийный Номер) и MIN (Mobile Identification Number – мобильный идентификационный номер). Обычно они обозначаются как ESN/MIN и у наших зарубежных хакерских коллег называются парой (pair).

Конструктивно MIN хранится в модуле NAM (Number Assignment Module – Модуль Назначения Номеров) — микросхеме постоянной памяти c емкостью не менее 32 байт в пластиковой или керамической "обертке", расположенной на печатной плате. Обычно это EEPROM (то есть многократно перепрограммируемое ПЗУ), или PROM (однократно программируемое ПЗУ). Отождествить эту микросхему очень просто — эдакий мелкий таракан, с 8 ногами. Помимо MIN'а здесь находится SIHD и другая служебная информация, приблизительный формат которой приведен в таблице 1.




^ Рисунок 15 микросхема EEPROM на плате сотового телефона Nokia, хранящая идентификационные данные


адрес

биты

назначение

00

14-8

SIDH

01

7-0

SIDH

02




MIN

03

33-28

MIN2

04

27-24

MIN2

05

23-20

MIN1

06

19-12

MIN1

07

11-4

MIN1

08

3-0

MIN1

09

3-0

SCM

0A

10-8

IPCH

0B

7-0

IPCH

0C

3-0

ACCOLC

0D

0-7

PS

0E

3-0

GIM

0F

0-7

^ LOCK DIGIT 1,2

10

0-7

LOCK DIGIT 3, LOCK SPARE BITS

11

0-7

^ EE (END TO END SIGNALING), REP (REPERTORY)

12

0-7

HA (HORN ALERT), HF (HANDS FREE)

13




зависит от производителя



1D

1E

0-7

для выранивания

1F

0-7

контрольная сумма

Таблица 1 приблизительная схема заполнения NAM'a
^ >>> врезка: что такое SIDH
Аббревиатура SIDH расшифровывается как System Identification for Home System (Система Идентификации для Домашних Систем) и чаще всего называется просто SID. Система Идентификации сообщает сотовой станции каким оператором обслуживается наш телефон, что используется для роуминга. SIDH-код представляет собой 15-битный идентификатор общий для всего региона и ничего не говорящий о конкретном абоненте, поэтому, изменять его не надо. На анонимность атакующего SIDH-код никак не влияет.

<<<


Некоторые мобильники позволяют перепрограммировать NAM прямо с клавиатуры телефона! Впрочем, количество циклов перепрограммирования обычно очень невелико (от 3 до 20 в зависимости от настроения производителя) — за это отвечает микропроцессорная прошивка, так же называемая firmware. Ресурс самой микросхемы намного больше и практически неограничен. Но как бы так ни было, для долговременного хакерствования такой способ решительно не годится и приходится искать обходные пути.




^ Картинка 17 хирургические операции с сотовым телефоном

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




^ Рисунок 16 перепрограммирование микросхемы без выпаивания ее с платы

Исследование прошивок – это высший пилотаж хакерства, требующий обширных познаний и высочайшей квалификации. Для начала необходимо опознать процессор. Даже если оригинальная маркировка микросхемы не была "заботливо" уничтожена производителем телефона, вовсе не факт, что описание машинных команд удастся найти в сети. Техническая документация на многие мобильные процессоры засекречена или распространяется только по подписке, то есть за деньги (причем, физические лица отдыхают). Тем не менее, системны команд многих процессоров достаточно похожи и при достаточной настойчивости разобраться в них можно и без описания. Но что это дает? Любая прошивка буквально нашпигована командами взаимодействия с портами ввода/вывода, управляющих электронной начинкой телефона. За что они отвечают — непонятно. Это сплошное нагромождение головоломок и на анализ своей первой прошивки можно потратить целый год. Да-да! Двенадцать месяцев, триста шестьдесят дней и никак не меньше!




^ Рисунок 17 дизассемблирование прошивки

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




^ Рисунок 18 принципиальная схема несложного программатора




Рисунок 19 внешний вид программатора

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


auto a; auto b; b=0;

PatchByte(MaxEA()-1, 0);

for(a=MinEA();a
{

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

}

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

PatchByte(MaxEA()-1, b);

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

С таким скриптом ничего не стоит захачить 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 в двоичной форме).


376 0 111 213

________ __ ________ ________

/ \/ \/ \/ \

MIN = 0100001001101000000000000001100110

\______________________/\________/

MIN1 MIN2

^ Рисунок 20 формат представления MIN'а

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

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

Судя по всему, ESN/IMEI никак не кодируется и записывается в двоичной форме как есть. Во всяком случае, сравнивая свой ESN/IMEI (обычно, он пишется на задней стенке телефона), систему кодирования можно взломать без труда. Навряд ли там будет что-то экстраординарное. Настоящая проблема в том, что ESN/IMEI и MIN выбираются не случайным образом и должны соответствовать друг другу, в противном случае, оператор просто не пустит нас в сеть! А где можно раздобыть валидные пары ESN/IMEI и MIN? Первое, что приходит в голову — подсмотреть. Достаточно лишь взять чужой сотовый телефон в руки на несколько минут. После несложных манипуляций с клавиатурой (см. врезки) и ESN/IMEI, и MIN высветятся на дисплее. Достоинство этого приема в том, что хакер получает гарантированно работающую пару, однако, его анонимность немедленно оказывается под угрозой. Спецслужбы найдут владельца оригинального номера и, ласково поглаживая утюжок, попросят его перечислить всех лиц, имеющих доступ к телефону.

Некоторые предпочитают пользоваться генераторами идентификационных номеров. Их легко найти в сети (набираем в googl'е что-то вроде "IMEI calculator" и вперед), правда не все из них рабочие. А еще можно воспользоваться сканером и, устроившись в людном месте, таком например, как рынок или метро, за несколько часов получить добрую сотню рабочих пар, не рискуя оказаться никем замеченным. Чисто технически, в сканер можно превратить любой сотовый телефон или (если кто-то не в ладах с паяльником) купить уже готовый. Десятки фирм имеют свою Интернет-магазины, рассылающие товар наложенным платежом. Еще списки ESN/MIN можно обнаружить на хакерских форумах и IRC-каналах.

В общем, перепрограммировать свой сотовый телефон совсем несложно. Это может сделать каждый хакер!




Рисунок 21 устройство фирмы INSTORESA, предназначенное для изменения идентификационной информации сотового телефона
^ >>> врезка: как кодируется MIN
Вот пара хороших руководств, объясняющих как вычисляется MIN и некоторые другие идентификационные данные:

  • http://www.3gpp2.org/Public_html/Misc/C.P0006-D_v1.8_cdma2000_Analog-V&V_text_Due_3_June-2005.pdf;

  • http://www.tiaonline.org/standards/sfg/imt2k/cdma2000/TIA-EIA-IS-2000-6-A.pdf;




Рисунок 22 калькулятор доя расчета валидного IMEI
^ >>> врезка: ПЗУ бывают разные
POM (Read-Only Memory – память только на чтение): классическое ПЗУ, программируемое на аппаратном уровне в процессе производства микросхемы. Не можем быть изменено программным путем. Не применяются ни в одном известном мне сотовом телефоне


PROM (Programmable Read-Only Memory — Программируемая Память только на чтение): однократно программируемое ПЗУ, информация в которое заносится на специальном устройстве, называемом программатором. В сотовых телефонах большого распространения не получило.


EPROM (Erasable Programmable read-Only Memory — Стираемая Программируемая память только на чтение): многократно перепрограммируемое ПЗУ, очищаемое ультрафиолетовыми лучами и требующее программатора. Легко опознается по характерному "окошку". По слухам, применяется в некоторых типах телефонов, но сам личного я там никогда его не видел.


EEPROM (Electrically Erasable Programmable Read-Only Memory — Электрически Стираемая Программируемая Память Только на Чтение): многократно перепрограммируемое ПЗУ, очищаемое электрическим разрядом. Обычно требует программатора, но теоретически может обходится и без него. Широко применяется в сотовых телефонах.


FLASH-EEPROM: разновидность электрически стираемого многократно перепрограммируемого ПЗУ, не требующее программатора. Применяется во многих сотовых телефонах.
^ >>> врезка: основные типы чипов памяти,
используемые производителями сотовых телефонов

производитель чипа

чип памяти

с открытым коллектором

трехстабильный

с открытым коллектором

трехстабильный

AMD

AM27LS18

AM27LS19

AM27S18

AM27S19

Fujitsu

MB7056

MB7051







Harris

HM7602

HM7603







MMI

53/6330

53/6331







53/63S080

53/63S081







NSC

DM54S188

DM54S288

DM74S188




DM82S23

DM82S123







Signetics

82S23

82S123







Texas Inst

74S188

74S288

TBP18SA030

TBP18S030

TBP38SA030

TBP38S030









^ >>> врезка: перепрограммирование NAM'а с клавиатуры


Рисунок 23 перепрограммирование NAM'а с клавиатуры

Последовательность нажатий клавиш для перепрограммирования NAM'а не стандартизована и варьируется от одного телефона к другому. В частности, Samsung i300 может быть перепрограммирован так:


01. жмем "#907*9#0" до появления на экране "ENTER LOCK"

03. вводим "OTKSL";

04. в появившемся "SVC"-меню нажимаем "1"

05. вводим 10-значный MIN-номер и нажимаем "SAVE"

06. нажимаем "SAVE" еще раз

07. жмем "3" и нажимаем "SAVE" шесть раз;

08. вводим "HOME SID" и нажимаем "SAVE" один раз;

09. дважды нажимам "END"

10. теперь NAM изменен!


Инструкцию по перепрограммированию остальных телефонов можно найти на http://www.cdma-ware.com/codes.html, если же нашего телефона там нет, набираем в google что-то вроде "NAM+programming+модель телефона" и прочесываем интернет в поисках необходимой информации.

^ >>> врезка: просмотр IMEI-номера телефона

  • Acer (Motorola T191, T205):

    • набирать "*#300#", а затем нажать зеленую клавишу с трубкой;

  • Alcatel:

    • набрать "*#06#" на экране появится IMEI и версия прошивки;

  • Bosch:

    • набрать "*#3262255*8378#" (по буквам *#DANCALL*TEST#);

  • Ericsson:

    • набрать ">*<<*<*", где "" —кнопки со стрелками влево/вправо;

  • LG:

    • набрать "*#07#, 8060#*";

  • Mitsubishi:

    • удерживая "*", набрать "5806";

  • Motorola:

    • в тестовом режиме набрать код "19#";

  • Nokia:

    • набрать "*#0000#";

  • Panasonic:

    • набрать "*#9999#";

  • Samsung:

    • набрать "*#9999#";

  • Sagem:

    • находясь в основном меню, нажать звездочку, в появившемся меню — самый первый пункт;

  • Siemens:

    • набирать "*#06#";

  • Sony:

    • набрать "*#7353273#" (по буквам *#release#).



^ >>> врезка: интересные ссылки по телефонии

  • Radio Telephony:

    • информация о сотовой связи и взломе сотовых телефонов, море интересных статей, пошаговых инструкций и софта (на английском языке): www.hackcanada.com/blackcrawl/cell;

  • Glossary of Terms:

    • глоссарий терминов, используемых в соторой телефонии (на английском языке): http://www.unicomm.com/glossary_a-f.htm;

  • INSTORESA:

    • фирма, занимающаяся разработкой и продажей устройств для взлома и ремонта сотовых телефонов (на английском языке): www.instoresa.com/products/special.htm;

  • Hackers-Archiv:

    • огромный архив ссылок по взлому сотовых и не только (преимущественно на английском языке): www.fortunecity.de/thekenhausen/marsbar/387/hacker.htm;

  • Spielerekorde verandern:

    • статья по перепрограммированию EEPROM (на немецком языке): http://www.desatech.de/desaflash/nokia/spielerek.htm;

  • Tandy/RadioShack cellular phones: rebuilding electronic serial numbers and other data:

    • устаревшая, но все равно интересная статья о взломе сотовых телефонов из PHRACK'а (на английском языке): http://www.phrack.org/phrack/48/P48-07;




Картинка 18

poseshenie-lekcij-laboratornie-raboti-kontrolnie-raboti-po-modulyam-testi.html
poseshenie-studencheskogo-obshezhitiya-plan-vospitatelnoj-i-vneuchebnoj-raboti-fgbou-vpo-altajskij-gosudarstvennij-universitet-na-20.html
posesheniya-k-vracham-terapevtam-uchastkovim-i-pediatram-uchastkovim-rkb-2-posesheniya-v-priemnom-pokoe-bolnichnih-uchrezhdenij-konsultacii-vrachami-stacionarov-ambul-stranica-6.html
posetiteli-genri-devid-toro-uolden-ili-zhizn-v-lesu.html
posevnie-i-urozhajnie-kachestva-semyan-yarovoj-pshenici-v-usloviyah-severnogo-zauralya-06-01-05-selekciya-i-semenovodstvo-selskohozyajstvennih-rastenij.html
posevvtoroe-izdanie-1973-g-stranica-8.html
  • gramota.bystrickaya.ru/xiii-popravki-k-pravilam-proceduri-russian-original-english-konferenciya-storon-konvencii-o-biologicheskom-raznoobrazii.html
  • education.bystrickaya.ru/23-03-1895-0-32-40-parizh-13-09-1985-11-50-san-francisko-stranica-15.html
  • uchit.bystrickaya.ru/tematika-kursovih-rabot-na-2011-god-po-discipline-organizaciya-proizvodstva-na-predpriyatiyah-otrasli.html
  • klass.bystrickaya.ru/75-otvetov-k-gosu-kafedri-teoriya-i-praktika-upravleniya-ugtu-upi-chast-3.html
  • studies.bystrickaya.ru/investicionnoe-pravo-rf-shpargalka.html
  • literatura.bystrickaya.ru/sekciya-7-ispitaniya-raketno-kosmicheskoj-tehniki-provodit-xiv-mezhdunarodnaya-nauchnaya-konferenciya-posvyashennaya.html
  • teacher.bystrickaya.ru/gosduma-rf-monitoring-smi-14-iyunya-2007-g.html
  • lecture.bystrickaya.ru/4-rabota-s-lestnicej-palkoj-nastavlenie-po-pozharno-spasatelnoj-podgotovke-glava-obshie-polozheniya.html
  • bukva.bystrickaya.ru/strukturi-i-komponovochnie-shemi-gibkih-proizvodstvennih-modulej-i-sistem.html
  • pisat.bystrickaya.ru/statya-1-pravo-na-trud.html
  • uchit.bystrickaya.ru/territorialnaya-izbiratelnaya-komissiya-stranica-24.html
  • znanie.bystrickaya.ru/8-otnosheniya-mezhdu-hristianskoj-cerkovyu-i-rimskoj-imperiej-novikov-a-a-chastnaya-i-obshestvennaya-zhizn-rimlyan-p-giro.html
  • kolledzh.bystrickaya.ru/administrativnie-i-ugolovno-pravovie-meri-protivodejstviya-federalnaya-sluzhba-rossijskoj-federacii-po-kontrolyu.html
  • report.bystrickaya.ru/investment-proposals-glavnoe-upravlenie-vneshneekonomicheskoj-deyatelnosti-i-evropejskoj-integracii-odesskoj-oblastnoj-gosudarstvennoj-administracii.html
  • college.bystrickaya.ru/1-obshaya-informaciya-11-dannie-obshego-haraktera-i-rezultati-ocenki.html
  • lesson.bystrickaya.ru/rektorat-otchet-o-nauchno-issledovatelskoj-rabote.html
  • education.bystrickaya.ru/22plan-obsledovaniya-bolnogo-i-postroeniya-klinicheskoj-istorii-bolezni-pri-postuplenii-bolnogo.html
  • upbringing.bystrickaya.ru/metodicheskie-rekomendacii-dlya-studentov-po-izucheniyu-inostrannogo-yazika-anglijskij.html
  • ucheba.bystrickaya.ru/princip-formirovaniya-algoritmicheskih-i-evristicheskih-priemov-umstvennoj-deyatelnosti.html
  • shkola.bystrickaya.ru/sotovaya-svyaz-v-respublike-belarus.html
  • knigi.bystrickaya.ru/soderzhanie-vvedenie-3-opredelenie-konkurencii-kak-ekonomicheskogo-yavleniya.html
  • education.bystrickaya.ru/2-materiali-i-metodi-issledovaniya-otchet-o-nauchno-issledovatelskoj-rabote.html
  • portfolio.bystrickaya.ru/plan-lekcii-ponyatiya-kompyuternoj-sistemi-vnutrennie-ustrojstva-sistemnogo-bloka-materinskaya-plata.html
  • crib.bystrickaya.ru/harakteristika-sredstv-metodik-sistem-ozdorovitelnoj-fizkulturno-massovoj-napravlennosti-fitness-aerobika-bodibilding-i-dr.html
  • institute.bystrickaya.ru/glava-ix-rukovodstvo-soderzhit-osnovnie-razdeli-psihiatrii-i-narkologii-znanie-kotorih-neobhodimo-dlya-medicinskih.html
  • tasks.bystrickaya.ru/3fiksaciya-ponyatij-religii-mifologii-i-dogmaticheskogo-bogosloviya-a-f-losev-dialektika-mifa.html
  • tests.bystrickaya.ru/lobbirovanie-i-mezhpartijnie-gruppi-a-v-obolonskij-moral-i-pravo-v-politike-i-upravlenii.html
  • turn.bystrickaya.ru/our-university-leisure-activities-st-petersburg.html
  • institut.bystrickaya.ru/tema-19-osnovnie-trebovaniya-tehnicheskogo-obsluzhivaniya-k-ustrojsvam-svyazi.html
  • tests.bystrickaya.ru/konspekt-uroka-po-rasskazu-i-abunina-cifri-kakaya-muka-nashe-pisatelskoe-remeslo.html
  • writing.bystrickaya.ru/cerkov-stranica-8.html
  • essay.bystrickaya.ru/diodi-shotki.html
  • occupation.bystrickaya.ru/normativnie-materiali-i-sudebnaya-praktika-metodicheskie-materiali-dlya-studentov-6-kursa-zaochnogo-otdeleniya-yuridicheskogo-fakulteta.html
  • education.bystrickaya.ru/23-zanyatie-pokazaniya-i-protivopokazaniya-dlya-primeneniya-kniga-professora-h-lyojnera-predstavlyaet-soboj-fundamentalnij.html
  • obrazovanie.bystrickaya.ru/poyasnitelnaya-zapiska-k-kursu-ishodnij-uroven-znanij-i-umenij-kotorimi-dolzhen-obladat-student-pristupaya-k-izucheniyu-dannoj-disciplini.html
  • © bystrickaya.ru
    Мобильный рефератник - для мобильных людей.