本文章由Jack_Jia编写,转载请注明出处。
文章链接:http://blog.csdn.net/jiazhijun/article/details/8691704
作者:Jack_Jia 邮箱: 309zhijun@163.com
一、序言
目前市面上已存在大量优秀权限管理工具,LBE就是其中的一个,不过LBE权限管理功能只有在用户设备已经ROOT后才能使用,今天我们来分析一款号称“不需要Root就能控制手机权限”的Android软件---洗大师。
用户可以通过http://www.xidashi.com/下载该应用及了解其工作原理。
软件基本信息如下:
二、实现原理分析
通过网站介绍我们可知,洗大师的工作流程是:
1、用户通过洗大师上传本地应用到洗大师云清洗服务器请求清洗应用。
2、洗大师云清洗服务器通过算法并应用进行清洗。
3、用户下载安装清洗后的应用。
我们通过编写Demo的方式来测试洗大师的工作原理及清洗的程度,看看洗大师权限管理是否能够有效遏制恶意软件的恶意行为。
发送短信是很多恶意吸费软件的必备行为,目前恶意软件发送短信的方式有以下几种:
1、通过SmsManager.sendTextMessage直接发送。
2、通过反射调用SmsManager发送短信。
3、通过DexClassLoader动态加载外部dex,完成短信发送。
我们的Demo程序将使用以上三种方式发送短信,看洗大师的清洗程度如何。
Demo界面如下:
Demo关键代码如下:
- switch (v.getId()) {
- case R.id.button1:
- SmsManager ms = SmsManager.getDefault();
- ms.sendTextMessage("5554", null, "test1", null, null);
- break;
- case R.id.button2:
- try {
- Class smClass = Class.forName("android.telephony.SmsManager");
- Method defaultMethod = smClass.getDeclaredMethod("getDefault", new Class[]{});
- Object smObject = defaultMethod.invoke(null, new Object[]{});
- Method sendMethod = smClass.getMethod("sendTextMessage", new Class[]{String.class,String.class,String.class,PendingIntent.class,PendingIntent.class});
- sendMethod.invoke(smObject, new Object[]{"5554",null,"test2",null,null});
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- break;
- case R.id.button3:
- try {
- DexClassLoader dex = new DexClassLoader(this.getFilesDir().getPath()+"a.dex", "/sdcard/",null,getClassLoader());
- Class sm = dex.loadClass("com.xidashi.test.SMSSend");
- SMSSend obj = (SMSSend)sm.newInstance();
- obj.sendSMS("5554","test3");
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- break;
经洗大师清洗后的代码如下:
通过清洗前后的代码我们就可以清楚的看出洗大师在清洗过程就是敏感api的替换过程,
该种工作方式同DroidBox安全项目的APIMonitor(https://code.google.com/p/droidbox/wiki/APIMonitor)工作原理基本相同,都是通过替换敏感api来添加自己的逻辑。
三、结论
通过洗大师清洗前后的代码我们可以得出以下结论:
1、洗大师通过替换敏感API来完成权限的管理。
2、洗大师并不能有效遏制恶意软件。
因为洗大师只能替换直接的API调用,但是恶意程序经常用到的反射,动态加载调用,洗大师都不能有效的处理。