android逆向奇技淫巧四:模擬器檢測和反檢測


  對於逆向人員而言,很多時候分析app是需要抓包和調試的,一般都會選中模擬器,而不是真機,主要是因為模擬器成本低,而且不用擔心app損壞真機(部分app通過色情、賭博等內容誘導用戶安裝,然后把手機做成肉雞、挖礦機等,這就是所謂的“看片一時爽,手機火葬場”);但很多黑灰產app也不是吃素的,內置了大量檢測模擬器的功能,一旦發現app被安裝在了模擬器,直接退出。所以用模擬器分析和調試的第一步就是干掉模擬器檢測,讓app在模擬器中正常運行;本文介紹幾種常見的模擬器檢測邏輯和過模擬機檢測的方法;

  先在模擬器安裝app,然后選擇登陸游戲,彈出如下界面:

      

       用jadx-gui打開,然后用模擬器作為關鍵詞搜索,啥都沒有,所以這里的提示有可能是圖片,也有可能是服務器返回的,也有可能在so層

   

   換其他關鍵字試試,結果如下:第二個剛好出現在了屏幕上,感覺靠譜,進去看看了:

  

  發現這是一個if的條件選擇,中間那個提示剛好是我們在屏幕上看到的;但由於混淆很嚴重,存粹分析這些代碼很難讀懂背后的業務意義(java語法大家肯定都懂,但更重要是理解這些代碼的業務意義,也就是這些代碼實現了什么功能),只能另辟蹊徑!

   

    既然是模擬器,肯定有自己個性化的特征,不可能和真機一摸一樣,比如cpu:模擬器一般都是x86架構的,真機是arm的;還有藍牙、通信錄、短信等模擬器都不具備,這些都是比較明顯的特征;具體的模擬器檢測代碼和思路,請見文章末尾的參考連接;這里用幾個檢測代碼繼續搜索試試,比如: 

  •     這里檢測cpu的信息: 

       

     右鍵方法名稱,選擇查找用例,發現一個引用都沒有,顯然是不正常的,估計是jadx-gui的bug,這里選擇android-killer繼續嘗試:找到方法定義的地方,右鍵方法名,選擇“查看方法引用”,還真找到了:

          

    直接進入這個activity,發現在onCreate方法內部調用了上述cpu的檢測辦法,

   

         進入android-killer,把if這段代碼選中,刪除,然后回編譯成apk:

          

  如果對smali語法不熟,擔心改錯,也可以直接把intel和amd這兩個原始的字符串改成其他的,讓if的邏輯和以前相反也行:

      

   再次安裝就不會看到使用模擬器的提示了!最后末尾的參考鏈接是模擬器檢測方法和思路,建議感興趣的小伙伴多看看!

 

另外:附上常見的android反調試方法總結:

      

 

 

 

 

 

參考:

1、https://titanwolf.org/Network/Articles/Article?AID=4def465f-a492-49e4-a10e-04ca53a6d107#gsc.tab=0   

2、https://github.com/strazzere/anti-emulator/issues/7

3、http://www.shirlman.com/tec/20160605/419

4、https://juejin.cn/post/6844903637840297998

5、http://zeng9t.com/tech/2019/04/30/Android%E6%A8%A1%E6%8B%9F%E5%99%A8%E6%A3%80%E6%B5%8B%E5%8F%8A%E5%AF%B9%E6%8A%97%E6%96%B9%E6%B3%95.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM