1. 程式人生 > >蜻蜓FM 涉嫌詐騙投資人和廣告主原始碼剖析

蜻蜓FM 涉嫌詐騙投資人和廣告主原始碼剖析

感謝“左莫”、“任正”等熱心正義的網友--左莫,任正的最早的回答猜測已經被蜻蜓FM通過創新工場關係讓知乎刪除了,而且此貼已經鎖定,蜻蜓FM還在不停贊下面無關緊要的垃圾評論。希望大家一起站出來抵制這種造假和疑似詐騙的行為。

蜻蜓FM是一款音訊app,最近我反編譯了他的原始碼,主要原因是最近有篇文章:

reason

不過蜻蜓FM大量的刪帖很多已經死鏈了,太無恥!還活著的連結:

充滿著好奇,黑科技是怎樣做到的呢??

蜻蜓FM是如何提高DAU,欺騙友盟,talkingdata

摘要

看了蜻蜓FM的原始碼,先總結一下它整個的工作原理:

  1. 後臺偷偷啟動程序,開到讓使用者電量飛奔的最大限度,使得神蜻蜓FM在後臺永活,作為android的我終於頓悟:為嘛老子的電量老是會這麼快用完。
  2. 永活的蜻蜓FM,會定時地執行“普羅米修斯神邏輯”,就是狂刷每日活躍使用者數,祕密就是:開啟使用者看不到的透明介面,即使是使用者在閉屏狀態,這個神介面也會開啟。
  3. “普羅米修斯神邏輯”執行時會給我們公正的第三方資料公司,發“使用者打開了蜻蜓FM應用”這條通知,結果,第三方資料統計裡,日活又加一個。
  4. 蜻蜓FM接著將他的日活資料給到投資人,看看俺的1000萬DAU,比QQ音樂還牛逼,砸個幾億吧。
  5. 悲催的投資人,掏出了大筆的鈔票給蜻蜓FM。

作為一個Android程式設計師,實在是看不慣這種行為,順便提醒第三方資料公司和投資人,防止一些像蜻蜓FM這樣無恥的創業公司欺騙大家。

具體步驟

具體聽我細細道來:

首先來看一下我們開啟蜻蜓App之後,它在後臺跑的程序的數量: qtprocess

5個程序,你沒有看錯是5個程序!!!而且這幾個程序相互守護,無法徹底殺死,十雙筷子喲,牢牢抱成團。到目前為止,從來沒見過一款應用會起這麼多程序。為了知道他為什麼要啟動這麼多程序,我們懷著好奇的心,反編譯了蜻蜓的app。結果發現了一些很奇怪的事情。

第一件事就是,他們的App程式碼居然沒有混淆,開發人員真省事,閱讀程式碼如同閱讀原始碼。在我們閱讀原始碼的時候,我們發現了今 qtprocess

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>

當然他也是個小強程序,無法徹底殺死!

通過反編譯我們發現: 第一步: NotificationService 會在onCreate方法裡面呼叫MessageManager類的restartThread方法。

qtprocess

而restartThread方法中會啟動一個叫MessageThread的執行緒

qtprocess

第二步: 我們看看神奇的MessageThread做了一些什麼事

qtprocess

我們發現一個叫"執行普羅米修斯"execPrometheus的方法,智慧之神,看名字就覺得牛逼的一腿!我們再來看看他的實現,它最後呼叫了一個神奇的方法doPrometheus,當然中間有一些條件判斷,比如多長時間“普羅米修斯”一下,例如:

qtprocess

最後我們來看看這個“普羅米修斯”的最後實現方法: 啟動了一個ShieldActivity,當我們閱讀ShieldActivity的原始碼驚奇的發現,這個activity居然什麼事都沒做,是個無介面的activity,類似透明視窗,並且2s之後銷燬結束自己。

qtprocess

那這個開啟的activity什麼要做這個事呢?讓你觸目驚心,高DAU和啟動次數的神話誕生了:

qtprocess

為了偽造DAU,欺騙umeng,talkingdata,艾瑞等知名第三方資料公司,增加虛擬活躍使用者,他們智慧到了神的地步。自啟動無視窗的透明activity介面調第三方資料公司的API。 為了證實這點,我還專門寫了一個demo,在後臺啟動一個透明介面,發現umeng確實會把它算為活躍使用者。今天我才發現,原來App還能這樣提高自己的活躍使用者,投資人的錢是這麼好騙,這招確實高明,實在無言以對。

對原始碼感興趣的:

蜻蜓FM是如何提高廣告展示量和點選量欺騙秒針,DoubleClick

摘要

繼續閱讀蜻蜓FM的原始碼,會看到宙斯類,真有點扛不住,蜻蜓FM你太逆天了,你要創造整個世界啊!不多說了,直接上菜。 既發現蜻蜓牛逼的提升日活普羅米修斯Prometheus—智慧之神後,我們發現蜻蜓又一個牛逼閃閃的服務Zeus(宙斯,牛逼的上帝,無所不能)。蜻蜓你能讓我的小心臟平定一會兒嗎,又是上演好萊塢大片的節奏。

宙斯是蜻蜓FM用來欺騙廣告主和第三方廣告資料監測公司(秒針,admaster,doubleclick等)的系統:

  1. 在使用者的手機上會頻頻開啟非常耗記憶體和電量的元件,webview—瀏覽器,將它設定到最小化,使用者肉眼看不到。
  2. 在看不到的webview—瀏覽器裡,蜻蜓FM偷偷的打開了廣告主廣告圖片
  3. 蜻蜓FM偷偷的使用者程式點選了這個廣告圖片
  4. 將開啟和點選的事件發給了第三方廣告資料監測公司
  5. 廣告主掏腰包的時候,根據第三方資料,廣告的展示量,點選數量被刷的好的離譜,連連稱讚蜻蜓FM資料一級棒,點選率,轉化率高,1千萬花的值,下次我還找你合作哦,QQ音樂的合約免談了
  6. 蜻蜓FM老闆,銷售,產品,技術,投資人拿到1千萬後,笑的合不攏嘴,發獎金吧,還等什麼呢,這錢不就跟撿到的一樣麼?不知道你們這樣詐騙合作方,是否睡得心安理得呢?

不揭露是在不行了,我們來看看裡面到底幹了什麼?

步驟

qtprocess

Zeus類裡面主要新建了一個WebView(瀏覽器)物件,好像這並沒有什麼問題,但是你仔細觀察發現,這個神奇的Zeus類,它並沒有把webview物件新增到任何可見化介面上,比如常見的Activity/Fragment等。 那它為什麼要在後臺記憶體中放一個webview呢?要知道android的webview本身實現的並不好,存在大量的bug,開發過android的程式設計師大概都知道這點。這東西,耗電,耗記憶體。 繼續分析,我發現兩個關鍵函式setZeusUrl()和startZeus(),兩個函式的實現如下:

qtprocessqtprocess

看到這個我都驚呆了,原來偉大的宙斯是用來在後臺偷偷的開啟網頁連結的。開啟的網頁連結使用者還是看不到的。

那他為什麼要這麼做呢,對蜻蜓FM又有什麼好處呢?

qtprocess

蜻蜓FM用一個看不見的瀏覽器開啟廣告主的網站,接著用程式模擬使用者行為點選。廣告的展示率和點選率,頓時提高了一個數量級,原來廣告商的錢也這麼好騙! 看到這裡,我真是佩服蜻蜓FM的老闆,銷售,產品,程式設計師,你們確實很聰明,我怎麼就沒想到呢?聰明的人賺錢真的很容易,違法麼,不知道,我們改天都投遞簡歷到蜻蜓吧,漲姿勢。

悲催的DoubleClick等廣告資料監測公司都被這位親密的夥伴矇在鼓裡,要阻止這樣的流氓公司,廣告主紛紛站起來說臣妾做不到啊,臣妾不給你上了! DoubleClick是美國一家網路廣告服務商,主要從事網路廣告管理軟體開發與廣告服務,對網路廣告活動進行集中策劃、執行、監控和追蹤。

qtprocess

隨時宙斯原始碼閱讀的進一步深入,我越來越不敢相信自己的眼睛,我們再來看看他們給第三方廣告公司(比如秒針、AdMaster之類)傳送資料的類ThirdTracker,同樣有驚人的發現。 ThirdTracker裡面有給各大第三方廣告公司傳送資料的程式碼邏輯,如下:

qtprocess

從上圖一看,各大第三方廣告資料公司齊聚宙斯系統,我們和騙神蜻蜓FM一起創造世界吧。

我們再來看看這些廣告是怎麼被蜻蜓FM觸發啟動的:

qtprocess

這個方法的呼叫者為RootNode類的onClockTime方法(鬧鐘 吐槽:這位開發兄弟,你能不能不起這麼直白的名字,你老闆的內褲都被你暴露了),但從這個方法的名字來看,就感覺這個類有問題,是不是每間隔一段時間,後臺偷偷給廣告商傳送資料呢?

qtprocess

onClockTime呼叫者為ClockManager的dispatchClockEvent方法,如下:

qtprocess

那dispatchClockEvent方法又是誰呼叫的呢?大家捂好小心臟,見證奇蹟的時刻到了,宙斯也是永活的:

qtprocess

宙斯真是名副其實,從富有的廣告主那裡拿到了錢,做成了完美的盈利模式。報表給投資人一看,完美!蜻蜓FM你就是明天的BAT啊!你是宙斯,你創造了中國網際網路未來的“神話”,廣告主和投資人就任你欺騙,任你玩,你要把中國移動網際網路做成什麼樣的模式!

蜻蜓線上最新版apk v5.0.1反編譯原始碼教程

apk不會造假的,google簽名的,造假得破解google簽名

第一步

首先我們直接用一個解壓apk(開發過android應該知道apk其實就是個壓縮檔案),解壓之後拷貝出裡面classes.dex檔案待用。

第二步

下載dex2jar工具,最新版下載連結dex2jar下載
解壓之後,開啟cmd,進入解壓目錄,執行命令:
d2j-dex2jar.bat classes.dex(上一步解壓的) jarpath(反編譯dex後的檔案目錄)
example:
d2j-dex2jar.bat c:\user\qting\classes.dex c:\user\qting\ 
*反編譯之後,會得到一個classes-dex2jar.jar檔案,待用。

第三步

下載JD-GUI(反編譯jar神器),最新版下載連結JD-GUI下載
解壓之後,雙擊開啟,直接把上一步得到的的classes-dex2jar.jar檔案直接拖入JD-GUI裡面,你就可以隨意檢視蜻蜓的原始碼了。

Summary

蜻蜓FM的Android程式設計師難道你們的節操都碎了麼??沒有節操的你們確實很文藝--普羅米修斯,宙斯,還有阿波羅,你們是神一樣的團隊! 史上最牛逼造假App蜻蜓FM神一般的資料造假手段,讓投資人和廣告主欲哭無淚,讓中國整個網際網路都漲姿勢了。