修改imei

简介: 引用:http://blog.sina.com.cn/s/blog_4a4f9fb501018xrn.html 该程序实现一下功能,   1,修改android模拟器的imei,   2,自动启动android模拟器   3,运行开机启动程序,ps:这个开机启动程序apk就没放出来了。

引用:http://blog.sina.com.cn/s/blog_4a4f9fb501018xrn.html

该程序实现一下功能,

  1,修改android模拟器的imei,

  2,自动启动android模拟器

  3,运行开机启动程序,ps:这个开机启动程序apk就没放出来了。

  4,停止android模拟器;

  重复1,2,3过程

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;

public class Test {

 
 public static void main(String[] args) {
  try {
     while(true){//

         eidtEmulator();//修改imei


         Runtime rt = Runtime.getRuntime();  
         String command = "C:\\Program Files\\Android\\android-sdk\\tools\\emulator -avd AVD-10";    
         rt.exec(command);  // 运行android模拟器
         System.out.println("success run");

         Thread.sleep(2*60*1000);//  等待2分钟后,停止android模拟器
         if(findRunningWindowsProcess("emulator-arm.exe")){
               killRunningWindowsProcess("emulator-arm.exe");
        }
   }
  } catch (IOException e) {
   e.printStackTrace();
  } catch (Exception e) {
   e.printStackTrace();
  }  
 }
 
 public static void eidtEmulator() throws Exception{
     String oldFilePath = "C:\\Program Files\\Android\\android-sdk\\tools\\emulator-arm.exe ";
     String newFilePath = "C:\\Program Files\\Android\\android-sdk\\tools\\emulator-arm1.exe";
     FileInputStream in = new FileInputStream(oldFilePath);
     FileOutputStream out = new FileOutputStream(newFilePath);
     byte bytes[] = new byte[1];
     byte gsnbytes[] = new byte[3];
     byte imeiBytes[] = new byte[15];
     int count;
     while ((count = in.read(bytes)) != -1) {
           out.write(bytes);
           if (bytes[0] == 0x43) {// if is char 'C'
                    count = in.read(gsnbytes);
                    if (count == -1) {
                         break;
                    }
                    out.write(gsnbytes);
                    if (gsnbytes[0] == 0x47 && gsnbytes[1] == 0x53 && gsnbytes[2] == 0x4E) {//if is char 'GSN'
                         count = in.read(bytes);//read char '.'
                         if (count == -1) {
                                break;
                          }
                          out.write(bytes);
                          count = in.read(imeiBytes);//read old imei
                         if (count == -1) {
                                 break;
                          }
                          byte[] imeis = getIMEIBytes();
                          out.write(imeis);//write new imei;
                     }
               }

        }
  in.close();
  out.close();
  File oldFile = new File(oldFilePath);
  oldFile.delete();
  File newFile = new File(newFilePath);
  newFile.renameTo(oldFile);
  

 }

 

 

 public static byte[] getIMEIBytes() {//随即生成15位imei号
       StringBuffer bff = new StringBuffer();
       byte imeiBytes[] = new byte[15];
       for(int i=0;i<imeiBytes.length;i++){
                int num = (int) Math.round(Math.random()*8);
                bff.append(num);
                imeiBytes[i] = Byte.parseByte("3"+num, 16);
         }
      //  printArray(imeiBytes);
       System.err.println("start imei: "+bff.toString());
       return imeiBytes;
 }

 

 public static void printArray(byte bytes[]) {
  StringBuffer buff = new StringBuffer();
  for (byte b : bytes) {
   buff.append(String.format("X", b) + " ");
  }
   System.out.println(buff.toString());
 }
 
 public static boolean killRunningWindowsProcess(String processName){   
        try {   
            Runtime.getRuntime().exec("taskkill /IM " + processName);   
            System.out.println("kill process successful");   
//            System.out.println("Process " + processName + " was killed. Mission completed.");   
            return true;   
        } catch (Exception ex) {   
            ex.printStackTrace();   
            System.out.println("kill process fail");   
            System.out.println("Misson failed.");   
            return false;   
        }   
    }   
 public static boolean findRunningWindowsProcess(String processName) {   
        BufferedReader bufferedReader = null;   
        Process proc = null;   
        try {   
            proc = Runtime.getRuntime().exec("tasklist /FI "IMAGENAME eq " + processName + """);   
            bufferedReader = new BufferedReader(new InputStreamReader(proc.getInputStream()));   
            String line;   
            while ((line = bufferedReader.readLine()) != null) {   
                if (line.contains(processName)) {   
                    return true;   
                }   
            }   
            return false;   
        } catch (Exception ex) {   
            ex.printStackTrace();   
            return false;   
        } finally {   
            if (bufferedReader != null) {   
                try {   
                    bufferedReader.close();   
                } catch (Exception ex) {   
                }   
            }   
            if (proc != null) {   
                try {   
                    proc.destroy();   
                } catch (Exception ex) {   
                }   
            }   
        }   
    }  

 

}

相关文章
|
5G 数据安全/隐私保护
5G终端标识SUPI,SUCI及IMSI解析
IMSI,SUPI,SUCI均为UE终端标识,区别在于IMSI为LTE终端标识,SUPI为5G非加密终端标识,一般等同于IMSI,SUCI为5G加密终端标识,需要解密后才能得到SUPI。
1848 0
5G终端标识SUPI,SUCI及IMSI解析
|
算法 5G
【5G NR】手机身份证号IMEI与IMEISV
手机上的“IMEI”是指国际移动设备识别码(IMEI),通常称为手机序列号。它用于识别移动网络中的各个独立手机和其他移动通信设备,相当于手机身份证号,它是全球唯一的。
515 0
【5G NR】手机身份证号IMEI与IMEISV
|
监控 安全 JavaScript
浅谈移动端设备标识码:DeviceID、IMEI、IDFA、UDID和UUID
场景 : 客户提出一个问题就是把用户的登录记录和设备绑定到一起,就是每个人都是固定的设备(可能是安全因素吧)。一开始想的是回去设备的IMEI号和用户账号绑定起来,结果发现IMEI不对外开发,只能另寻他法,最后通过获取设备序列号作为唯一标识。
浅谈移动端设备标识码:DeviceID、IMEI、IDFA、UDID和UUID
UUID.randomUUID()生成唯一识别码
1.UUID的概念 (1)UUID:通用唯一标识码,是一种软件建构的标准 (2)UUID的目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定 (3)UUID是指在一台机器上生成的的数字,它保证对在同一时空中的所有机器都是唯一的
|
API
如何获取IMEI号和MEID号
如何获取IMEI号和MEID号
295 0
|
存储 Java Android开发
2022最新手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)教程
2022最新手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)教程
2022最新手机设备标识码(IMEI、MEID、UDID、UUID、ANDROID_ID、GAID、IDFA等)教程
|
存储 安全 iOS开发
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
401 0
iOS开发 - 继udid,Mac地址等一系列唯一标识无效后,如何用KeyChain来实现设备唯一性
|
存储 网络协议 开发者
IDFV+KeyChain(设备唯一标识符)
IDFV+KeyChain(设备唯一标识符)
892 0
IDFV+KeyChain(设备唯一标识符)