# 针对Android移动终端的通信攻击 **Repository Path**: liyouda/JAVA ## Basic Information - **Project Name**: 针对Android移动终端的通信攻击 - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-06-05 - **Last Updated**: 2021-06-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 针对Android移动终端的通信攻击 #### 短信拦截攻击 #### 实验攻击效果截图: #### 短信拦截: #### 正常的虚拟机能接受到短信: ![输入图片说明](https://images.gitee.com/uploads/images/2021/0605/180600_0f8abe51_8897852.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0605/180610_ec98782f_8897852.png "屏幕截图.png") #### 运行了短信拦截代码后的虚拟机: ![输入图片说明](https://images.gitee.com/uploads/images/2021/0605/180619_b7bb3954_8897852.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0605/180626_a92fa4d1_8897852.png "屏幕截图.png") 从上面的图片我们可以看到来自不同号码的短信都已经被拦截了。 #### 实验原理: 之所以这个程序能实现屏蔽系统短信的功能,是因为广播有两种不同的类型:普通广播(normal broadcasts)和有序广播(ordered broadcasts)。普通广播是完全异步的,可以被所有的接收者接收到,并且接收者无法终止广播的传播。然而有序广播是按照接收者声明的优先级别,被接收者依次接收到。优先级别声明在 intent-filter 元素的 android:priority 属性中,数越大优先级别越高,取值范围:-1000到1000,优先级别也可以调用IntentFilter对象的setPriority()进行设置。有序广播的接收者可以终止广播Intent的传播,广播Intent的传播一旦终止,后面的接收者就无法接收到广播。上面的实例就是将smsReceiver的优先级设为1000。 系统发送android.provider.Telephony.SMS_RECEIVED的是有序广播,所以我们能实现拦截功能。 #### 具体步骤: 首先我们要在eclipse搭建好安卓的环境,需要安装SDK,ADT,安卓镜像等。然后我们需要配置环境变量,更改eclipse中的设置等。 然后我们在eclipse中添加DDMS,用来监测虚拟机的状态以及对虚拟机进行操作。在正常的虚拟机打开后,我们通过DDMS的emulator control给虚拟机发送短信,虚拟机能够正常接收。然后,在虚拟机上运行我们的代码后,再通过emulator control给虚拟机发送短信,虚拟机就不能接收到短信了。至此,我们的短信拦截功能就已经实现。 #### 电话监听攻击 正常的虚拟机: ![输入图片说明](https://images.gitee.com/uploads/images/2021/0605/180837_6007135d_8897852.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0605/180844_fdf31687_8897852.png "屏幕截图.png") 挂断电话后sdcard没有生成录音文件 运行了监听功能代码的虚拟机: ![输入图片说明](https://images.gitee.com/uploads/images/2021/0605/180852_805adab6_8897852.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0605/180859_0d137974_8897852.png "屏幕截图.png") ![输入图片说明](https://images.gitee.com/uploads/images/2021/0605/180905_7d57f806_8897852.png "屏幕截图.png") 可以看到在接听完电话过后,在sdcard文件夹下面生成了一个格式为3gp的音频文件,这就是我们监听的电话录音。 #### 实验原理: 想要监听来电需要在xml文件申明”android.permission.READ_PHONE_STATE”等权限。还需要注册来电监听,先接收开机广播,然后在接收到广播后注册来电监听。接收开机广播需要有“android.permission.RECEIVE_BOOT_COMPLETED”权限。 Java代码中,主要依靠两个类:TelephoneManger和PhoneStateListener。 TelephonseManger提供了取得手机基本服务的信息的一种方式。因此应用程序可以使用TelephonyManager来探测手机基本服务的情况。 PhoneStateListener这个类可以用来监听电话状态的改变。 #### 具体步骤: 在调试好java代码过后,我们要配置xml文件。 xml是一种可扩展标记语言,标准通用标记语言的子集。是一种用于标记电子文件使其具有结构性的标记语言,和html有很多相似的地方。 在配置好了xml文件过后,我们就可以启动java代码写的程序,让他运行在虚拟机中。然后再通过DDMS中的emulator control给虚拟机打电话,最后挂断后发现sdcard文件夹下多了一个3gp文件,说明我们录音成功。这时我们就可以再把3gp文件上传到网上指定的位置,然后删除sdcard中的录音文件,这样就算真正的实现监听了。