GKLBB

当你经历了暴风雨,你也就成为了暴风雨

导航

应用安全 --- apk安全 之 检查模拟器

package com.iran.SmaliHelper;

import android.annotation.SuppressLint;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.opengl.GLES20;
import android.os.Build;
import android.os.Environment;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import java.io.File;
import java.lang.reflect.Method;

public class GKLBB extends ContentProvider {
    
    private static int rating = -1;
    
    public GKLBB() {
        super();
    }
    
    @Override
    public boolean onCreate() {
        if (isEmulator(getContext())) {
            System.exit(1);
            throw new RuntimeException();
        }
        if (isEmulatorAbsoluly(getContext())) {
            System.exit(1);
            throw new RuntimeException();
        }
        return false;
    }
    
    @Override
    @Nullable
    public String getType(@NonNull Uri uri) {
        return null;
    }
    
    @Override
    @Nullable
    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
        return null;
    }
    
    @Override
    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
        return 0;
    }
    
    @Override
    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
        return 0;
    }
    
    @Override
    @Nullable
    public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
        return null;
    }
    
    public static boolean isEmulatorAbsoluly(Context context) {
        if (mayOnEmulatorViaQEMU(context)) {
            return true;
        }
        
        // 检查各种模拟器特征
        return Build.PRODUCT.contains("sdk") ||
               Build.PRODUCT.contains("sdk_x86") ||
               Build.PRODUCT.contains("sdk_google") ||
               Build.PRODUCT.contains("Andy") ||
               Build.PRODUCT.contains("Droid4X") ||
               Build.PRODUCT.contains("nox") ||
               Build.PRODUCT.contains("vbox86p") ||
               Build.PRODUCT.contains("aries") ||
               
               Build.MANUFACTURER.equals("Genymotion") ||
               Build.MANUFACTURER.contains("Andy") ||
               Build.MANUFACTURER.contains("nox") ||
               Build.MANUFACTURER.contains("TiantianVM") ||
               
               Build.BRAND.contains("Andy") ||
               
               Build.DEVICE.contains("Andy") ||
               Build.DEVICE.contains("Droid4X") ||
               Build.DEVICE.contains("nox") ||
               Build.DEVICE.contains("vbox86p") ||
               Build.DEVICE.contains("aries") ||
               
               Build.MODEL.contains("Emulator") ||
               Build.MODEL.equals("google_sdk") ||
               Build.MODEL.contains("Droid4X") ||
               Build.MODEL.contains("TiantianVM") ||
               Build.MODEL.contains("Andy") ||
               Build.MODEL.equals("Android SDK built for x86_64") ||
               Build.MODEL.equals("Android SDK built for x86") ||
               
               Build.HARDWARE.equals("vbox86") ||
               Build.HARDWARE.contains("nox") ||
               Build.HARDWARE.contains("ttVM_x86") ||
               
               Build.FINGERPRINT.contains("generic/sdk/generic") ||
               Build.FINGERPRINT.contains("generic_x86/sdk_x86/generic_x86") ||
               Build.FINGERPRINT.contains("Andy") ||
               Build.FINGERPRINT.contains("ttVM_Hdragon") ||
               Build.FINGERPRINT.contains("generic/google_sdk/generic") ||
               Build.FINGERPRINT.contains("vbox86p") ||
               Build.FINGERPRINT.contains("generic/vbox86p/vbox86p");
    }
    
    public static boolean isEmulator(Context context) {
        if (isEmulatorAbsoluly(context)) {
            return true;
        }
        
        int newRating = 0;
        if (rating < 0) {
            // 检查PRODUCT
            if (Build.PRODUCT.contains("sdk") ||
                Build.PRODUCT.contains("Andy") ||
                Build.PRODUCT.contains("ttVM_Hdragon") ||
                Build.PRODUCT.contains("google_sdk") ||
                Build.PRODUCT.contains("Droid4X") ||
                Build.PRODUCT.contains("nox") ||
                Build.PRODUCT.contains("sdk_x86") ||
                Build.PRODUCT.contains("sdk_google") ||
                Build.PRODUCT.contains("vbox86p") ||
                Build.PRODUCT.contains("aries")) {
                newRating++;
            }
            
            // 检查MANUFACTURER
            if (Build.MANUFACTURER.equals("unknown") ||
                Build.MANUFACTURER.equals("Genymotion") ||
                Build.MANUFACTURER.contains("Andy") ||
                Build.MANUFACTURER.contains("MIT") ||
                Build.MANUFACTURER.contains("nox") ||
                Build.MANUFACTURER.contains("TiantianVM")) {
                newRating++;
            }
            
            // 检查BRAND
            if (Build.BRAND.equals("generic") ||
                Build.BRAND.equals("generic_x86") ||
                Build.BRAND.equals("TTVM") ||
                Build.BRAND.contains("Andy")) {
                newRating++;
            }
            
            // 检查DEVICE
            if (Build.DEVICE.contains("generic") ||
                Build.DEVICE.contains("generic_x86") ||
                Build.DEVICE.contains("Andy") ||
                Build.DEVICE.contains("ttVM_Hdragon") ||
                Build.DEVICE.contains("Droid4X") ||
                Build.DEVICE.contains("nox") ||
                Build.DEVICE.contains("generic_x86_64") ||
                Build.DEVICE.contains("vbox86p") ||
                Build.DEVICE.contains("aries")) {
                newRating++;
            }
            
            // 检查MODEL
            if (Build.MODEL.equals("sdk") ||
                Build.MODEL.contains("Emulator") ||
                Build.MODEL.equals("google_sdk") ||
                Build.MODEL.contains("Droid4X") ||
                Build.MODEL.contains("TiantianVM") ||
                Build.MODEL.contains("Andy") ||
                Build.MODEL.equals("Android SDK built for x86_64") ||
                Build.MODEL.equals("Android SDK built for x86")) {
                newRating++;
            }
            
            // 检查HARDWARE
            if (Build.HARDWARE.equals("goldfish") ||
                Build.HARDWARE.equals("vbox86") ||
                Build.HARDWARE.contains("nox") ||
                Build.HARDWARE.contains("ttVM_x86")) {
                newRating++;
            }
            
            // 检查FINGERPRINT
            if (Build.FINGERPRINT.contains("generic/sdk/generic") ||
                Build.FINGERPRINT.contains("generic_x86/sdk_x86/generic_x86") ||
                Build.FINGERPRINT.contains("Andy") ||
                Build.FINGERPRINT.contains("ttVM_Hdragon") ||
                Build.FINGERPRINT.contains("generic_x86_64") ||
                Build.FINGERPRINT.contains("generic/google_sdk/generic") ||
                Build.FINGERPRINT.contains("vbox86p") ||
                Build.FINGERPRINT.contains("generic/vbox86p/vbox86p")) {
                newRating++;
            }
            
            // 检查OpenGL渲染器
            try {
                String opengl = GLES20.glGetString(GLES20.GL_RENDERER);
                if (opengl != null) {
                    if (opengl.contains("Bluestacks") || opengl.contains("Translator")) {
                        newRating += 10;
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            // 检查Bluestacks共享文件夹
            try {
                File sharedFolder = new File(Environment.getExternalStorageDirectory().toString() + 
                    File.separatorChar + "windows" + File.separatorChar + "BstSharedFolder");
                if (sharedFolder.exists()) {
                    newRating += 10;
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            
            rating = newRating;
        }
        
        return rating > 3;
    }
    
    private static boolean mayOnEmulatorViaQEMU(Context context) {
        String qemu = getProp(context);
        return "1".equals(qemu);
    }
    
    @SuppressLint("PrivateApi")
    private static String getProp(Context context) {
        try {
            ClassLoader cl = context.getClassLoader();
            Class<?> SystemProperties = cl.loadClass("android.os.SystemProperties");
            Method method = SystemProperties.getMethod("get", String.class);
            Object[] params = new Object[1];
            params[0] = "ro.kernel.qemu";
            return (String) method.invoke(SystemProperties, params);
        } catch (Exception e) {
            return null;
        }
    }
}

 

posted on 2025-09-08 08:02  GKLBB  阅读(8)  评论(0)    收藏  举报