上世紀末,宋丹丹和趙本山在央視春晚舞臺出演了一個小品——《昨天、今天、明天》。在小品中,宋丹丹飾演的白雲利用自己給生產隊放羊的便利條件,揪羊毛搓毛線,給老闆黑土織了一件毛衣,被扣上「薅社會主義羊毛」的罪名,這便是「薅羊毛的鼻祖」。
現實生活中,普通的薅羊毛行為指消費者通過領取優惠券、獲得折扣或返現等方式從交易活動中獲取實惠,這種屬於正常的交易行為,沒有上升到業務欺詐的層次。
本文接下來探討的薅羊毛均指羊毛黨以營利為目的,有組織地針對商家活動進行大規模的薅羊毛攻擊行為。
羊毛黨,起源於網際網路金融的P2P平臺,指代那些專門選擇網際網路渠道的優惠促銷活動,以低成本甚至零成本換取物質上的實惠的人。初級羊毛黨多是一些「愛佔小便宜」的散客,凡有活動就薅,不計風險,只賺取返現和註冊金。它們常常是零散的進行薅羊毛活動,盈利也比較低
中級羊毛黨常通過一些羊毛群獲得相關資訊,積極參加薅羊毛活動,開始呈現出一種鬆散的組織形態。這個階段,它們不僅賺返現,對於一些收益高又可靠的平臺,也會投入一些資金進去。比如,投2000元一月標,收益率為9%,除掉網貸平臺的中介費用,額外賺14元左右,再加上投資額的1%返利和100元的直接返現,總收益大約134元。以此計算,則平均到年化收益高達80%。
專業化初級和中級羊毛黨本質上都屬於第一代羊毛黨,是精打細算的「業餘玩家」。現在要說的是「專職羊毛黨」,他們是工具化的「職業玩家」,屬於第二代羊毛黨。小號軟體、虛擬號註冊器等工具可以自動註冊大量的新號碼,接碼平臺可以專門接收驗證碼,代理IP使其落腳五湖四海。
集團化累積了大量的資源,有組織有紀律、分工明確、規模感人的羊毛黨公司、團夥出現了。不再滿足於只在底端薅羊毛,他們開始著手養小號、開發簡訊收發平臺、製作刷單軟體、規模化組織刷單、變賣套現等環節,逐漸形成一條完備的產業鏈。
比較專業的羊毛黨,通常都是以集團的方式出現的,羊毛黨群體之間交流的信息都大量的集中在各類網賺論壇、QQ群或暗網中。只要在搜索框內輸入「羊毛」兩個字,就會出現一堆薅羊毛的公眾號和網賺論壇,而且這些論壇和公眾號的用戶幾乎都屬於羊毛黨。不信?截圖給你們看:
實施一次完整的薅羊毛攻擊,需要跑通以下幾個環節:評估風險找到適合下手的活動 -> 獲取到大量的對應平臺帳號 -> 通過購置真機並結合其他技術手段得到大量的設備 -> 購買代理軟體獲取大量的IP池 -> 購買各種自動化工具進行批量操作 -> 執行薅羊毛 -> 利益變現 -> 分贓。
進一步的,我們可以拆解出整個薅羊毛地下產業鏈的運作模型,如下圖所示:
黑客基本貫穿在整個薅羊毛產業鏈中:
平臺/代理商平臺為了吸引活躍用戶,獲取到投資,往往會和廣告公司或者CPS推廣公司這類代理商合作,平臺則按照用戶的註冊數量來進行費用結算。而當這些公司在短時間內難以達到平臺的預期時,就會選擇跟羊毛黨合作,也就是所謂的找「刷子」。
此外,對於一些處於初創期間的網際網路金融公司,為了能夠快速積累用戶規模和交易規模,有時候自己也會主動搭上羊毛黨幫忙刷量,以期望推動平臺快速發展。
遍布各大電商、直播等Q群及網賺論壇中,負責收集平臺的優惠或獎勵活動情報、提供羊毛信息。
卡商和號商是該產業中的關鍵角色,卡商以集團客戶的身份批量購卡,然後在網絡上銷售;號商則將這些手機卡轉化為可用的各類帳號,包括電商平臺註冊用戶帳號、社交平臺用戶帳號等等。在搜尋引擎上搜索相關關鍵字,即可發現大量的卡商和號商信息:
接碼平臺提供了簡訊驗證碼和語言驗證碼兩種形式的驗證碼獲取。通常,接碼平臺會向卡商提供客戶端、API,甚至手機客戶端,服務端根據預先設置好的簡訊模板對簡訊內容進行自動匹配,提取其中的驗證碼信息。接碼平臺的API,能對接到自動化腳本當中,實現批量化註冊。
此外,在簡訊驗證碼的對抗中,出現了很多新的形式。比如,整個註冊過程中,可能需要接收多驗證碼,或要求用戶向指定的號碼發送一條驗證碼,也有很多平臺選擇了語音驗證碼。而接碼平臺也在不斷的改進,產生出了專門的發送驗證碼服務、語音驗證碼聽碼,還衍生出新的一種網賺項目——「聽碼」。
「打碼平臺」則是提供批量自動化識別各類驗證碼的專業服務平臺。
執行批量的註冊、登錄等操作,要用到龐大的代理IP池,這裡就需要依賴代理軟體賣家的供應
羊毛黨是最終執行薅羊毛攻擊的前臺黑手,他們通過社交軟體、貼吧和電商平臺獲取大量帳號,執行業務欺詐行為。
羊頭羊毛團體的領導者,也是平臺與羊毛黨之間信息的中介。它會從代理處接單,從黑客處獲取工具、漏洞,並從各個群裡獲取線報。此外,它還會在自己的羊毛QQ群、微信公眾號,抑或建立自己的羊毛平臺進行資源整合,通過各個渠道帶領眾多羊毛黨對平臺進行"群起而薅之"。
羊群有一些是利用業餘時間兼職賺些外快;還有一些是專職薅羊毛,整天靠刷單或秒殺活動等獲取利益。
關鍵技術貓池貓池就是將相當數量的Modem使用特殊的撥號請求接入設備連接在一起,可以同時接受多個用戶撥號連接的設備。貓池在連接到PC上之後,可以通過軟體對手機卡進行集中管理,主要的功能包括:設置通道對應的手機號、自動讀取簡訊、發送簡訊、撥打指定號碼、批量設置呼叫轉移等。在薅羊毛地下產業中,貓池被用來批量、集中模擬手機進行簡訊、驗證碼的收發。
Hook是一種運行時動態劫持目標函數,對內存中的數據進行篡改的技術手段。市面上的各種改機工具也都是基於Hook實現,通過這些工具可以對設備參數進行偽造,從而被識別為一臺新的設備。
在薅羊毛地下產業中,可以利用Hook技術編寫通用的改機工具,並收取註冊費;也可以與羊毛党進行交易,針對性的破解特定的指紋算法;還能編寫特定的Hook插件,實現一些自動化操作。
有別於Hook的動態篡改,通過定製ROM刷機可以直接對整個系統鏡像進行修改和替換。該技術可以應用到模擬器和真機,從而產生大量的虛假設備。
模擬器模擬器作為一種虛擬機,配合改機工具,能夠以較低成本實現設備多開,因此而備受黑灰產的青睞。然而由於Hook檢測的對抗,黑產開始逐步轉向自定製ROM的Android模擬器。這些模擬器具備一鍵新機的功能,每次啟動所有的系統參數都會隨機變化。由於它並沒有安裝Hook框架,也沒有進行Hook操作,所以會比較難以識別。
多開沙箱多開軟體提供了一個虛擬化的沙箱環境,這意味著它可以做到很多事情。比如,它可以直接把注入代碼的窗口放在這裡,從而實現應用啟動時就加載外部的hook代碼;還可以讓每次虛擬空間中的系統參數隨機變化,讓目標應用以為自己運行在一個新的設備中。
多開虛擬化引擎配合Hook技術,有可能使設備指紋識別技術在未來面臨更多的挑戰。
群控系統能同時管理並操作多臺設備,是模擬器作弊的升級手段。模擬器作弊和群控系統,都是為了打破越來越多的針對設備維度的限制技術而產生。區別在於,群控系統是使用真機來完成。
早期的群控系統功能,主要圍繞微信營銷展開,為微商服務。群控系統中,提供模擬定位、站街、搖一搖、批量導入通訊錄等功能來大量添加微信好友,再通過朋友圈發布、消息群發等功能進行定向的消息推送。此後,大批的網際網路公司通過微信來發布各種營銷活動,這些欺詐份子就開始利用群控薅平臺羊毛,攫取利益。
此外,某些群控系統還集成了圖靈接口,可以和用戶進行常規的對話,這大大增加了機器識別的難度。
至於群控系統的插件開發,很大程度上要受制於群控系統本身的功能和開發人員的技術水平。但絕大部分使用群控系統的人,其實並不具備開發能力,僅僅是單純地使用群控系統進行營銷
按鍵精靈類自動化腳本,同時支持安卓和IOS設備,使用其特有的腳本語言(類似VB),能夠模擬用戶的輸入操作和觸摸軌跡,替代人工完成一些較複雜的操作。
逆向破解逆向破解在薅羊毛產業中也佔據了很重要的一環,黑產會通過逆向分析的手段破解註冊、登錄協議及設備指紋算法等,並通過與羊毛党進行交易獲取收益。
新機原理
絕殺技一:免root Hook
此案例通過編譯xposed源碼並且修改特徵碼,把Xposed相關名稱改為系統名稱,例如camera、email、phone。然後hook堆棧信息,把hook框架的堆棧過濾掉。然後把改名字的xposed集成至LineageOs源碼中。
然後通過魔改後的XposedBridge.jar編寫Hook模塊,這樣就實現了免root集成hook框架。這樣子真的可以為所欲為。
絕殺技二:全面Hook Android設備信息接口
這個不用多說,全面的Hook了java層所有獲取設備信息的有關函數,包括文件讀取的io重定向,附件中是我整理的Hook相關接口。
絕殺技三:偽造真實用戶活動
各大廠商都在做風控,IP畫像、設備畫像、用戶畫像、手機號畫像...,沒用用戶行為的設備,必然是非正常用戶,肯定是過不了風控的。
通過hook相關接口,每次新機填充不同的簡訊,通話記錄,聯繫人,照片,啟動時間,周邊藍牙、wifi,sensor的值隨機化。
絕殺技四:基站、gps、ip位置一致
目前獲取位置信息主要有基站、gps、ip位置,三個維度。改機必然是通過連結代理(vpn)來生成不同ip,這裡就要保證每次基站和gps的位置要和IP的位置信息相差不大,這樣每次新機都是一個新的地理位置。
絕殺技五:SysPropertyHook
Xposed只是java層的Hook,現在大多數設備指紋sdk都是native獲取或者native和java層都獲取,然後進行對比。
這裡通過Hook SystemProperties.set、Settings.System.put、Settings.Secure.put、Settings.Global.put。
保證改機後/system/build.porp、System.xml、Secure.xml、Global.xml文件真實改變,保證native層通過getProp時候和java層獲取的是一致的。
新機流程
準備新機設備信息PhoneInfo
通過讀取/assets目錄下的設備信息集,隨機生成一個設備信息,然後通過當前ip獲取基帶和gps的位置,並且生成用戶信息。把這些信息全部寫入到sdcard中的phoneInfo.json中。
完成Hook
通過讀取sdcard中的phoneInfo.json的設備信息完成Hook,自此新機已經完成。
由於版權原因,案例就不放出來了
iOS一鍵新機
/Applications/RST.app 主程序,用於生成改機參數
/Applications/location360Pro.app 主程序,用於生成位置參數
/Library/MobileSubstrate/DynamicLibraries/rstweak.{dylib,plist} 該tweak通過hook一些可以獲取系統屬性和app屬性的C函數和ObjC函數實現的修改app參數
/Library/MobileSubstrate/DynamicLibraries/GPSTravellerTweakVIP.{dylib,plist} 該tweak通過hook一些系統服務中的函數實現位置修改
代碼混淆
AWZ/ALS使用Hikari工具鏈做了各種保護,361/360則自己內聯了很多無用代碼。後者更容易分析,只需要在IDA中使用Keypatch把指令全Nop掉就可以分析。然而AWZ/ALS對dylib沒有做任何保護,很容易根據它的原理自己實現一套軟體,而361/361對要Hook的函數名都做了加密。
反調試
AWZ/ALS使用了多種方式檢測調試,361/360則無
網絡通信
AWZ/ALS的特點是,儘可能不調用系統函數,比如在生成json串的時候是自己拼湊的,最終body再一次加密,同時使用底層socket函數做授權驗證;361/360的保護相對較弱,只是對json的各個欄位進行一次加密,最終使用Objective-C函數進行網絡通信,很容易用fiddler定位。然而361/360也不是一無是處的,他的授權驗證同時存在於RST.app和rstweak.dylib中,而AWZ/ALS我們只需要搞定ALS.app就算破解了。
後臺服務
AWZ/ALS使用後臺服務(DHPDaemon)來通過notify通信隱藏一些操作,同時daemon也有授權驗證,361/360則無