注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

检测模拟器  

2015-02-19 23:09:39|  分类: Android开发与逆 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

软件发布后会安装到用户的手机中运行,如果有发现软件运行在模拟器中,很显然不合常理,可能是有人试图破解或分析它,这种情况我们必须予以阻止。

模拟器与真实的Android手机有许多差异,我们可以在命令提示符下执行"adb shell getprop"查看并对比它们的属性值,经过对比发现如下几个属性值可以用来判断软件是否运行在模拟器中:

ro.product.model、ro.build.tag、ro.kernel.qemu。

编写检测代码如下:

  1. boolean isRunningInEmualtor() {  
  2.         boolean qemuKernel = false;  
  3.         Process process = null;  
  4.         DataOutputStream os = null;  
  5.         try{    
  6.             process = Runtime.getRuntime().exec("getprop ro.kernel.qemu");    
  7.             os = new DataOutputStream(process.getOutputStream());  
  8.             BufferedReader in = new BufferedReader(new InputStreamReader(process.getInputStream(),"GBK"));  
  9.             os.writeBytes("exit\n");    
  10.             os.flush();  
  11.             process.waitFor();  
  12.             qemuKernel = (Integer.valueOf(in.readLine()) == 1);  
  13.             Log.d("com.droider.checkqemu""检测到模拟器:" + qemuKernel);               
  14.         } catch (Exception e){    
  15.             qemuKernel = false;  
  16.             Log.d("com.droider.checkqemu""run failed" + e.getMessage());   
  17.         } finally {  
  18.             try{    
  19.                 if (os != null) {    
  20.                     os.close();    
  21.                 }    
  22.                 process.destroy();    
  23.             } catch (Exception e) {  
  24.                   
  25.             }    
  26.             Log.d("com.droider.checkqemu""run finally");   
  27.         }  
  28.         return qemuKernel;  
  29.     }  
  30.       
  31.     public static String getProp(Context context, String property) {  
  32.         try {  
  33.             ClassLoader cl = context.getClassLoader();  
  34.             Class SystemProperties = cl.loadClass("android.os.SystemProperties");  
  35.             Method method = SystemProperties.getMethod("get", String.class);  
  36.             Object[] params = new Object[1];  
  37.             params[0] = new String(property);  
  38.             return (String)method.invoke(SystemProperties, params);  
  39.         } catch (Exception e) {  
  40.             return null;  
  41.         }  
  42.     }  
  评论这张
 
阅读(93)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017