查看界面控件的作用
- 原生方式開發的app,使用Java和C++開發,加密用的是Java和C++
- H5的app,使用Webview控件加載網頁,加密用的是JS
- app自動化測試,需要知道控件的id,或者說需要定位到控件
使用uiautomatorviewer.bat查看
Android SDK根目錄\tools\bin
注意:如果關閉打開的cmd窗口,UI Automator Viewer窗口也就關閉了
這時你手機的頁面便會顯示出來
使用Appium查看
- Appium的下載和安裝
- Appium的配置
- 安裝Java SDK
- 配置android SDK
- 設置ANDROID_HOME環境變量
- Appium的啟動參數
視頻中用的是appium 1.22以下的版本,截止我寫這篇文章,最新版為1.22.2,服務和元素查看器分家了,查看元素信息就必須下載Appium Inspector。我選擇下載1.21.2,也就是分家前的最后一個版本。
點擊start server
點擊“放大鏡”
比如我查看手機的設置app 的控件信息,需要輸入這些信息
設置完成之后點擊保存,然后點擊右下角的start session
其中的deviceName的獲得
我使用的是k30pro,比教學視頻中已經root的pixel1代坑多一些
主要出現的問題就是"orginal error:error executing adbexec appium",關於這個問題的解決建議看這一篇:appium啟動start session報錯記錄Error executing adbExec
而對於小米手機,在開發者選項中一定要開啟這些開關:
- OEM解鎖
- USB調試
- USB安裝
- USB調試(安全設置)
在接下來的過程中,手機上會不斷彈窗(下次使用就不會彈了),點擊允許即可,手機上會多出一個app
成功!
這時候手機上點擊設置的其他頁面,再點擊appium中的刷新,也是可以截屏的
點擊其他應用,點擊appium中的刷新按鈕,依然可以截屏(感覺有點嚇人啊,就像一個木馬)
給足雞老師排面
禁止截屏
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
在我們的app中添加上面這句話
重新安裝這個app,打開app,這時候通過appium已經無法截取此app里面的頁面
使用sdk中的工具同樣也無法對這個app頁面截圖
上面這行代碼可以以三種形式表現:
- 直接明寫在代碼中,就像我上面那個app一樣
- 利用JAVA反射
- SO層,對函數名類名進行加密
無論哪一種,hook通殺,hook掉getWindow()下的addFlag()方法。
也可以調用clearFlag()方法來消除上面那行代碼的作用,不過就需要考慮一個時機問題。需要先addFlag,再clearFlag
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);