안드로이드 앱 에뮬레이터 사용 금지
인터넷에는 안드로이드 기기와 시뮬레이터의 차이에 대해 많은 자료를 찾아보았고 대부분이 설비 id를 통해 판단했다. 그들은 스스로 시험을 하지 않고 인터넷의 자원을 완전히 복사했다.조금도 실용적이지 않고 많은 자료를 뒤적였는데 마지막에 모두 9가지 방법으로 실기와 시뮬레이터를 판단할 수 있었다. 그 중에서 가장 효과적인 것은 시뮬레이터와 실기의 배터리 볼트와 배터리의 온도를 통해 판단하는 것이다.시뮬레이터의 배터리 볼트는 0 또는 1000일 수 있지만 온도는 반드시 0이다.그러나 실제 기계는 가변적이어서 이 차이를 통해 실제 기계와 시뮬레이터를 효과적으로 판단할 수 있다.또 다른 8가지 방법으로 판단하고 코드를 붙인다.
털을 뽑는 교류군을 추천합니다. 여러분들이 일상적으로 용돈을 벌 수 있도록 돕습니다. 364739778, 이 돈을 벌기를 기대하지 마세요.
IntentFilter intentFilter = new IntentFilter( Intent.ACTION_BATTERY_CHANGED); Intent batteryStatusIntent = registerReceiver(null, intentFilter);
int voltage = batteryStatusIntent.getIntExtra("voltage", 99999);
int temperature = batteryStatusIntent.getIntExtra("temperature", 99999);
if (((voltage == 0) && (temperature == 0))
|| ((voltage == 10000) && (temperature == 0))) {
//
}
다음은 다른 8가지 방법입니다.
import java.io.File; import java.io.FileInputStream; import java.io.InputStream;
import android.content.Context; import android.telephony.TelephonyManager; import android.util.Log;
public class AntiEmulator { private static String[] known_pipes = { “/dev/socket/qemud”, “/dev/qemu_pipe” };
private static String[] known_qemu_drivers = { "goldfish" };
private static String[] known_files = {
"/system/lib/libc_malloc_debug_qemu.so", "/sys/qemu_trace",
"/system/bin/qemu-props" };
private static String[] known_numbers = { "15555215554", "15555215556",
"15555215558", "15555215560", "15555215562", "15555215564",
"15555215566", "15555215568", "15555215570", "15555215572",
"15555215574", "15555215576", "15555215578", "15555215580",
"15555215582", "15555215584", };
private static String[] known_device_ids = { "000000000000000" // ID
};
private static String[] known_imsi_ids = { "310260000000000" // imsi id
};
// “/dev/socket/qemud”,“/dev/qemu_pipe”
public static boolean checkPipes() {
for (int i = 0; i < known_pipes.length; i++) {
String pipes = known_pipes[i];
File qemu_socket = new File(pipes);
if (qemu_socket.exists()) {
Log.v("Result:", "Find pipes!");
return true;
}
}
Log.i("Result:", "Not Find pipes!");
return false;
}
//
// , QEmu
public static Boolean checkQEmuDriverFile() {
File driver_file = new File("/proc/tty/drivers");
if (driver_file.exists() && driver_file.canRead()) {
byte[] data = new byte[1024]; // (int)driver_file.length()
try {
InputStream inStream = new FileInputStream(driver_file);
inStream.read(data);
inStream.close();
} catch (Exception e) {
e.printStackTrace();
}
String driver_data = new String(data);
for (String known_qemu_driver : AntiEmulator.known_qemu_drivers) {
if (driver_data.indexOf(known_qemu_driver) != -1) {
Log.i("Result:", "Find know_qemu_drivers!");
return true;
}
}
}
Log.i("Result:", "Not Find known_qemu_drivers!");
return false;
}
//
public static Boolean CheckEmulatorFiles() {
for (int i = 0; i < known_files.length; i++) {
String file_name = known_files[i];
File qemu_file = new File(file_name);
if (qemu_file.exists()) {
Log.v("Result:", "Find Emulator Files!");
return true;
}
}
Log.v("Result:", "Not Find Emulator Files!");
return false;
}
//
public static Boolean CheckPhoneNumber(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String phonenumber = telephonyManager.getLine1Number();
for (String number : known_numbers) {
if (number.equalsIgnoreCase(phonenumber)) {
Log.v("Result:", "Find PhoneNumber!");
return true;
}
}
Log.v("Result:", "Not Find PhoneNumber!");
return false;
}
// IDS “000000000000000”
public static Boolean CheckDeviceIDS(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String device_ids = telephonyManager.getDeviceId();
for (String know_deviceid : known_device_ids) {
if (know_deviceid.equalsIgnoreCase(device_ids)) {
Log.v("Result:", "Find ids: 000000000000000!");
return true;
}
}
Log.v("Result:", "Not Find ids: 000000000000000!");
return false;
}
// imsi id “310260000000000”
public static Boolean CheckImsiIDS(Context context) {
TelephonyManager telephonyManager = (TelephonyManager) context
.getSystemService(Context.TELEPHONY_SERVICE);
String imsi_ids = telephonyManager.getSubscriberId();
for (String know_imsi : known_imsi_ids) {
if (know_imsi.equalsIgnoreCase(imsi_ids)) {
Log.v("Result:", "Find imsi ids: 310260000000000!");
return true;
}
}
Log.v("Result:", "Not Find imsi ids: 310260000000000!");
return false;
}
//
public static Boolean CheckEmulatorBuild(Context context) {
String BOARD = android.os.Build.BOARD;
String BOOTLOADER = android.os.Build.BOOTLOADER;
String BRAND = android.os.Build.BRAND;
String DEVICE = android.os.Build.DEVICE;
String HARDWARE = android.os.Build.HARDWARE;
String MODEL = android.os.Build.MODEL;
String PRODUCT = android.os.Build.PRODUCT;
if (BOARD == "unknown" || BOOTLOADER == "unknown" || BRAND == "generic"
|| DEVICE == "generic" || MODEL == "sdk" || PRODUCT == "sdk"
|| HARDWARE == "goldfish") {
Log.v("Result:", "Find Emulator by EmulatorBuild!");
return true;
}
Log.v("Result:", "Not Find Emulator by EmulatorBuild!");
return false;
}
//
public static boolean CheckOperatorNameAndroid(Context context) {
String szOperatorName = ((TelephonyManager) context
.getSystemService("phone")).getNetworkOperatorName();
if (szOperatorName.toLowerCase().equals("android") == true) {
Log.v("Result:", "Find Emulator by OperatorName!");
return true;
}
Log.v("Result:", "Not Find Emulator by OperatorName!");
return false;
}
} 위에 주석이 있으니 모두 도움이 되었으면 합니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.