JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
JIT SPRAY ÃÂÃÂÃÂÛØ× TDSS - Xakep Online
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