查看界面控件的作用
- 原生方式开发的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);