android 廣告平臺—殺毒軟件是如何知道是否有廣告的

曾經在應用裏使用過有米和萬普的廣告,先簡單介紹下我所知道的在應用裏接入這些廣告平臺的方式。

一般分爲以下幾個步驟:

1、引入jar包(必需)

2、AndroidManifest文件中配置權限(必需)

3、AndroidManifest文件中添加必要的Activity聲明或者Service、Receiver(必需)

4、添加Publisher ID(可選)

   形如:<meta-data android:value="999999#123" android:name="DOMOB_PID" /> (多盟)

5、使用xml或代碼顯示廣告(必需)

通過研究以上幾個步驟,現提供三種掃描廣告應用的方法:1、獲取AndroidManifest文件中配置的元數據(即meta-data),分析key值是否是某一廣告平臺(有的廣告平臺有特定的標識,如多盟的就是DOMOB_PID)。2、掃描AndroidManifest文件中聲明的Activity或Service、Receiver,與收集到的廣告平臺的廣告行爲特徵對比。3、掃描應用中所有Class,與收集到的廣告平臺的廣告行爲特徵對比。然後逐條分析各種方法的可行性,先分析第一種方法:  1、假如使用某個廣告平臺,不需要配置元數據,那麼這種方法就無法掃描到(所以將第4步標爲可選)  2、假如應用中只配置了元數據,並未引入jar包(即不產生廣告行爲),但是這種方法掃描到了,所以也是不對的。所以第一種方法不可行。再來分析第二種方法:    獲取Manifest文件裏聲明的Activity,然後與收集到的廣告Activity匹配    假如我只聲明瞭Activity,並沒有引入jar包(未產生廣告行爲),那麼掃描出的結果肯定也是有問題的。另外要注意廣告特徵庫的收集,收集的越多,掃描結果越準確。不過有些廣告還會以他們方式發送廣告,比如有米,它會在AndroidManifest文件裏註冊Service和Receiver,目的可想而知,所以這種方法掃描也會有漏網之魚的。現提供相關代碼: 廣告實體類代碼如下:
public class AdModel implements Serializable {    private static final long serialVersionUID = 1L;    /**    * @Fields ad_name : TODO 廣告服務商    */    private String ad_name;    /**    * @Fields ad_type : TODO 廣告類型    */    private int ad_type;    public AdModel(String paramString, int paramInt) {        this.ad_name = paramString;        this.ad_type = paramInt;    }    public String getAd_name() {        return this.ad_name;    }    public int getAd_type() {        return this.ad_type;    }    public void setAd_name(String paramString) {        this.ad_name = paramString;    }    public void setAd_type(int paramInt) {        this.ad_type = paramInt;    }}

  

廣告管理工具類:(廣告特徵庫,通過反編譯惡意廣告攔截專家獲得)
public class AdManagerUtil {    public static Map<String, AdModel> adList = new HashMap();    static {        adList.put("com.adsmogo.adview.AdsMogoWebView", new AdModel("芒果廣告", 0));        adList.put("com.lmmob.ad.sdk.LmMobAdWebView", new AdModel("力美", 0));        adList.put("com.mobisage.android.MobiSageActivity", new AdModel("艾德思奇",                0));         adList.put("net.youmi.android.AdActivity", new AdModel("有米", 0));        adList.put("net.youmi.android.AdBrowser", new AdModel("有米", 0));          adList.put("cn.domob.android.ads.DomobActivity", new AdModel("多盟", 0));        adList.put("com.adwo.adsdk.AdwoAdBrowserActivity", new AdModel("安沃", 0));        adList.put("com.vpon.adon.android.WebInApp", new AdModel("Vpo", 0));        adList.put("com.google.ads.AdActivity", new AdModel("AdMob", 0));        adList.put("com.adchina.android.ads.views.AdBrowserView", new AdModel(                "AdChina", 0));        adList.put("com.winad.android.ads.VideoPlayerActivity", new AdModel(                "贏告", 0));        adList.put("com.wiyun.common.SimpleBrowserActivity", new AdModel("微雲",                0));        adList.put("com.greystripe.android.sdk.AdContentProvider", new AdModel(                "Greystripe", 0));        adList.put("com.mdotm.android.ads.MdotmLandingPage", new AdModel(                "MdotM", 0));        adList.put("com.millennialmedia.android.MMAdViewOverlayActivity",                new AdModel("Millennial", 0));        adList.put("com.mt.airad.MultiAD", new AdModel("AirAD", 0));        adList.put("com.wooboo.adlib_android.AdActivity", new AdModel("哇棒", 0));        adList.put("com.tencent.mobwin.MobinWINBrowserActivity", new AdModel(                "聚贏", 0));        adList.put("com.baidu.mobads.AppActivity", new AdModel("百度", 0));        adList.put("com.umengAd.android.UmengAdDetailActivity", new AdModel(                "友盟", 0));        adList.put("com.fractalist.sdk.base.sys.FtActivity", new AdModel("飛雲",                0));        adList.put("net.miidi.ad.banner.AdBannerActivity",                new AdModel("米迪 ", 0));        adList.put("cn.appmedia.ad.AdActivity", new AdModel("Appmedia", 0));        adList.put("com.suizong.mobplate.ads.AdActivity", new AdModel("隨蹤", 0));        adList.put("com.inmobi.androidsdk.IMBrowserActivity", new AdModel(                "InMobi", 0));        adList.put("com.telead.adlib_android.AdActivity", new AdModel("天翼", 0));        adList.put("com.l.adlib_android.AdBrowseActivity", new AdModel("百分聯通",                0));        adList.put("cn.aduu.adsdk.AdSpotActivity", new AdModel("aduu", 0));        adList.put("com.donson.momark.activity.AdActivity", new AdModel(                "Momark", 0));        adList.put("com.doumob.main.WebViewActivity", new AdModel("Doumob", 0));        adList.put("com.mobile.app.adlist", new AdModel("第七傳媒", 0));        adList.put("com.fractalist.sdk.base.sys.FtActivity", new AdModel("飛雲",                0));        adList.put("com.adzhidian.view.WebViewActivity", new AdModel("指點傳媒", 0));        adList.put("com.huawei.hiad.core.BrowserActivity", new AdModel("華爲聚點",                0));        adList.put("", new AdModel("", 0));        adList.put("", new AdModel("", 0));        adList.put("", new AdModel("", 0));        adList.put("com.adchina.android.ads.views.FullScreenAdActivity",                new AdModel("AdChina", 3));        adList.put("com.lmmob.ad.sdk.LmMobFullImageActivity", new AdModel("力美",                3));        adList.put("com.wooboo.adlib_android.FullActivity",                new AdModel("哇棒", 3));        adList.put("com.adwo.adsdk.AdwoSplashAdActivity", new AdModel("安沃", 3));        adList.put("com.telead.adlib_android.FullActivity",                new AdModel("天翼", 3));        adList.put("cn.aduu.adsdk.AdSpotActivity", new AdModel("優友", 3));        adList.put("com.fractalist.sdk.base.sys.FtActivity", new AdModel("飛雲",                3));        adList.put("", new AdModel("", 3));        adList.put("", new AdModel("", 3));        adList.put("", new AdModel("", 3));        adList.put("net.cavas.show.MainLoadCavasActivity", new AdModel("芒果", 1));        adList.put("com.adsmogo.offers.adapters.WanpuAdView", new AdModel("萬普",                1));        adList.put("net.miidi.ad.wall.AdWallActivity", new AdModel("米迪", 1));        adList.put("com.dianle.DianleOfferActivity", new AdModel("點樂 ", 1));        adList.put("com.lmmob.sdk.AdListActivity", new AdModel("力美", 1));        adList.put("com.yjfsdk.advertSdk.AdverWallActivity", new AdModel("易積分",                1));        adList.put("com.winad.android.wall.MoreAdActivity",                new AdModel("贏告", 1));        adList.put("com.telead.adlib.adwall.TeleadWallActivity", new AdModel(                "天翼", 1));        adList.put("com.mobile.app.adlist.GEList", new AdModel("第七傳媒", 1));        adList.put("com.juzi.main.TheAdVirtualGoods", new AdModel("桔子平臺", 1));        adList.put("com.fractalist.sdk.base.sys.FtActivity", new AdModel("飛雲",                1));        adList.put("com.waps.OffersWebView", new AdModel("萬普世紀", 1));        adList.put("com.wiyun.offer.OfferList", new AdModel("微雲", 1));        adList.put("com.etonenet.pointwall.EtonenetPointWallActivity",                new AdModel("移通", 1));        adList.put("", new AdModel("", 1));        adList.put("", new AdModel("", 1));        adList.put("com.winad.android.adwall.push.PushContentActivity",                new AdModel("贏告", 2));        adList.put("com.bypush.PushActivity", new AdModel("艾普 ", 2));        adList.put("com.kuguo.ad.MainActivity", new AdModel("酷果", 2));        adList.put("cn.aduu.adsdk.AduuPushAdReceiver", new AdModel("優友", 2));        adList.put("com.iadpush.adp.IA", new AdModel("IadPush", 2));        adList.put("com.mobile.app.adpush.GELaunchNotify", new AdModel("第七傳媒",                2));        adList.put("com.fractalist.sdk.base.sys.FtActivity", new AdModel("飛雲",                2));        adList.put("com.adzhidian.view.WebViewActivity", new AdModel("指點傳媒", 2));        adList.put("com.longmob.service.LongActivity", new AdModel("掌龍廣告平臺", 2));        adList.put("cn.jpush.android.ui.PushActivity", new AdModel("極光推送", 2));        adList.put("", new AdModel("", 2));        adList.put("", new AdModel("", 2));        adList.put("", new AdModel("", 2));    }}

  

 具體掃描過程:
List<App> appList = new ArrayList<App>();List<PackageInfo> packages = packageManager.getInstalledPackagesPackageManager.GET_ACTIVITIES );                for (int i = 0; i < packages.size(); i++) {                        PackageInfo packageInfo = packages.get(i);                        /**-------可能發送廣告------**/                        ActivityInfo[] arrayOfActivityInfo = packageInfo.activities;                        if(arrayOfActivityInfo!=null)                        {                            for(ActivityInfo activityInfo:arrayOfActivityInfo)                            {                                if(AdManagerUtil.adList.containsKey(activityInfo.name))                                {                                    appinfo.setContainAd(true);                                    appList.add(appinfo);                                }                            }                        }}

appList包含的就是可能帶廣告的應用。

最後分析第三種方法:    未完待續....
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章