Android系统扫描带广告应用的方法
声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: Android系统扫描带广告应用的方法
android上应用
针对上述迹象,对目前带广告检测功能的应用进行试验:
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(inti =0; i < count; i++) {PackageInfo pi = packageList.get(i);if(pi.versionName ==null)continue;//判断该软件包是否在/data/app目录下
(2)获取单个package内所有的class:File file =newFile("/data/app/"+ pi.packageName +".apk");if(!file.exists())systemInstalledApk++;userInstalledApk++;/*** 应用程序的名字*/applicationName= pi.applicationInfo.loadLabel(packagemgr).toString();packageName = pi.packageName;}
在PC端上: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();
}
实现实现上述两点也容易,也不容易。
完全自己的程序的话,可以考虑解析class.dex文件。这个涉及去了解dex文件的格式,然后读取响应的class内容。
如果仅仅是做一个自动化工具的话,可以考虑使用dexdump.exe程序去解析class.dex文件。
剩下的工作可以使,C应用,MFC,Java,shell脚本等等统统可以搞定。
剩下的一个问题就是广告插件特征库的收集,收集越全,扫描出来的广告插件就可以越准确。android广告扫描 广告拦截 相关原理和处理方式可以继续查看相关博文,谢谢!
声明: 本文由( 魔豆先生 )原创编译,转载请保留链接: Android系统扫描带广告应用的方法