如果看待有米廣告SDK導致應用集體下架事件?

國內新聞參考:SDK疑侵犯用戶隱私:蘋果移除250款相關應用
國外SourceDNA原稿:https://sourcedna.com/blog/20151018/ios-apps-using-private-apis.html


它有沒有作惡,看看它的安卓SDK就知道了。

2015年10月19日晚,國外研究機構SourceDNA發現眾多(200多款)使用有米SDK的APP在收集用戶個人數據,隨即這些APP全部遭蘋果下架處理,這也體現了蘋果公司在隱私保護領域絕不手軟的堅定態度。

有米回應,表示從未在經營過程中採集任何直接的個人身份識別信息,或泄露、兜售任何個人用戶信息」,而且有米的SDK插件只是用於「幫助廣告主、開發者防作弊,而在實現過程中不符蘋果的規定」,而不是「安全漏洞」。


致力於隱私保護的Toolwiz的安全團隊,隨即對有米的安卓SDK進行了深入分析,我們使用了獨立研發的隱私污點追蹤和可疑行為追蹤系統,對於其SDK進行了靜態和動態雙重追蹤,發現其代碼在安卓上,存在以下多個獲得用戶隱私的行為,值得您的關注。

測試版本為V5.3.3,從有米官網下載,包名為YoumiSdk_v5.3.3_2015-10-10.jar。在這個小小的SDK里,有米幾乎動用了所有安卓上公開的或者半公開的手段,竭盡全力在了解你的一切,不知道我們揭開這個大幕後,你有沒有被有米感動。驗證信息如下:

MD5: 33FB25A4D6F4347128FD5DBC5E242C45

SHA1: F838907012DC1818B8943976DC291D8860F8E859

大小: 685312 位元組

1、獲得安裝應用列表。通俗來講,就是有米在追蹤你的手機上安裝了哪些APP。大量的廣告SDK(包括有米),通過知道你裝了哪些APP從而了解你的興趣(或者性趣),從而在它們的廣告平台上對你進行精準畫像,然後把這個信息「賣掉」(也可能自用),最終提供「精準」的廣告。

List localList = paramh.h().getPackageManager().getInstalledPackages(0);

2、獲得系統里所有正在運行的進程。你上9158了嗎?你開快播了嗎?你開美圖秀秀了嗎?你正在手機上干什嘛,有米都知道。有米都知道。有米都知道。重要的話要說三遍。

localObject3 = localActivityManager.getRunningAppProcesses();

3、獲得正在使用的應用。上一個是獲得全部的運行APP列表,這次是當前正在運行的APP,呵呵,有米夠狠。有米夠狠。有米夠狠。

if (Build.VERSION.SDK_INT &< 21) { localObject = ((ActivityManager.RunningTaskInfo)localActivityManager.getRunningTasks(2147483647).get(0)).topActivity; return !paramd.h.equals(((ComponentName)localObject).getPackageName()); }

4、獲得用戶最近使用過的應用程序信息集合。連最近跑過的APP,已經在後台的,有米都不放過。對你深入地分析,全力以赴了解你的隱私,有米真的好有耐心!

PackageManager localPackageManager = paramContext.getPackageManager();
ActivityManager localActivityManager = (ActivityManager)paramContext.getSystemService("activity");
List localList = localActivityManager.getRecentTasks(5, 2);
ActivityInfo localActivityInfo = new Intent("android.intent.action.MAIN").addCategory("android.intent.category.HOME").resolveActivityInfo(localPackageManager, 0);

5、APP使用歷史和統計。這明顯是用安卓5.0才公開的函數,來獲得你的APP的使用習慣(打開次數,使用時常等),不愧是廣告公司出身的谷歌,把這個本來是私有的函數在5.0之後公開了,不遺餘力的讓廣大廣告公司來分析你,了解你一切愛好,包括潛意識。有米也緊緊抓住了這一點哦。

long l = System.currentTimeMillis();
Class localClass1 = Class.forName("android.app.usage.UsageStatsManager");
Object localObject1 = paramContext.getSystemService("usagestats");
Method localMethod1 = localClass1.getMethod("queryUsageStats", new Class[] { Integer.TYPE, Long.TYPE, Long.TYPE });
List localList = (List)localMethod1.invoke(localObject1, new Object[] { Integer.valueOf(4), Long.valueOf(l - paramLong), Long.valueOf(l) });
if ((localList != null) (!localList.isEmpty()))
{
Class localClass2 = Class.forName("android.app.usage.UsageStats");
Method localMethod2 = localClass2.getMethod("getLastTimeUsed", new Class[0]);
Method localMethod3 = localClass2.getMethod("getPackageName", new Class[0]);

}

6、通過網路獲取當前地理位置。這個就再清楚不過了,它在追蹤你的位置,你去了哪裡,在哪裡待的最久,經常出沒在哪裡,有米都知道,當然還有後面更狠的——追蹤你的基站。而你不知道它知道你,它知道你不知道它知道你!

localLocation = localLocationManager.getLastKnownLocation("network");

7、基站定位。這個有沒有夠狠?有沒有?只有你想不到,有米沒有做不到,上帝已經無法阻止有米了!你在哪裡待過,正待在哪裡,有米都獲得了,它到底要幹什麼呢?

localObject = (GsmCellLocation)localTelephonyManager.getCellLocation();

其中中國移動和中國聯通獲取LAC、CID的方式

a = ((GsmCellLocation)localObject).getCid();
b = ((GsmCellLocation)localObject).getLac();

中國電信獲取LAC、CID的方式

localObject = localTelephonyManager.getCellLocation();
Method[] arrayOfMethod = localObject.getClass().getMethods();
if (arrayOfMethod != null)
for (int j = 0; j &< arrayOfMethod.length; j++) { Method localMethod = arrayOfMethod[j]; if (localMethod != null) if (localMethod.getName().equals("getBaseStationId")) c = ((Integer)localMethod.invoke(localObject, new Object[0])).intValue(); else if (localMethod.getName().equals("getNetworkId")) e = ((Integer)localMethod.invoke(localObject, new Object[0])).intValue(); else if (localMethod.getName().equals("getSystemId")) d = ((Integer)localMethod.invoke(localObject, new Object[0])).intValue(); }

8、獲得IMEI。這個是每個手機的唯一識別碼,就像手機的身份證,大量的廣告SDK通過這個ID來確定「你就是你」,然後把這個ID所綁定的全部信息不斷的彙集起來,做成所謂的大數據,然後把你「畫出來」。當然有米在這裡也不免俗的獲得了你的唯一碼,你被鎖定了。

str1 = localTelephonyManager.getDeviceId();


9、獲得Android ID。又一個追蹤你的方式,除非你格式化了你的手機,否則這個碼是不會變的,親。看谷歌官方的說法:在設備首次啟動時,系統會隨機生成一個64位的數字,並把這個數字以16進位字元串的形式保存下來,這個16進位的字元串就是ANDROID_ID,當設備被wipe後該值會被重置。

String str = Settings.Secure.getString(paramContext.getContentResolver(), "android_id");

10、獲得網卡的MAC地址。有米做是真的很縝密啊,在獲得了你的諸多ID號之後,有米又給你加了一道保險,真的是好體貼,好體貼。我突然覺得我手機丟了,不用找警察了,咱找有米吧。

WifiManager localWifiManager = q.c(paramContext);
WifiInfo localWifiInfo = localWifiManager.getConnectionInfo();
String str = localWifiInfo.getMacAddress();

11、MCC+MNC代碼 。這是你的SIM卡運營商,它的國家代碼和運營商網路代碼(IMSI),有米要知道你是在哪個國家,用哪個運營商。

String str3 = localTelephonyManager.getNetworkOperator();

12、 用戶唯一標識,比如GSM網路的IMSI編號。為鎖定你再加一層鐐銬,讓你絕對插翅難飛。

String str4 = localTelephonyManager.getSubscriberId();

13、手機移動終端的網路類型。有米要知道你在用什麼網路,是GSM,還是CDMA,還是WCDMA,還是LTE,總之你是逃不掉了。

int i = localTelephonyManager.getPhoneType();

14.獲得你的手機製造商。你是三星,還是小米,還是酷派。怪不得我們用千元機的,經常看到的廣告就是奧妙洗衣粉,用高端機的就能看到奧迪嗎?奧妙就在這裡。

Field localField = Build.class.getField("MANUFACTURER");

15、感測器(1:加速度;4:迴轉儀;5:亮度)。這個太狠了,你的加速度,它也要知道,你在跑步,還是在做某種運動,有米都要知道,這是一個廣告SDK嗎?我們的隱私權在哪裡呢?

private static void b(Context paramContext, int paramInt)
{
SensorManager localSensorManager = (SensorManager)paramContext.getSystemService("sensor");
Sensor localSensor = localSensorManager.getDefaultSensor(paramInt);
if (localSensor != null)
localSensorManager.registerListener(i, localSensor, 2);
}

16、訪問proc文件夾。這裡面可以訪問進程的狀態,知道你運行的APP當前處於什麼狀態,可是這個相比於下面這個目的,就是小巫見大巫了:/proc/%d/oom_score 通過修改其值為0 ,可防止進程因為內存不足而被系統殺死,這下你明白你的手機為啥耗電了吧,為啥卡頓了吧,這根本不是八核、十六核能解決的啊。

最後總結一下,我們測試的有米安卓SDK,每隔一秒都要統計一下你的狀態,即使系統內存不足也能保證用自己SDK的APP不會被殺死,它幾乎把安卓上關於「你是誰」的全部維度(就差讀取簡訊、讀取通話記錄、讀取通訊錄、讀取上網記錄,讀取搜索記錄,讀取WIFI記錄,讀取相冊)都統計了,相對跟那些「窮凶極惡」的安卓廣告SDK,這已經比較文明的了。


因此我們Toolwiz隱私安全團隊對於有米廣告SDK的隱私保護打分為C+級(最高為A+級別),建議對自己隱私比較敏感的用戶,請慎用所有帶這類SDK的APP(相關列表我們將在最近的文章中),你的隱私會被這些APP上傳到指定的伺服器,但是用途不明。


如果您對我們的分析有任何疑點,或者您希望我們分析某款APP,歡迎發送郵件到James@toolwiz.com。我們將陸續公開全球近100種廣告SDK的內幕,請持續關注我們(微信公眾號:必拓獅)。


有米攤上大事了?有人要扒光他們衣服

扒光移動廣告平台的衣服:滿是虱子


再一次驗證了中國人的聰明,不過總是以不好的結局收場。


作為有米的合作夥伴,我是在20號凌晨四點左右接收到了工作人員的通知,得知一批因嵌入有米SDK的APP被蘋果下架,他們第一時間通知了我們這些開發者先去掉有米SDK,然後申請重新上線。

在上班之後,看到了大批新聞報道了有米SDK侵犯隱私用戶許可權,導致所嵌入有米SDK的APP下架。新聞一直在發酵,對很多普通用戶來說陌生的移動廣告公司進入大眾視野。在看到鋪天蓋地的新聞後,我第一時間登錄有米網站幾次打不開。因為開發者最關心的就是賺錢,而下架了256款嵌入有米SDK的APP,無疑是把有米的大部分渠道都斷掉了。然後聯繫了他們的工作人員,有米工作人員並不知情。


在事故發生兩三個小時後,看到他們貼出了通告,屋漏偏逢連夜雨,有米官網被黑客攻擊。


緊接著發出了關於裝有有米SDK App被蘋果下架的回應。


這次被蘋果下架事件,估計很多移動廣告公司都想去有米那搶客戶搶媒體。畢竟下架的大部分App都是非激勵性質的應用,因為帶有積分牆激勵性質的應用已很難上架到蘋果商店。這些應用主要的廣告形式banner、插屏、視頻廣告等。非激勵廣告性質的APP的流量質量相對含積分牆廣告激勵性性質的應用要好很多。這部分App也是各家移動廣告搶奪的媒體資源。現在含有積分牆廣告的網賺App早一直被蘋果打壓,很多含有積分牆的激勵性質的網賺類應用都會借殼上架蘋果。

媒體對一個移動廣告公司來說是最重要的資源,沒有了媒體流量,就不會有廣告。蘋果這一封殺裝有有米SDK的APP這一舉措,無疑是給有米公司一記重創。同時也給很多移動廣告公司敲了警鐘。

據SourceDNA的研究人員表示,這些iOS應用使用有米的廣告SDK收集了如下信息:

1、安裝在手機上的應用列表

2、iPhone或iPad運行舊版iOS系統時的平台序列號

3、運行新版iOS時的硬體組件列表以及這些組件的序列號

4、與用戶Apple ID關聯的電子郵件地址

根據有米員工的說法是因為用了私有API所以下架了安裝有米SDK的應用,並沒有收集用戶的個人郵箱、手機號碼等私密信息。之後,在有米聯繫了SourceDNA之後,該網站對之前的文章進行了更新,修正了此前有米收集用戶郵箱的說法。

有米官方承認使用的私有API,據了解,有很多第三方廣告平台也在使用私有App。

其實,這些私有API技術也是第三方廣告平台實現廣告的投放優化、媒介數據防刷的方法之一,目的是保障各方利益。

私有API則是指在蘋果官方開發文檔中沒有提供的、可能會被AppStore拒接的編程介面。相信有米SDK事件後,第三方廣告平台不敢輕易使用私有API。如果不通過收集用戶安裝收集的應用列表、序列號等信息,如何標示設備的唯一性,仍然是各個第三方廣告平台的所面臨的最主要的技術性難題。


之前有央視曝光有米收集用戶的信息,後來有米又厚顏無恥的發布說不會搜集不會侵犯,現在直接給蘋果打臉了,其實國內還有很多APP都存在這風險無論安卓系統或者蘋果系統


我想知道被下架的到底是哪些APP,看看我的手機里有沒有這些該死的廣告。


不知道,但我就不喜歡我看視頻錢的那幾分鐘有米的廣告


不怕神一樣的對手,就怕豬一樣的隊友。

有米用實際行動印證了這句話啊。。。


每個企業上市前總會有各種不利消息,但我相信有米。


推薦閱讀:

Office for iPad 的定價為什麼是免費下載,收費開啟編輯功能?
蘋果 App Store 免費 App 排名的標準是什麼?
ASO 關鍵詞的上限可以設置多少個,如何通過版本更新讓 App 覆蓋到更多的關鍵詞呢?
AppStore關鍵詞放在標題中後 是否在關鍵字列表中可以刪掉而不影響搜索排名?
APP Store中版本更新對ASO的影響有多大?

TAG:移動互聯網 | 廣告 | AppStore | 隱私安全 |