再談微信運動

這里統(tǒng)一回復(fù)下燃观,昨天寫了篇關(guān)于微信運動刷榜的文章,考慮到微信運動是一個傳播正能量壳繁,引領(lǐng)健康,宣起了全民運動熱潮的公益應(yīng)用荔棉,微信運動方面也做了溝通闹炉,刷榜這種行為不益于微信運動的健康生態(tài),所以刪除江耀。

作者想說的是剩胁,現(xiàn)在對自己的健康作弊,最后傷害的還是自己祥国,運動不在于多少,在于問心無愧晾腔,每天多走一步舌稀,用真實的數(shù)據(jù)說話。

記步問題

關(guān)于如何統(tǒng)計每天的步數(shù)灼擂,自己統(tǒng)計壁查,需要長時間后臺刷新,不太可行剔应。所以微信運動采取的是讀取health里的數(shù)據(jù)睡腿。下面是我寫的統(tǒng)計當(dāng)天步數(shù)的代碼语御,原理都是一樣的:

    func readTotalSteps(completion: ((Int) -> Void)) {
        ...
        let predicate = HKQuery.predicateForSamplesWithStartDate(startDate, endDate: endDate, options: .None)
        let sampleQuery = HKSampleQuery(sampleType: sampleType!, predicate: predicate, limit: 0, sortDescriptors: nil, resultsHandler: {
            (sampleQuery, results, error ) -> Void in
            if let queryError = error {
                print( "There was an error while reading the samples: \(queryError.localizedDescription)")
            }
            
            var steps: Double = 0
            if results?.count > 0 {
                for result in results as! [HKQuantitySample] {
                    steps += result.quantity.doubleValueForUnit(HKUnit.countUnit())
                }
            }
            completion(Int(steps))
        })
        
        healthKitStore.executeQuery(sampleQuery)
    }

所以說,這樣也就給了我們作弊的可能席怪,因為我們也可以隨意向heathlKit里面隨意寫入數(shù)據(jù)应闯,而且是在不越獄的前提下,目前都是基于這種方法刷榜的挂捻。

如何防范

難道我們就這樣放任不管嗎碉纺,那些每天認(rèn)認(rèn)真真運動的人反而排在最后,這對微信運動的健康生態(tài)十分不益刻撒。

那我們該如何防范呢骨田,我是從HKQuantitySample入手的,對于每一個HKQuantitySample類的result声怔,都有一個source屬性态贤,對應(yīng)的是HKSource,再看HKSource

/*!
 @class     HKSource
 @abstract  Represents the entity that created an object stored by HealthKit.
 */
@available(iOS 8.0, *)
class HKSource : NSObject, NSSecureCoding, NSCoding, NSCopying {
    
    /*!
     @property      name
     @abstract      The name of the source represented by the receiver.  If the source is an app, then the name is the
                    localized name of the app.
     */
    var name: String { get }
    
    /*!
     @property  bundleIdentifier
     @abstract  The bundle identifier of the source represented by the receiver.
     */
    var bundleIdentifier: String { get }
    
    /*!
     @method    defaultSource
     @abstract  Returns the source representing the calling application.
     */
    class func defaultSource() -> HKSource
}

這樣說醋火,我們可以校驗這兩個屬性值來篩選數(shù)據(jù)咯悠汽,name指的是數(shù)據(jù)來源的名字,如果是手機自己添加的則是本機名胎撇,通過第三方應(yīng)用添加的則對應(yīng)其應(yīng)用名介粘,bundleIdentifier地球人都知道。更改之前的代碼如下:

    func readTotalSteps(completion: ((Int) -> Void)) {
        ...
        let sampleQuery = HKSampleQuery(sampleType: sampleType!, predicate: predicate, limit: 0, sortDescriptors: nil, resultsHandler: {
            (sampleQuery, results, error ) -> Void in
            ...
            var steps: Double = 0
            if results?.count > 0 {
                let deviceName = UIDevice.currentDevice().name
                let healthBId = "com.apple.health"
                for result in results as! [HKQuantitySample] {
                    let name = result.source.name
                    let bid = result.source.bundleIdentifier
                    if name == deviceName && bid.hasPrefix(healthBId) {
                        steps += result.quantity.doubleValueForUnit(HKUnit.countUnit())
                    }
                }
            }
            completion(Int(steps))
        })

這樣就完美過濾其他數(shù)據(jù)來源晚树,真實還原h(huán)ealth數(shù)據(jù)姻采,不知道以后微信運動會不會采取這種方式。

然而這種方式存在固然的缺陷爵憎,一些正規(guī)的第三方運動應(yīng)用添加的數(shù)據(jù)也會被過濾掉慨亲,難道以后要加白名單機制?想出現(xiàn)在微信運動里的運動應(yīng)用(小米運動之類的)需要向微信審核宝鼓?刑棵?

反過來想想

對于上面這種過濾,是否存在繞過呢愚铡?

  1. 對于驗證數(shù)據(jù)來源名字是否是本機蛉签,這個我們可以將應(yīng)用名改成本機名,本地操作沥寥,秒秒鐘的事情碍舍,不成問題。然而對于那種分發(fā)上線的應(yīng)用邑雅,這個就比較困難了片橡,我不知道有什么方法或者不存在方法。

  2. 對于bundle Identifier的偽造與修改淮野,這個也是本地操作捧书,假面攻擊就是與之相關(guān)吹泡,因為該漏洞(iOS 8.4已修復(fù)部分),health應(yīng)用的bundle Identifier后面有了一串隨機數(shù)经瓷,com.apple.health.EBE76334-789F-400D-9214-0581002D49CE爆哑,我們獲取它然后將自己的應(yīng)用改成它,然后企業(yè)簽名了嚎,再插入數(shù)據(jù)泪漂。

這里說說題外話,所謂的假面攻擊歪泳,就是通過使用相同的bundle ID萝勤,替換手機上已有從app store上下載安裝的APP應(yīng)用程序,替換后的APP可以獲取該應(yīng)用程序的的用戶敏感數(shù)據(jù)呐伞,比如第三方郵件應(yīng)用下郵件信息敌卓,也可以作為跳板,通過已知漏洞繞過應(yīng)用層的sandbox保護伶氢,對系統(tǒng)層進行攻擊趟径。烏云上有詳細(xì)的資料,后面給出鏈接癣防。

多說一句

總之蜗巧,只要加點小的限制,便會讓大眾隨意刷榜的舉動變的十分困難蕾盯,刷榜的成本大大提高幕屹,不再具有普及性和傳播性。

廢話這么多级遭,最后來句吐槽望拖,難得github有個這么多star的項目,刪了好心痛挫鸽。说敏。希望大家為本文點個贊。

閱讀更多

想了解Masque Attack的下面給了三個鏈接:
假面攻擊:你所有的iOS應(yīng)用都在我們的手掌心
假面攻擊(Masque Attack)詳細(xì)分析與利用
三種新的針對IOS的假面攻擊方法(Masque Attacks)—— 烏云知識庫

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丢郊,一起剝皮案震驚了整個濱河市盔沫,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌枫匾,老刑警劉巖迅诬,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異婿牍,居然都是意外死亡,警方通過查閱死者的電腦和手機惩歉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門等脂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來俏蛮,“玉大人,你說我怎么就攤上這事上遥〔迹” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵粉楚,是天一觀的道長辣恋。 經(jīng)常有香客問我,道長模软,這世上最難降的妖魔是什么伟骨? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮燃异,結(jié)果婚禮上携狭,老公的妹妹穿的比我還像新娘。我一直安慰自己回俐,他們只是感情好逛腿,可當(dāng)我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著仅颇,像睡著了一般单默。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上忘瓦,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天搁廓,我揣著相機與錄音,去河邊找鬼政冻。 笑死枚抵,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的明场。 我是一名探鬼主播汽摹,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼苦锨!你這毒婦竟也來了逼泣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤舟舒,失蹤者是張志新(化名)和其女友劉穎拉庶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秃励,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡氏仗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了夺鲜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片皆尔。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡呐舔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慷蠕,到底是詐尸還是另有隱情珊拼,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布流炕,位于F島的核電站澎现,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏每辟。R本人自食惡果不足惜剑辫,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望影兽。 院中可真熱鬧揭斧,春花似錦、人聲如沸峻堰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捐名。三九已至旦万,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間镶蹋,已是汗流浹背成艘。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留贺归,地道東北人淆两。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像拂酣,于是被迫代替她去往敵國和親秋冰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容