18.11.2014 Views

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

JIT SPRAY АНАЛИЗ TDSS - Xakep Online

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

coding<br />

DVD<br />

Qt logo<br />

dvd<br />

На диске лежат полные<br />

исходники этого<br />

приложения.<br />

Андроид<br />

Все? Не тут-то было! Не знаю, как обстоят дела с другими<br />

дистрибутивами, но на Ubuntu «make» вылетал с ошибкой,<br />

говорящей о недоступности заголовочных файлов OpenGL.<br />

Чего только я не предпринимал… Поставил все, что можно<br />

было, но решение оказалось куда проще — надо было<br />

просто переустановить имеющиеся в системе заголовочные<br />

файлы OpenGL. После этого можно повторять команду<br />

make -j X и идти… нет, не пить пиво, а курить мануалы по<br />

разработке под Android — информация лишней не бывает<br />

никогда, а собираться оно будет долго =).<br />

ÑÎÇÄÀÍÈÅ ÏÐÈËÎÆÅÍÈß<br />

Запускай Qt Creator, создавай новое GUI-приложение.<br />

В нем (вернее, в файле .pro) нам нужно будет изменить<br />

несколько строчек. Они должны выглядеть так:<br />

TEMPLATE = lib<br />

CONFIG += dll<br />

В настройках Qt Creator нужно также указать путь до<br />

нашего (андроидовского) qmake — у меня это /data/local/<br />

qt/bin/qmake.<br />

Вообще, я бы посоветовал сначала дебажить приложение<br />

как десктопное и только потом изменять параметры<br />

сборки.<br />

Кстати, я ведь еще не говорил, что за приложение мы<br />

будем писать? Это будет приложение для отправки СМС на<br />

номера самых различных операторов. Это возможно благодаря<br />

сервису smste.ru, который мы и будем использовать.<br />

Не буду вдаваться в подробности сниффинга, скажу только,<br />

что я использую для этих целей Wireshark.<br />

Разберем алгоритм отправки сообщения:<br />

1. Делаем GET рута — главной страницы сайта, выдираем<br />

оттуда нужные нам значения input’ов (те, которые hidden),<br />

а заодно и кукисы.<br />

2. Запрашиваем капчу по номеру телефона и показываем<br />

ее пользователю.<br />

3. Отправляем POST-запрос с сообщением.<br />

Для отправки HTTP-запросов в Qt существует класс QHttp.<br />

Кстати, не забудь подключить модуль QtNetwork (QT +=<br />

network) в файле проекта!<br />

Набросай форму (мою ты можешь увидеть на скриншоте) и<br />

приступай к кодингу.<br />

XÀÊÅÐ 09 /140/ 10<br />

От объекта http класса QHtpp нам требуются только два<br />

сигнала — done() и readyRead(). Сразу при создании<br />

главного виджета отправим GET-запрос главной страницы:<br />

http.setHost("smste.ru");<br />

http.get("/");<br />

Сигнал done(), по сути, и не используется — по нему<br />

можно будет только опознать ошибку сетевого уровня<br />

(например, отключение Wi-Fi). Рассмотрим некоторые<br />

части слота onHttpReadyRead(const QHttpResponseHeader<br />

&resp):<br />

QString str(http.readAll());<br />

qint32 index=str.indexOf("value=\"code")+7;<br />

if ( index != 6 )<br />

codeMod = str.mid(index,<br />

str.indexOf("\" />", index) - index);<br />

Здесь мы копируем «спрятанную» (hidden) переменную<br />

codeMod из исходника страницы. Идем дальше:<br />

QString cookieStr;<br />

for ( qint8 i = 0;<br />

i < resp.values().count(); i++ )<br />

{<br />

if ( resp.values().at(i).first ==<br />

"Set-Cookie" )<br />

cookieStr.append(<br />

resp.values().at(i).second+'\n');<br />

}<br />

cookies = QNetworkCookie::parseCookies(<br />

cookieStr.toAscii());<br />

Ну, а в этом куске кода, как ты, наверное, догадался, мы<br />

парсим печеньки. cookies — это QList из QnetworkCookie.<br />

qint32 index =<br />

str.indexOf("/pix/") + 12;<br />

image = str.mid(<br />

index,str.indexOf(".jpg") - index<br />

);<br />

QHttpRequestHeader header = createHeader(<br />

"GET",QString("/pix/%1.jpg").arg(image)<br />

);<br />

http.request(header);<br />

Здесь копируется адрес капчи (запрос адреса я покажу<br />

чуть позже) и посылается запрос этого самого JPEG’а.<br />

HTTP://WWW<br />

links<br />

• http://code.google.<br />

com/p/androidlighthouse<br />

— страница<br />

проекта Qt for<br />

Android на гуглокоде.<br />

• http://developer.<br />

android.com/sdk/<br />

index.html — Android<br />

SDK, must have!<br />

INFO<br />

info<br />

У меня не получилось<br />

наладить отправку на<br />

«Мегафон». Может<br />

быть, это получится<br />

у тебя?<br />

WARNING<br />

warning<br />

Неожиданный пункт,<br />

не правда ли? Не<br />

бойся ничего противозаконного,<br />

только<br />

один ньюанс —<br />

со статически собранной<br />

библиотекой,<br />

при использовании<br />

QtWebkit<br />

и Phonon, лицензия<br />

твоего приложения<br />

не должна отличаться<br />

от LGPL.<br />

105

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!