当前位置:操作系统 > 安卓/Android >>

Android系统扫描带广告应用的方法

android上应用广告检测,广告检查,广告扫描,广告杀手,广告插件杀手的应用甚多,但是他们采用了什么原理来进行的呢,今天进行深入剖析。
 
在反编译带广告的apk的包后,会发下如下特征:
 
1. manifest.xml文件中有对各个activity的声明,其中包含了广告插件的窗口;
 
2.广告插件是一个单独的jar包,在混淆中,proguard.cfg文件中必须对public的类和方法做相应的keep处理。
 
所以,在反编译后的包里面依然可以找到广告插件对应的包名。
 
 
针对上述迹象,对目前带广告检测功能的应用进行试验:
 
1.将待扫描的APK打包进广告插件,给“广告扫描工具”进行扫描。
 
2.在manifest.xml中声明一些广告平台使用的activity。
 
LBE和360对广告插件的扫描结果不大一样,LBE能扫描数来的相对多一些。
 
 
 
测试结果如下:
 
方法1能扫描出来。
 
方法2不能扫描出来。
 
 
 
所以,在此也打算用包名,类名匹配的方法来进行广告插件扫描。在具体的广告插件扫描方案是:
 
(1) 列出系统安装的所有apk;
 
(2)列出每个apk使用的所有class;
 
(3)单个class与广告插件特征库进行匹配;
 
 
 
在android系统上
 
(1)获取所有安装的包的代码:
 
PackageManager packagemgr= getPackageManager();
 
List<PackageInfo> packageList= packagemgr.getInstalledPackages(0);
count = packageList.size();
for(int i = 0; i < count; i++) {
    PackageInfo pi = packageList.get(i);
    if (pi.versionName == null)
        continue;
    
    //判断该软件包是否在/data/app目录下
    File file = new File( "/data/app/" +  pi.packageName + ".apk");
    if(!file.exists())
              systemInstalledApk++;
    userInstalledApk++;
    /**
     * 应用程序的名字
     */
    applicationName = pi.applicationInfo.loadLabel(packagemgr).toString();
         packageName = pi.packageName;
}
(2)获取单个package内所有的class:
try {
path = context.getPackageManager().getApplicationInfo(packageName, 0).sourceDir;// 获得某个程序的APK路径
} catch (NameNotFoundException e) {
e.printStackTrace();
}
try {
DexFile dexFile = new DexFile(path);// get dex file of APK
Enumeration<String> entries = dexFile.entries();
while (entries.hasMoreElements()) {// travel all classes
String className = (String) entries.nextElement();
}
 
} catch (IOException e) {
e.printStackTrace();
}
 
 
 
在PC端上:
实现实现上述两点也容易,也不容易。
 
完全自己的程序的话,可以考虑解析class.dex文件。这个涉及去了解dex文件的格式,然后读取响应的class内容。
 
如果仅仅是做一个自动化工具的话,可以考虑使用dexdump.exe程序去解析class.dex文件。
 
剩下的工作可以使,C应用,MFC,Java,shell脚本等等统统可以搞定。
 
 
 
剩下的一个问题就是广告插件特征库的收集,收集越全,扫描出来的广告插件就可以越准确。android广告扫描 广告拦截 相关原理和处理方式可以继续查看相关博文,谢谢!
 
 
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,