android 원 키 변경

9639 단어 android
이 글 은 휴대 전화 하드웨어 인 자 를 진정 으로 수정 하면app 은 현재 핸드폰 의 imei, mac, imsi 등 매개 변 수 를 판단 하여 이 핸드폰 이 여러 번 app 에 등 록 된 것 을 판단 합 니 다.일반적인 상황 에서 가중치 는 imei > imsi > mac > androidid . Android 에서 imei 등 정 보 를 얻 는 소스 코드 는 주로 Telephony Manager. java 에 있 습 니 다. app 에서 이 매개 변 수 를 얻 을 수 있 는 경 로 는 이 방법 밖 에 없습니다. adb 와 셸 을 통 해 얻 을 수 없습니다.그래서 쉬 워 요.imei 가 져 오기
	telephonyManager.getImei(){ //获取默认卡的imei ,就是当前正在联网的
if(true){
    从sd卡或者数据库读取动态imei
[size=3]}[/size]
 return getImei(getSlotIndex());
}[/size]
public String getImei(int slotIndex) { //如果是多卡,就获取指定的imei。不知道模拟器或者双开注意要支持
        ITelephony telephony = getITelephony(); 
        if (telephony == null) return null;


        try {
            return telephony.getImeiForSlot(slotIndex, getOpPackageName());[/size]
        } catch (RemoteException ex) {
            return null;
        } catch (NullPointerException ex) {
            return null;
        }
    }

나머지 핸드폰 번호, simnum, iccid 는 모두 이 방법 입 니 다. 저 는 아래 코드 검증 을 통 해 수 정 된 매개 변 수 는 완전히 작용 합 니 다.
private void imei() {
        try {
            TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
            if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
                return;
            }
            String ANDROID_ID = Settings.System.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID);
            Log.e(TAG,"def ANDROID_ID ->" + ANDROID_ID);
           String imei0 = telephonyManager.getDeviceId();
            Log.e(TAG,"def myimei ->" + imei0);
            String imei1 = telephonyManager.getDeviceId(1);
            Log.e(TAG,"myimei1 ->" + imei1);
            if(Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1){
            String imei2 = telephonyManager.getImei(0);
            Log.e(TAG,"26+ imei0 ->" + imei2);}


            String imsi = telephonyManager.getSubscriberId();
            Log.e(TAG, "imsi ->" + imsi);

            String phoneNumber = telephonyManager.getLine1Number();
            Log.e(TAG, "SIM卡中存储本机号码 phoneNumber ->" + phoneNumber);

            String voiceMail = telephonyManager.getVoiceMailNumber();
            Log.e(TAG, "语音邮件号码 voiceMail ->" + voiceMail);

            String simSerial = telephonyManager.getSimSerialNumber();
            Log.e(TAG, "SIM卡序列号 simSerial ->" + simSerial);

            String countryIso = telephonyManager.getNetworkCountryIso();
            Log.e(TAG, "SIM卡提供商的国家代码 countryIso ->" + countryIso);

            String carrier = telephonyManager.getNetworkOperatorName();
            Log.e(TAG, "当前移动网络运营商 mynetname ->" + carrier);
            String netid = telephonyManager.getNetworkOperator();
            Log.e(TAG, "当前移动网络运营商 netid ->" + netid);

            int count = telephonyManager.getPhoneCount();
            Log.e(TAG, "移动卡数量 count ->" + count);
            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N_MR1) {
                String Meid = telephonyManager.getMeid();
                Log.e(TAG, "移动卡数量 Meid ->" + Meid);
            }
            if (Build.VERSION.SDK_INT > 28) {
                String nai = telephonyManager.getNai();
                Log.e(TAG, "移动卡数量 Nai ->" + nai);
            }


            String simOperator = telephonyManager.getSimOperator();
            Log.e(TAG, "SIM的移动运营商的名称 mysmo ->" + simOperator);

            int phoneType = telephonyManager.getPhoneType();
            Log.e(TAG, "移动终端的类型 phoneType ->" + phoneType);

            int radioType = telephonyManager.getNetworkType();
            Log.e(TAG, "当前使用的网络制式 radioType ->" + radioType);

            String softVersion = telephonyManager.getDeviceSoftwareVersion();
            Log.e(TAG, "软件版本 softVersion ->" + softVersion);
            boolean Roam = telephonyManager.isNetworkRoaming();
            Log.e(TAG, "漫游 Roam ->" + Roam);

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

Android 수정 Androidid 방법: Android 획득 방법 은 String ANDROIDID = Settings.System.getString(this.getContentResolver(), Settings.Secure.ANDROID_ID); 이 매개 변 수 는 read - only 입 니 다.Settings. System. putString (this. getContentResolver (), "사용자 정의 id") 를 사용 하면;잘못 을 보고 할 수 있 으 니, 단지
public static boolean putStringForUser(@NonNull ContentResolver resolver,
                @NonNull String name, [url=home.php?mod=space&uid=1043391]@nullable[/url] String value, @Nullable String tag,
                boolean makeDefault, @UserIdInt int userHandle) {
            if (LOCAL_LOGV) {
                Log.v(TAG, "Global.putString(name=" + name + ", value=" + value
                        + " for " + userHandle);
            }
            // Global and Secure have the same access policy so we can forward writes
            if (MOVED_TO_SECURE.contains(name)) {
                Log.w(TAG, "Setting " + name + " has moved from android.provider.Settings.Global"
                        + " to android.provider.Settings.Secure, value is unchanged.");
                return Secure.putStringForUser(resolver, name, value, tag,
                        makeDefault, userHandle);
            }
            return sNameValueCache.putStringForUser(resolver, name, value, tag,
                    makeDefault, userHandle);
        }



if (MOVED TO SECURE. contains (name)) {} 내용 주석 만 달 면 됩 니 다.Android 동적 수정 mac 가 귀 찮 습 니 다. Android 가 mac 를 가 져 오 는 방식 은 다음 과 같은 몇 가지 첫 번 째 셸 명령 이 있 습 니 다. ifconfig 두 번 째 는?
private static String getMacFromHardware() {
    try {
        List all = Collections.list(NetworkInterface.getNetworkInterfaces());
        Log.d("Utils", "all:" + all.size());
        for (NetworkInterface nif : all) {
            if (!nif.getName().equalsIgnoreCase("wlan0")) {
                continue;
            }

            byte[] macBytes = nif.getHardwareAddress();
            if (macBytes == null) {
                return null;
            }
            Log.d("Utils", "macBytes:" + macBytes.length + "," + nif.getName());

            StringBuilder res1 = new StringBuilder();
            for (byte b : macBytes) {
                res1.append(String.format("%02X:", b));
            }

            if (res1.length() > 0) {
                res1.deleteCharAt(res1.length() - 1);
            }
            return res1.toString();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

세 번 째 cat/sys/class/net/wlan 0/address 는 첫 번 째 와 세 번 째 에 대해 비교적 번거롭다.getInetAddresses 를 수정 하여 동적 인 mac 로 돌아 가면 ifconfig 와 cat/sys/class/net/wlan 0/address 를 돌아 갈 수 없습니다. 제 쪽 은 mac 주 소 를 직접 수정 하고 ifconfig wlan 0 hw ether $Mac 이름 을 실행 합 니 다. 수정 후 세 가지 방법 이 모두 작용 합 니 다. 네 번 째 반사 방식 으로 mac 를 가 져 올 수 있 는 지 모 르 겠 습 니 다.하지만 이 방법 은 루트 권한 이 있어 야 합 니 다.핸드폰 userdebug 나 eng 이면 마음대로 수정 할 수 있 습 니 다.코드 에서 동적 으로 수정 하려 면 부팅 스 크 립 트 를 수정 해 야 합 니 다.구체 적 인 세부 사항 은 열거 하지 않 았 다.SN 수정
public static String getSerial() {
            boolean flag =SystemProperties.getBoolean("persist.sys.keep.mprop",false);
                if(flag){
                返回我的sn
             }
                }else{
                IDeviceIdentifiersPolicyService service = IDeviceIdentifiersPolicyService.Stub
                        .asInterface(ServiceManager.getService(Context.DEVICE_IDENTIFIERS_SERVICE));
                try {
                    return service.getSerial();
                } catch (RemoteException e) {
                    e.rethrowFromSystemServer();
                }
                }
        return UNKNOWN;
    }

이상 의 수정 은 모두 제 테스트 app 을 통 해 검 증 된 적 이 있 습 니 다.동적 수정 을 지원 할 수 있 습 니 다. 동적 수정 화면 해상도 와 밀도, sensor 유형 및 이름과 apk 목록 이 모두 완료 되 었 습 니 다.다만 개인 적 으로 는 소 용이 없다 고 생각 합 니 다.관심 있 는 것 은 저 에 게 연락 하여 함께 연구 하 셔 도 됩 니 다. 다른 수정 사항 이 있 으 면 메 시 지 를 남 겨 주세요.

좋은 웹페이지 즐겨찾기