`

目前已知最牛逼的获取安卓手机双IMEI的代码,包括山寨机

 
阅读更多

来自于:http://www.sum16.com/desinger/android-get-double-imei-include-made-in-china.html

 

import java.util.ArrayList;
import java.util.List;
 
import android.content.Context;
import android.telephony.TelephonyManager;
import android.widget.Toast;
 
public class getImei {
    Context context = null;
 
    public getImei(Context _context) {
        context = _context;
    }
 
    public String getimei() {
 
        try {
 
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            String imei = tm.getDeviceId();
            List<String> IMEIS = new ArrayList<String>();
            if (checkimei(imei.trim())) {
                IMEIS.add(imei.trim());
            }
            
            
            try{
                TelephonyManager telephonyManager1 = (TelephonyManager)context.getSystemService("phone1");
                String imeiphone1=   telephonyManager1.getDeviceId();
                if (imeiphone1 != null && checkimei(imeiphone1)) { 
                    if (!IMEIS.contains(imeiphone1)) {
                        IMEIS.add(imeiphone1); 
                        }
                }
            }  catch (Exception e) {
                         
            }
            try{
                TelephonyManager telephonyManager2 = (TelephonyManager)context.getSystemService("phone2");
                String imeiphone2=   telephonyManager2.getDeviceId();
                if (imeiphone2 != null && checkimei(imeiphone2)) { 
                    if (!IMEIS.contains(imeiphone2)) {
                        IMEIS.add(imeiphone2); 
                    }
                }
                }  catch (Exception e) {
                     
            }
         
            List<String> imeis = IMEI_initQualcommDoubleSim();
            if (imeis != null && imeis.size() > 0) {
                for (String item : imeis) {
                    if (!IMEIS.contains(item)) {
                        IMEIS.add(item);
                    }
                }
            }
 
            imeis = IMEI_initMtkSecondDoubleSim();
            if (imeis != null && imeis.size() > 0) {
                for (String item : imeis) {
                    if (!IMEIS.contains(item)) {
                        IMEIS.add(item);
                    }
                }
            }
            imeis = IMEI_initMtkDoubleSim();
            if (imeis != null && imeis.size() > 0) {
                for (String item : imeis) {
                    if (!IMEIS.contains(item)) {
                        IMEIS.add(item);
                    }
                }
            }
            imeis = IMEI_initSpreadDoubleSim();
            if (imeis != null && imeis.size() > 0) {
                for (String item : imeis) {
                    if (!IMEIS.contains(item)) {
                        IMEIS.add(item);
                    }
                }
            }
 
            StringBuffer IMEI_SB = new StringBuffer();
 
            Integer TIMES_TEMP = 1;
            for (String item : IMEIS) {
                if (TIMES_TEMP > 1) {
                    IMEI_SB.append('\n');
                }
                IMEI_SB.append(item);
                // params.put("IMEI" + TIMES_TEMP, item);
                TIMES_TEMP++;
            }
 
            String imeis_tmp = IMEI_SB.toString().trim();
            
            
            if ("".equals(imeis_tmp)) {
                imeis_tmp = "no_imei_1";
            }
            return imeis_tmp;
            //
            // TextView_imei.setText(IMEI_SB.toString());
            //
            // WriteFile("imei", IMEI_SB.toString());
 
        } catch (Exception e) {
            Toast.makeText(context, e.getMessage(), Toast.LENGTH_SHORT).show();
            return "no_imei_2";
        }
        
    }
 
    private Boolean checkimeisame(String imei) {
        char firstchar = '0';
        if (imei.length() > 0) {
            firstchar = imei.charAt(0);
        }
        Boolean issame = true;
        for (int i = 0; i < imei.length(); i++) {
            char ch = imei.charAt(i);
            if (firstchar != ch) {
                issame = false;
                break;
            }
        }
        return issame;
        // if (issame) {
        // // 全是相同字符;
        // } else {
        // // 包含不同字符
        // }
 
    }
 
    private Boolean checkimei(String IMEI) {
        Integer LEN = IMEI.length();
        if (LEN > 10 && LEN < 20 && !checkimeisame(IMEI.trim())) {
            return true;
        }
        return false;
    }
 
    private List<String> IMEI_initMtkDoubleSim() {
        try {
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            Class<?> c = Class.forName("com.android.internal.telephony.Phone");
            Integer simId_1, simId_2;
            try {
                java.lang.reflect.Field fields1 = c.getField("GEMINI_SIM_1");
                fields1.setAccessible(true);
                simId_1 = (Integer) fields1.get(null);
                java.lang.reflect.Field fields2 = c.getField("GEMINI_SIM_2");
                fields2.setAccessible(true);
                simId_2 = (Integer) fields2.get(null);
            } catch (Exception ex) {
                simId_1 = 0;
                simId_2 = 1;
            }
 
            // java.lang.reflect.Method m = TelephonyManager.class
            // .getDeclaredMethod("getSubscriberIdGemini", int.class);
            // String imsi_1 = (String) m.invoke(tm, simId_1);
            // String imsi_2 = (String) m.invoke(tm, simId_2);
 
            java.lang.reflect.Method m1 = TelephonyManager.class
                    .getDeclaredMethod("getDeviceIdGemini", int.class);
            String imei_1 = ((String) m1.invoke(tm, simId_1)).trim();
            String imei_2 = ((String) m1.invoke(tm, simId_2)).trim();
 
            // java.lang.reflect.Method mx = TelephonyManager.class
            // .getDeclaredMethod("getPhoneTypeGemini", int.class);
            // Integer phoneType_1 = (Integer) mx.invoke(tm, simId_1);
            // Integer phoneType_2 = (Integer) mx.invoke(tm, simId_2);
            // String defaultImsi = "";
            // if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) {
            // defaultImsi = imsi_2;
            // }
            // if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) {
            // defaultImsi = imsi_1;
            // }
 
            List<String> imeis = new ArrayList<String>();
            if (checkimei(imei_1)) {
                imeis.add(imei_1);
            }
            if (checkimei(imei_2)) {
                imeis.add(imei_2);
            }
            return imeis;
        } catch (Exception e) {
            // ��MTK
            return null;
        }
 
    }
 
    private List<String> IMEI_initMtkSecondDoubleSim() {
        try {
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            Class<?> c = Class.forName("com.android.internal.telephony.Phone");
 
            Integer simId_1, simId_2;
            try {
                java.lang.reflect.Field fields1 = c.getField("GEMINI_SIM_1");
                fields1.setAccessible(true);
                simId_1 = (Integer) fields1.get(null);
                java.lang.reflect.Field fields2 = c.getField("GEMINI_SIM_2");
                fields2.setAccessible(true);
                simId_2 = (Integer) fields2.get(null);
            } catch (Exception ex) {
                simId_1 = 0;
                simId_2 = 1;
            }
 
            java.lang.reflect.Method mx = TelephonyManager.class.getMethod(
                    "getDefault", int.class);
            TelephonyManager tm1 = (TelephonyManager) mx.invoke(tm, simId_1);
            TelephonyManager tm2 = (TelephonyManager) mx.invoke(tm, simId_2);
 
            // String imsi_1 = tm1.getSubscriberId();
            // String imsi_2 = tm2.getSubscriberId();
 
            String imei_1 = (tm1.getDeviceId()).trim();
            String imei_2 = (tm2.getDeviceId()).trim();
            //
            // Integer phoneType_1 = tm1.getPhoneType();
            // Integer phoneType_2 = tm2.getPhoneType();
            // String defaultImsi = "";
            // if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) {
            // defaultImsi = imsi_2;
            // }
            // if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) {
            // defaultImsi = imsi_1;
            // }
 
            List<String> imeis = new ArrayList<String>();
            if (checkimei(imei_1)) {
                imeis.add(imei_1);
            }
            if (checkimei(imei_2)) {
                imeis.add(imei_2);
            }
            return imeis;
 
        } catch (Exception e) {
            return null;
        }
    }
 
    private List<String> IMEI_initSpreadDoubleSim() {
        try {
            Class<?> c = Class
                    .forName("com.android.internal.telephony.PhoneFactory");
            java.lang.reflect.Method m = c.getMethod("getServiceName",
                    String.class, int.class);
            String spreadTmService = (String) m.invoke(c,
                    Context.TELEPHONY_SERVICE, 1);
 
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            // String imsi_1 = tm.getSubscriberId();
            String imei_1 = (tm.getDeviceId()).trim();
            // Integer phoneType_1 = tm.getPhoneType();
            TelephonyManager tm1 = (TelephonyManager) context
                    .getSystemService(spreadTmService);
            // String imsi_2 = tm1.getSubscriberId();
            String imei_2 = (tm1.getDeviceId()).trim();
            // Integer phoneType_2 = tm1.getPhoneType();
            // String defaultImsi = "";
            // if (TextUtils.isEmpty(imsi_1) && (!TextUtils.isEmpty(imsi_2))) {
            // defaultImsi = imsi_2;
            // }
            // if (TextUtils.isEmpty(imsi_2) && (!TextUtils.isEmpty(imsi_1))) {
            // defaultImsi = imsi_1;
            // }
 
            List<String> imeis = new ArrayList<String>();
            if (checkimei(imei_1)) {
                imeis.add(imei_1);
            }
            if (checkimei(imei_2)) {
                imeis.add(imei_2);
            }
            return imeis;
 
        } catch (Exception e) {
            return null;
        }
    }
 
    public List<String> IMEI_initQualcommDoubleSim() {
        try {
            TelephonyManager tm = (TelephonyManager) context
                    .getSystemService(Context.TELEPHONY_SERVICE);
            Class<?> cx = Class
                    .forName("android.telephony.MSimTelephonyManager");
            Object obj = context.getSystemService("phone_msim");
            Integer simId_1 = 0;
            Integer simId_2 = 1;
            //
            // java.lang.reflect.Method mx = cx.getMethod("getDataState");
            // // int stateimei_1 = (Integer) mx.invoke(cx.newInstance());
            // int stateimei_2 = tm.getDataState();
            // java.lang.reflect.Method mde = cx.getMethod("getDefault");
            java.lang.reflect.Method md = cx
                    .getMethod("getDeviceId", int.class);
            // java.lang.reflect.Method ms = cx.getMethod("getSubscriberId",
            // int.class);
            // java.lang.reflect.Method mp = cx.getMethod("getPhoneType");
 
            // Object obj = mde.invoke(cx);
 
            String imei_1 = ((String) md.invoke(obj, simId_1)).trim();
            String imei_2 = ((String) md.invoke(obj, simId_2)).trim();
 
            // String imsi_1 = (String) ms.invoke(obj, simId_1);
            // String imsi_2 = (String) ms.invoke(obj, simId_2);
 
            // int statephoneType_1 = tm.getDataState();
            // int statephoneType_2 = (Integer) mx.invoke(obj);
 
            List<String> imeis = new ArrayList<String>();
            if (checkimei(imei_1)) {
                imeis.add(imei_1);
            }
            if (checkimei(imei_2)) {
                imeis.add(imei_2);
            }
            return imeis;
 
            // Log.e("tag", statephoneType_1 + "---" + statephoneType_2);
 
            // Class<?> msc = Class.forName("android.telephony.MSimSmsManager");
            // for (Method m : msc.getMethods()) {
            // if (m.getName().equals("sendTextMessage")) {
            // m.getParameterTypes();
            // }
            // Log.e("tag", m.getName());
            // }
 
        } catch (Exception e) {
            return null;
        }
    }
 
}

 

 

分享到:
评论

相关推荐

    安卓端设计计算器代码

    本项目提供的压缩包“安卓端设计计算器代码”包含了完成这一任务所需的所有源码,使得开发者能够直接导入到安卓开发环境中进行编译和运行。下面我们将详细探讨这些知识点。 1. **安卓开发环境**:首先,你需要一个...

    安卓手机基站定位代码

    在Android系统中,基站定位是一种常见的位置获取方式,尤其在GPS信号不佳或者无法获取GPS卫星信号的情况下,基站定位成为手机定位的重要补充。本教程将详细讲解如何在Android应用中实现基站定位功能。 基站定位原理...

    android 手机安全卫士工程源代码

    《Android手机安全卫士工程源代码解析》 在Android操作系统占据全球智能手机市场主导地位的今天,手机安全问题显得尤为重要。Android手机安全卫士是保护用户设备免受恶意软件、病毒和隐私泄露等威胁的重要工具。...

    读取微信imei和uin脚本

    它可以包含预设的IMEI和UIN,或者一个已知的EnMicroMsg.db文件,以便用户比较脚本的输出结果。 最后,“.metadata”文件通常是开发环境或版本控制系统留下的元数据,可能包含了关于项目的信息,如编译设置、版本...

    判断android手机是华为小米魅族系统

    这个"判断android手机是华为小米魅族系统"的工具类就是针对这种情况设计的,它可以帮助开发者识别用户设备是属于华为、小米还是魅族等品牌。这个类通常会包含一系列方法,用于检测设备的制造商信息,从而确定其所属...

    Android应用源码安卓手机安全卫士更新版.zip

    【Android应用源码安卓手机安全卫士更新版.zip】是一个包含Android应用源代码的压缩文件,主要用于学习和研究Android应用程序的开发与安全防护。在这个更新版本中,开发者可能对原有的安全卫士应用进行了功能增强、...

    Android-获取取手机敏感信息Android6.0之上兼容

    本教程将详细讲解如何在Android 6.0及以上版本中兼容地获取手机敏感信息。 首先,我们需要了解Android的权限管理模型。在Android 6.0之前,应用在安装时会一次性获取所有所需权限。但这种模式可能导致用户无法明确...

    android获取手机位置

    在Android开发中,获取手机当前位置是一项常见的需求,这通常涉及到设备的定位服务。本文将详细介绍如何在Android应用中实现这一功能,以及两种主要的定位方法:GPS定位和网络定位。 1. GPS定位: GPS(全球定位...

    android 基于基站,apn,gps,wifi,network 根据不同手机sim卡获取经纬度

    在Android系统中,获取地理位置信息是开发者经常遇到的需求。标题提到的“基于基站,APN,GPS,WiFi,Network 根据不同手机SIM卡获取经纬度”涉及了多种定位技术,每种都有其特性和应用场景。下面将详细介绍这些技术...

    安卓手机软件查看手机隐秘参数.rar

    在安卓操作系统中,手机的许多隐秘参数通常不为普通用户所知,这些参数包括硬件信息、系统版本、内核版本、设备ID等。本文将详细介绍如何使用安卓手机软件来查看这些隐藏的设备参数,帮助用户更好地理解自己的手机并...

    安卓手机安全卫士更新版 非常好的源码

    【安卓手机安全卫士更新版源码解析】 在移动设备领域,尤其是安卓系统,安全问题一直备受关注。安卓手机安全卫士更新版源码提供了一种解决方案,它可以帮助用户保护设备免受恶意软件、病毒和其他潜在威胁的侵害。...

    详解Android获取设备唯一ID的几种方式

    总结来说,Android获取设备唯一ID有多种途径,包括IMEI、Android_ID、Serial Number以及自定义UUID方案。每种方式都有其适用范围和局限性,开发者应根据具体需求选择合适的方法,并注意处理各种可能的异常情况,以...

    Android手机短信恶意代码分析与防护.pdf

    本文以占据了移动操作系统市场较高比例的Android手机为例,深入介绍了Android手机的安全机制,并详细解释了恶意代码程序的设计和操作机制。最后,提出了如何在日常使用手机过程中避免恶意代码侵害的建议。 Android...

    Android手机连接蓝牙打印机实现打印功能

    在Android平台上实现手机连接蓝牙打印机并进行打印功能是一项常见的需求,尤其在移动办公、零售等领域。这个场景中,我们主要涉及的技术点包括Android系统的蓝牙API、数据传输以及打印协议的理解。 首先,Android...

    c#已知窗口句柄获取窗口标题的方法

    在C#编程环境中,通过已知的窗口句柄来获取窗口标题是一项常用且实用的功能,尤其是在进行自动化测试、用户界面操作或系统监控等任务时。本文将详细介绍如何使用C#来实现这一功能,并深入探讨其背后的原理和技术细节...

    安卓手机WIFI补丁集合

    在安卓手机系统中,Wi-Fi补丁是一种用于修复或优化无线网络连接的程序代码,它主要针对特定的Wi-Fi问题,如连接不稳定、信号弱、掉线频繁等。本资源包"安卓手机WIFI补丁集合"包含了针对这些问题的解决方案,帮助用户...

    批量5000条IMEI计算

    IMEI码通常由15位数字组成,分为几个部分,包括制造商代码、型号核准代码、序列号以及检查码。在给定的“批量5000条IMEI计算”主题中,我们将深入探讨IMEI的结构、生成原理以及如何通过已知的前14位来计算后续记录。...

    Android手机防病毒软件源码

    为了保护用户的设备和个人数据,Android手机防病毒软件的开发显得尤为重要。本源码着重实现了一键扫描功能,通过对应用权限和数字特征签名的分析,来检测并预防可能存在的恶意程序。 一、应用权限扫描 在Android...

    基于Android平台的手机恶意代码检测与防护技术研究.pptx

    基于Android平台的手机恶意代码检测与防护技术研究 在当今智能手机时代,Android平台已经成为全球最流行的手机操作系统之一。然而,随着手机功能的日益丰富和网络环境的复杂化,手机恶意代码问题也日益严重。恶意...

    基于Android的手机恶意代码检测与防护技术.pdf

    本文主要探讨的是基于Android系统的手机恶意代码的检测与防护技术。随着移动通信和智能终端的快速发展,Android因其开源特性,吸引了大量的开发者,同时也导致了恶意代码的滋生。这些恶意代码可能威胁到用户的个人...

Global site tag (gtag.js) - Google Analytics