模擬器作為一種虛擬機似忧,配合改機工具,能夠以較低成本實現(xiàn)設備多開,因此而備受黑灰產(chǎn)的青睞檩互。如何準確識別模擬器成為App開發(fā)中的一個重要模塊,目前也有專門的公司提供相應的SDK供開發(fā)者識別模擬器蒋困。通過前段時間對模擬器檢測技術的調研盾似,希望能總結出一套特征挖掘的體系化方案。
模擬器概述
>>>>
定義
安卓模擬器是一種可以運行在電腦上的虛擬設備雪标,通過它可以實現(xiàn)應用的跨平臺操作零院,讓移動端APP無需任何改動即可在PC上執(zhí)行。
>>>>
特性
優(yōu)勢
隨著技術的不斷發(fā)展村刨,目前模擬器基本已經(jīng)能夠完成手機90%以上的功能告抄。此外,由于在PC端工作嵌牺,與傳統(tǒng)手機相比打洼,具有以下幾點優(yōu)勢:
- 更炫:支持大屏幕龄糊、提供更炫酷的視覺效果,從而能夠天然的將一些移動端由于適配成客戶端應用募疮;
- 易上手:支持鼠標炫惩、鍵盤、手柄阿浓、攝像頭等眾多硬件外設他嚷,將操作方式從手指運動中解放出來,發(fā)揮外設的優(yōu)勢芭毙;
- 更強的性能:通過模擬器可自定義配置性能參數(shù)筋蓖,發(fā)揮PC硬件性能優(yōu)勢,跑分數(shù)據(jù)遠超手機退敦,使得高配游戲運行不再卡頓粘咖;
- 更好的操控性:通過虛擬按鍵功能,能夠將任意點觸操作侈百、震動瓮下、搖搖等手機獨有操作映射到鍵盤的自定義按鍵,更加簡易设哗、便捷唱捣;
- 使用PC工具:利用PC端其他輔助工具完成對移動端應用的支持,如通過按鍵精靈完成自動掛機等操作网梢,解放雙手震缭;
- 模擬多人操作:通過模擬器多開功能,零成本體驗同時多部手機战虏、多個賬戶開小黑屋拣宰,實現(xiàn)刷單的快感;
- 更便捷的虛擬定位功能:通過模擬器虛擬定位烦感,讓你輕松落腳五湖四海巡社;
- 再也不用擔心電池電量、手機流量了...
問題
此外手趣,Android模擬器鑒于自身技術瓶頸晌该,也存在以下普遍問題:
性能:運行時普遍需要占據(jù)較大的CPU、內存等資源绿渣,導致低配機運行不流暢朝群。此外,即便是高配機中符,多開也很容易出現(xiàn)卡頓等現(xiàn)象姜胖;
穩(wěn)定性:模擬器技術本身的BUG導致的閃退、花屏淀散、無響應等現(xiàn)象右莱;
兼容性
硬件兼容性:主要表現(xiàn)為大部分模擬器對AMD架構PC的不支持蚜锨;
應用兼容性:比如部分模擬器尚不兼容ARM架構的APP,又或者某些應用對安卓內核慢蜓、虛擬機的調用方式比較底層亚再,當模擬器對這些接口支持的不好時,表現(xiàn)為該類程序無法在模擬器上運行胀瞪;
PC系統(tǒng)兼容性:表現(xiàn)為模擬器主要適配Windows主流平臺针余,而能在Mac下運行的很少,且過低凄诞、過高版本支持的不好(如XP之前版本、Win 10忍级,市面上某些定制的平板系統(tǒng)等)帆谍;
安卓系統(tǒng)兼容性:目前模擬器上的Android系統(tǒng)仍然停留在4.x,部分達到5.1轴咱,使得部分對安卓版本有要求的應用或游戲在模擬器上運行體驗不好汛蝙。
底層關鍵技術
>>>>
虛擬化技術
模擬器是用軟件來模擬硬件操作,這就需要用到虛擬化技術朴肺。廣義的虛擬化窖剑,是指將網(wǎng)絡、CPU戈稿、內存及存儲等各種實體資源西土,予以抽象、轉換后呈現(xiàn)出來鞍盗,進而打破實體結構間不可切割的障礙需了,使用戶可以比原本的組態(tài)更好的方式來應用這些資源。我們所熟知的虛擬機就是虛擬化技術中的一種般甲,通常來說它們只是模擬了一套與Host主機相同架構肋乍、相同指令集的硬件平臺,不涉及內存和CPU的虛擬化敷存。所有的Android模擬器都在不同程度上運用了虛擬化技術墓造,比如雷電、夜神锚烦,包括Bluestack模擬器是基于Virtualbox虛擬機觅闽,谷歌原生模擬器和紅手指云模擬器則是應用了Qemu的虛擬化技術。
CPU虛擬化
目前挽牢,已知的所有ARM架構的模擬器都是基于Qemu虛擬機谱煤。Qemu采用的是純軟件模擬,在物理機的操作系統(tǒng)上創(chuàng)建一個模擬硬件的程序來仿真所有想要的硬件禽拔,然后在上面跑ARM運行時刘离。在這種環(huán)境下室叉,由于程序每次執(zhí)行都需要將其翻譯成宿主機(X86)的指令,導致性能非常低下硫惕,這也是原生模擬器不夠流暢的原因之一茧痕。
ARM Translation
當下主流的Android模擬器都是X86架構,基于Virtualbox虛擬機恼除。由于不需要做CPU虛擬化踪旷,少了一層指令集轉換過程,因此在運行支持X86架構的app時豁辉,就和普通的虛擬機沒有區(qū)別令野,速度也就明顯提高了很多。 此外徽级,針對ARM架構的兼容性問題气破,普遍采用的是半虛擬化,根據(jù)二進制翻譯技術將ARM指令動態(tài)翻譯成X86指令餐抢。黑產(chǎn)常用的模擬器目前市面上安卓模擬器軟件種類繁多现使,有51、mumu旷痕、藍疊碳锈、夜神、逍遙欺抗、海馬玩售碳、雷電等等。通過在黑產(chǎn)聚集論壇佩迟、QQ群等多個渠道進行調研团滥,我們發(fā)現(xiàn)黑產(chǎn)當下常用的是夜神、雷電和逍遙模擬器报强。>>>>
如何挖掘特征
結合前面梳理出的模擬器檢測框架父晶,后續(xù)在做相應的特征挖掘時,可直接根據(jù)該腦圖做進一步的完善和加強弄跌。
<table><tr><td>特征項</td><td colspan="2">細分點</td><td>描述</td><td>備注</td></tr><tr><td rowspan="2">軟件信息</td><td>應用層</td><td></td><td></td> <td></td></tr><tr><td>系統(tǒng)庫</td><td></td><td></td><td></td></tr><tr><td rowspan="3">無線射頻</td><td>WIFI</td><td></td><td></td><td></td></tr><tr><td>GPS</td><td></td><td></td><td></td></tr><tr><td>…</td><td></td><td></td><td></td></tr><tr><td rowspan="9">硬件信息</td><td rowspan="3">底層硬件</td><td>CPU</td><td></td><td></td></tr><tr><td>電池</td><td></td><td></td></tr><tr><td>設備參數(shù)</td><td></td><td></td></tr><tr><td rowspan="6">硬件抽象層</td><td>圖形</td><td></td><td></td></tr><tr><td>相機</td><td></td><td></td></tr><tr><td>藍牙</td><td></td><td></td></tr><tr><td>輸入</td><td></td><td></td></tr><tr><td>存儲</td><td></td><td></td></tr><tr><td>傳感器</td><td></td><td></td></tr><tr><td rowspan="4">文件系統(tǒng)(重點關注Linux內核相關)</td><td>檢查/sys硬件驅動信息</td><td></td><td></td><td></td></tr><tr><td>檢查/dev設備節(jié)點特征</td><td></td><td></td><td></td></tr><tr><td>檢查/proc運行時的內核信息映射</td><td></td><td></td><td></td></tr><tr><td>…</td><td></td><td></td><td></td></tr></table>
此外甲喝,基于文件系統(tǒng)差異的特征挖掘,具體可參考Android根目錄文件結構進行操作铛只,以下是幾個重要的目錄/文件的說明:
- /mnt:掛載點目錄
- /etc:指向 /system/etc 埠胖,系統(tǒng)配置文件所在目錄
- /data:存放用戶安裝的應用以及各種數(shù)據(jù)
- /system:Android系統(tǒng)目錄文件夾
- /dev:設備節(jié)點文件存放地
- /sys:用于掛載 sysfs文件系統(tǒng)糠溜,在設備模型中,sysfs文件系統(tǒng)用來表示設備的結構直撤,將設備的層次結構形象的反應到用戶空間中
- /proc:這是一個虛擬的文件系統(tǒng)非竿,不占用實際存儲空間。它以文件系統(tǒng)的方式為訪問系統(tǒng)內核的操作提供接口谋竖,動態(tài)從系統(tǒng)內核中讀出所需信息
- init.rc:啟動腳本
- default.prop:系統(tǒng)屬性配置文件
>>>>
對應的檢測弱點
基于模擬器結構特征红柱,利用任務調度檢測模擬器
原理
模擬器與真機的本質區(qū)別在于運行載體,市面上已知的ARM模擬器都是基于qemu虛擬機蓖乘。由于qemu在執(zhí)行程序時實際上是將其翻譯成宿主機的指令锤悄,比如將安卓的arm指令翻譯成PC的x86指令。為了效率上的考慮嘉抒,qemu在翻譯執(zhí)行arm指令時并沒有實時更新模擬的pc寄存器值铁蹈,只會在一段代碼翻譯執(zhí)行完之后再更新,而真機中pc寄存器是一直在更新的众眨。根據(jù)這一點,可以設計一段CPU任務調度程序來檢測模擬器容诬。優(yōu)缺點
優(yōu)點:因為是基于qemu的二進制翻譯技術來做特征檢測娩梨,所以能夠很好的識別這類Android模擬器。 缺點:
- 需要自己設計反應離散程度的算法來統(tǒng)計任務調度的地址分布情況览徒,想要實際應用到SDK有些困難
- 會執(zhí)行匯編代碼狈定,在不同的機器設備上需要考慮穩(wěn)定性和兼容性等問題
利用cache特性檢測Android模擬器
原理
由于絕大部分手機都是基于ARM架構,而模擬器幾乎全部是運行在PC的X86架構上习蓬。因此纽什,可以利用ARM與X86的底層緩存行為差異來判斷是否為真機。 具體來說躲叼,ARM采用的是將指令存儲與數(shù)據(jù)存儲分開的哈佛架構芦缰,L1 Cache(一級緩存)被分成了平行的兩塊,即I-Cache(指令緩存)和D-Cache(數(shù)據(jù)緩存)枫慷,而X86采用的是將指令存儲和數(shù)據(jù)存儲合并在一起的馮?諾伊曼結構让蕾,L1 Cache是連續(xù)的一塊緩存。所以或听,如果我們通過讀寫地址指令的方式對一段可執(zhí)行代碼進行動態(tài)修改探孝,那么在執(zhí)行的時候,X86架構上的指令緩存會被同步修改誉裆,而對ARM架構而言顿颅,這種數(shù)據(jù)讀寫操作修改的只是D-Cache中的內容,此時I-Cache中的指令并不會被更新足丢。優(yōu)缺點
優(yōu)點:能夠準確的識別arm和x86架構粱腻。 缺點:要執(zhí)行匯編代碼庇配,在不同的機器設備上需要考慮穩(wěn)定性和兼容性等問題。實測發(fā)現(xiàn)容易引起崩潰栖疑,需要配合多進程予以解決讨永。
基于Android體系架構,應用層行為數(shù)據(jù)
這種檢測方案本質上是對正常用戶的行為模式進行統(tǒng)計分析遇革,它也許不能有效的對真機和模擬器進行區(qū)分卿闹,但可以作為風險設備畫像的一個參考維度。
無線射頻
WIFI
檢查WIFI列表這種方式萝快,目前沒發(fā)現(xiàn)明顯缺點锻霎。當正常手機接入WIFI的時候,周邊往往有復數(shù)的WIFI信號揪漩,而模擬器由于不具備檢索周邊WIFI的能力旋恼,其WIFI列表通常為空或者只有一個WIFI。
GPS
這種檢測手法的原理是基于模擬器沒有真實的GPS模塊奄容,通常無法獲取到地理位置信息冰更。缺點是部分用戶在實際使用中可能會關閉該權限,導致獲取不到數(shù)據(jù)昂勒。
>>>>
硬件信息
底層硬件
CPU1. 型號:正常x86手機的cpu型號為intel atom蜀细,arm則是聯(lián)發(fā)科,高通戈盈,麒麟等奠衔。缺點是需要大盤做數(shù)據(jù)分析,另外可能要結合手機型號等其他維度才能做一個比較好的識別塘娶。2. 溫度:目前來看應該是比較靠譜的归斤,缺點是需要大量的數(shù)據(jù)統(tǒng)計做支撐,不排除有誤殺的可能刁岸。電池需要在后臺多次采集數(shù)據(jù)脏里,檢驗電壓、電量是否有實時變化难捌,實際應用起來有些困難膝宁。設備通過系統(tǒng)API獲取手機硬件參數(shù),可以說是非常傳統(tǒng)的模擬器檢測方案了根吁。也正是因為傳統(tǒng)员淫,基本上都知道會獲取哪些信息,所以缺點是很容易遭到篡改击敌。
硬件抽象層
相機 通過提取攝像頭參數(shù)信息介返,可以有效的識別當前設備是否為“主流手機”。缺點是考慮到平板、學習機等“冷門設備”的存在圣蝎,不能直接區(qū)分出模擬器刃宵,需要結合其他維度一起使用,且需要接入的APP有打開攝像頭的權限徘公。藍牙 若想從API層面進行檢測牲证,那就必須先開啟藍牙,而這個需要彈框讓用戶確認关面。輸入缺點是對觸摸事件的處理是在前臺完成的坦袍,如果是作為SDK可能不是很好接入和應用。存儲1. 閃存分區(qū):Android系統(tǒng)的更新以及刷機等方式都有可能導致分區(qū)的變化等太,目前來看捂齐,在高版本的機器上檢查mmcblk、dm-x分區(qū)并不是一個靠譜的特征缩抡,需要配合其它維度一起使用奠宜。2. /mnt掛載:這種文件名的檢測手法只能針對性的做特定模擬器檢測、不通用瞻想,且很容易通過版本更新压真、改名等手段進行繞過。傳感器除判斷設備有支持哪些傳感器外蘑险,若想要做更進一步的驗證榴都,就仍然繞不開多次采集數(shù)據(jù)的問題。
>>>>
文件系統(tǒng)
特點是用于做特征檢出的目錄文件與底層硬件的關聯(lián)性越強漠其,其效果越好,反之越可能失效竿音。建議盡量提取和虛擬機和屎、硬件驅動相關的文件特征,缺點是部分特征可能需要結合大量的機型數(shù)據(jù)做可靠性驗證春瞬。
本文在開源項目:https://github.com/Android-Alvin/Android-LearningNotes 中已收錄柴信,里面包含不同方向的自學編程路線、面試題集合/面經(jīng)宽气、及系列技術文章等随常,資源持續(xù)更新中...