蜻蜓FM涉嫌诈骗投资人和广告主源代码剖析
引用自:https://github.com/cryfish2015/QingTingCheat
本文主要內(nèi)容,引用自知乎的這篇文章:如何評價(jià)蜻蜓 FM 偽造用戶活躍度等數(shù)據(jù)
感謝“左莫”、“任正”等熱心正義的網(wǎng)友--左莫,任正的最早的回答猜測已經(jīng)被蜻蜓FM通過創(chuàng)新工場關(guān)系讓知乎刪除了,而且此貼已經(jīng)鎖定,蜻蜓FM還在不停贊下面無關(guān)緊要的垃圾評論。希望大家一起站出來抵制這種造假和疑似詐騙的行為。
蜻蜓FM是一款音頻app,最近我反編譯了他的源代碼,主要原因是最近有篇文章:
不過蜻蜓FM大量的刪帖很多已經(jīng)死鏈了,太無恥!還活著的鏈接:
蜻蜓造假黑科技新聞
充滿著好奇,黑科技是怎樣做到的呢??
蜻蜓FM是如何提高DAU,欺騙友盟,talkingdata
摘要
看了蜻蜓FM的源代碼,先總結(jié)一下它整個(gè)的工作原理:
作為一個(gè)Android程序員,實(shí)在是看不慣這種行為,順便提醒第三方數(shù)據(jù)公司和投資人,防止一些像蜻蜓FM這樣無恥的創(chuàng)業(yè)公司欺騙大家。
具體步驟
具體聽我細(xì)細(xì)道來:
首先來看一下我們打開蜻蜓App之后,它在后臺跑的進(jìn)程的數(shù)量:?
5個(gè)進(jìn)程,你沒有看錯(cuò)是5個(gè)進(jìn)程!!!而且這幾個(gè)進(jìn)程相互守護(hù),無法徹底殺死,十雙筷子喲,牢牢抱成團(tuán)。到目前為止,從來沒見過一款應(yīng)用會起這么多進(jìn)程。為了知道他為什么要啟動這么多進(jìn)程,我們懷著好奇的心,反編譯了蜻蜓的app。結(jié)果發(fā)現(xiàn)了一些很奇怪的事情。
第一件事就是,他們的App代碼居然沒有混淆,開發(fā)人員真省事,閱讀代碼如同閱讀源碼。在我們閱讀源碼的時(shí)候,我們發(fā)現(xiàn)了今天的主角,關(guān)鍵進(jìn)程:NotificationService?
manifest.xml里面注冊為:
<service android:name=".NotificationService" android:process=":notification"><intent-filter><action android:name="fm.qingting.qtradio.NotificationService" /><category android:name="android.intent.category.DEFAULT" /></intent-filter> </service>當(dāng)然他也是個(gè)小強(qiáng)進(jìn)程,無法徹底殺死!
通過反編譯我們發(fā)現(xiàn): 第一步: NotificationService 會在onCreate方法里面調(diào)用MessageManager類的restartThread方法。
而restartThread方法中會啟動一個(gè)叫MessageThread的線程
第二步: 我們看看神奇的MessageThread做了一些什么事
我們發(fā)現(xiàn)一個(gè)叫"執(zhí)行普羅米修斯"execPrometheus的方法,智慧之神,看名字就覺得牛逼的一腿!我們再來看看他的實(shí)現(xiàn),它最后調(diào)用了一個(gè)神奇的方法doPrometheus,當(dāng)然中間有一些條件判斷,比如多長時(shí)間“普羅米修斯”一下,例如:
最后我們來看看這個(gè)“普羅米修斯”的最后實(shí)現(xiàn)方法: 啟動了一個(gè)ShieldActivity,當(dāng)我們閱讀ShieldActivity的源碼驚奇的發(fā)現(xiàn),這個(gè)activity居然什么事都沒做,是個(gè)無界面的activity,類似透明窗口,并且2s之后銷毀結(jié)束自己。
看ShieldActivity類源代碼
那這個(gè)打開的activity什么要做這個(gè)事呢?讓你觸目驚心,高DAU和啟動次數(shù)的神話誕生了:
為了偽造DAU,欺騙umeng,talkingdata,艾瑞等知名第三方數(shù)據(jù)公司,增加虛擬活躍用戶,他們智慧到了神的地步。自啟動無窗口的透明activity界面調(diào)第三方數(shù)據(jù)公司的API。 為了證實(shí)這點(diǎn),我還專門寫了一個(gè)demo,在后臺啟動一個(gè)透明界面,發(fā)現(xiàn)umeng確實(shí)會把它算為活躍用戶。今天我才發(fā)現(xiàn),原來App還能這樣提高自己的活躍用戶,投資人的錢是這么好騙,這招確實(shí)高明,實(shí)在無言以對。
對源代碼感興趣的:
看普羅米修斯實(shí)現(xiàn)源代碼
蜻蜓FM是如何提高廣告展示量和點(diǎn)擊量欺騙秒針,DoubleClick
摘要
繼續(xù)閱讀蜻蜓FM的源代碼,會看到宙斯類,真有點(diǎn)扛不住,蜻蜓FM你太逆天了,你要?jiǎng)?chuàng)造整個(gè)世界啊!不多說了,直接上菜。 既發(fā)現(xiàn)蜻蜓牛逼的提升日活普羅米修斯Prometheus—智慧之神后,我們發(fā)現(xiàn)蜻蜓又一個(gè)牛逼閃閃的服務(wù)Zeus(宙斯,牛逼的上帝,無所不能)。蜻蜓你能讓我的小心臟平定一會兒嗎,又是上演好萊塢大片的節(jié)奏。
宙斯是蜻蜓FM用來欺騙廣告主和第三方廣告數(shù)據(jù)監(jiān)測公司(秒針,admaster,doubleclick等)的系統(tǒng):
不揭露實(shí)在不行了,我們來看看里面到底干了什么?
步驟
看zeus類源代碼
Zeus類里面主要新建了一個(gè)WebView(瀏覽器)對象,好像這并沒有什么問題,但是你仔細(xì)觀察發(fā)現(xiàn),這個(gè)神奇的Zeus類,它并沒有把webview對象添加到任何可見化界面上,比如常見的Activity/Fragment等。 那它為什么要在后臺內(nèi)存中放一個(gè)webview呢?要知道android的webview本身實(shí)現(xiàn)的并不好,存在大量的bug,開發(fā)過android的程序員大概都知道這點(diǎn)。這東西,耗電,耗內(nèi)存。 繼續(xù)分析,我發(fā)現(xiàn)兩個(gè)關(guān)鍵函數(shù)setZeusUrl()和startZeus(),兩個(gè)函數(shù)的實(shí)現(xiàn)如下:
看到這個(gè)我都驚呆了,原來偉大的宙斯是用來在后臺偷偷的打開網(wǎng)頁鏈接的。打開的網(wǎng)頁鏈接用戶還是看不到的。
那他為什么要這么做呢,對蜻蜓FM又有什么好處呢?
蜻蜓FM用一個(gè)看不見的瀏覽器打開廣告主的網(wǎng)站,接著用程序模擬用戶行為點(diǎn)擊。廣告的展示率和點(diǎn)擊率,頓時(shí)提高了一個(gè)數(shù)量級,原來廣告商的錢也這么好騙! 看到這里,我真是佩服蜻蜓FM的老板,銷售,產(chǎn)品,程序員,你們確實(shí)很聰明,我怎么就沒想到呢?聰明的人賺錢真的很容易,違法么,不知道,我們改天都投遞簡歷到蜻蜓吧,漲姿勢。
悲催的DoubleClick等廣告數(shù)據(jù)監(jiān)測公司都被這位親密的伙伴蒙在鼓里,要阻止這樣的流氓公司,廣告主紛紛站起來說臣妾做不到啊,臣妾不給你上了! DoubleClick是美國一家網(wǎng)絡(luò)廣告服務(wù)商,主要從事網(wǎng)絡(luò)廣告管理軟件開發(fā)與廣告服務(wù),對網(wǎng)絡(luò)廣告活動進(jìn)行集中策劃、執(zhí)行、監(jiān)控和追蹤。
隨時(shí)宙斯源碼閱讀的進(jìn)一步深入,我越來越不敢相信自己的眼睛,我們再來看看他們給第三方廣告公司(比如秒針、AdMaster之類)發(fā)送數(shù)據(jù)的類ThirdTracker,同樣有驚人的發(fā)現(xiàn)。 ThirdTracker里面有給各大第三方廣告公司發(fā)送數(shù)據(jù)的代碼邏輯,如下:
從上圖一看,各大第三方廣告數(shù)據(jù)公司齊聚宙斯系統(tǒng),我們和騙神蜻蜓FM一起創(chuàng)造世界吧。
我們再來看看這些廣告是怎么被蜻蜓FM觸發(fā)啟動的:
這個(gè)方法的調(diào)用者為RootNode類的onClockTime方法(鬧鐘 吐槽:這位開發(fā)兄弟,你能不能不起這么直白的名字,你老板的內(nèi)褲都被你暴露了),但從這個(gè)方法的名字來看,就感覺這個(gè)類有問題,是不是每間隔一段時(shí)間,后臺偷偷給廣告商發(fā)送數(shù)據(jù)呢?
onClockTime調(diào)用者為ClockManager的dispatchClockEvent方法,如下:
那dispatchClockEvent方法又是誰調(diào)用的呢?大家捂好小心臟,見證奇跡的時(shí)刻到了,宙斯也是永活的:
宙斯真是名副其實(shí),從富有的廣告主那里拿到了錢,做成了完美的盈利模式。報(bào)表給投資人一看,完美!蜻蜓FM你就是明天的BAT啊!你是宙斯,你創(chuàng)造了中國互聯(lián)網(wǎng)未來的“神話”,廣告主和投資人就任你欺騙,任你玩,你要把中國移動互聯(lián)網(wǎng)做成什么樣的模式!
蜻蜓線上最新版apk v5.0.1反編譯源碼教程
apk不會造假的,google簽名的,造假得破解google簽名
第一步
首先我們直接用一個(gè)解壓apk(開發(fā)過android應(yīng)該知道apk其實(shí)就是個(gè)壓縮文件),解壓之后拷貝出里面classes.dex文件待用。
第二步
*下載dex2jar工具,最新版下載鏈接dex2jar下載
*解壓之后,打開cmd,進(jìn)入解壓目錄,運(yùn)行命令:
d2j-dex2jar.bat classes.dex(上一步解壓的) jarpath(反編譯dex后的文件目錄)
example:
d2j-dex2jar.bat c:\user\qting\classes.dex c:\user\qting\?
*反編譯之后,會得到一個(gè)classes-dex2jar.jar文件,待用。
第三步
*下載JD-GUI(反編譯jar神器),最新版下載鏈接JD-GUI下載
*解壓之后,雙擊打開,直接把上一步得到的的classes-dex2jar.jar文件直接拖入JD-GUI里面,你就可以隨意查看蜻蜓的源碼了。
常見問題
1. 蜻蜓FM這么刷廣告,為什么監(jiān)測不到?
蜻蜓FM通過自啟動的方式增加了UV,先刷了DAU,使得DAU幾乎就是裝機(jī)量。廣告也是一樣。UV增加,PV/UV比并沒有顯示異常。而且他增加了很多隨機(jī)參數(shù),并控制好比率,所有的一切高明之處就是想模仿真人的行為。
2. 進(jìn)程多,自啟動的傷害性
所有自啟動首先都是耍流氓。不過android自啟動確實(shí)是很正常的事情,很多時(shí)候用得好都是為了服務(wù)于用戶體驗(yàn)。其實(shí)這個(gè)并不怎么耗電,只有打開webview的操作才是耗電的。
Summary
蜻蜓FM的Android程序員難道你們的節(jié)操都碎了么??沒有節(jié)操的你們確實(shí)很文藝--普羅米修斯,宙斯,還有阿波羅,你們是神一樣的團(tuán)隊(duì)! 史上最牛逼造假App蜻蜓FM神一般的數(shù)據(jù)造假手段,讓投資人和廣告主欲哭無淚,讓中國整個(gè)互聯(lián)網(wǎng)都漲姿勢了。
轉(zhuǎn)載于:https://www.cnblogs.com/zjoch/p/4952978.html
總結(jié)
以上是生活随笔為你收集整理的蜻蜓FM涉嫌诈骗投资人和广告主源代码剖析的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CKEditor上传图片—配置CKFin
- 下一篇: [LintCode] Wildcard