论如何从APP测试搞到刷机

简介: APP测试搞到刷机

640.png

       作为一名安服仔,完成项目工作必然是本分所在,于是老大扔了一个APK和API文档要进行测试,从这儿起,就注定我这不平凡的一周。。。

0x01 着手测试

       拿到APK,首先自然是扔模拟器开搞,我一般习惯用夜神、MUMU和雷电进行测试,正寻思着一个破APP有啥难测的然后。

640.png

       ???WTF,然后想到自己这个测试模拟器是安卓5,会不会是安卓版本太低了,于是更新了一波雷电4,美滋滋的把APK扔进安卓7的模拟器。

640.png

       ???,直接给我人整晕了,这里其实是有个小技巧的,  有些时候打开应用会闪退,只要把模拟器从平板模式改成手机模式就不会闪退了  ,但是这个方法在这儿显然不是特别好用,后面又陆续更换了许多模拟器,依然是要么解析失败、要么启动闪退、要么登录的时候闪退,属实无奈,想到这里只好先测试API,毕竟是有API手册的,于是先抓个登录包。

0x02 进行抓包

     这里简述下我之前抓包的姿势:直接挂代理、postern流量转发、proxifier抓模拟器流量、xposed+justtrustme。

       二话不说,挂代理开搞,不出所料,抓不到包,尝试浏览器走个百度的流量,可以正常抓到。

640.png

       后面也是陆续换了其他姿势,都是可抓到其他应用流量,但是无法抓到要出测试的APP流量,后面又想了下,会不会因为模拟器检测?然后我开心的拿出公司测试机继续进行测试,adb install 直接安装,结果提示SDK版本过低,看来只有换高版本安卓了,但是高版本的模拟器又有闪退问题,于是我萌生了一个念头---给测试机刷ROM。

0x03 刷机

      虽然自己之前也搞过一些APP的测试,但也仅限于后端和客户端checklist这种,即使是root也只搞过ios的越狱,像安卓刷机这种东西接触还是比较少,话不多说百度开干。

去百度搜索了一些相关内容,简单介绍一下几种刷机的方式。

线刷:

       通过fastboot进行刷机,ROM包一般以.tgz格式结尾,压缩包内有一些.bat文件

卡刷(推荐):

       通过fastboot刷入第三方recovery(小米有自己的recovery刷机工具miflashpro),当前用的比较多的是TWRP,链接https://twrp.me/ 可以根据个人设备选择对应的TWRP进行刷入 ,recovery刷入完成后进入recovery进行刷机,卡刷包一般以.zip结尾,可以扔到手机的内置空间,也可以在电脑上使用adb sideload进行刷入,这里选择第二种.

第三方ROM:

       有些旧版的手机官方已经不再维护,通过刷官方包无法升级安卓版本,只能通过刷入第三方ROM的方式进行刷机,第三方ROM比较知名的有魔趣、LineageOS、Pixel Experience、DOT OS 等,本次测试我使用的设备是NEXUS6 刷入的ROM是LineageOS,大家在刷第三方ROM的时候一定要选择对应设备的ROM包进行刷入。小米的机子可以参考这个网站,有小米各个历史版本官方包https://xiaomirom.com/

640.png

       首先我在TWRP下载了NEXUS6对应的recovery,NEXUS一般分类在谷歌或者摩托罗拉中。

640.png

640.png

       有锁要对设备进行解锁,这个就不介绍了,网上有很多相关资料,小米设备有官方解锁工具。

http://www.miui.com/unlock/index.html

640.png

       然后插电脑,在设备中开启USB调试(这里有个坑,有些电脑可能没有安卓驱动,然后网上搜可能有各种各样的说法,这里正确的解决方法是win+x打开设备管理器-找到有个感叹号的android-右击选择更新驱动程序-自动搜索驱动程序-在Windows更新上搜索,然后会跳到Windows更新页面,在Windows更新选择可选更新,在驱动程序更新就能找到android驱动,点击下载更新回到设备管理器,感叹号消失就说明驱动正常了)。

640.png

下载fastboot和adb相关链接:

https://androidfilehost.com/?fid=7161016148664822596

       把上面下载好的recovery镜像放到同一个文件夹内,手机关机,长按电源键+音量减,几秒钟后就会出来fastboot页面,这个时候再在fastboot文件夹打开终端(个人推荐一波Windows Terminal),输入fastboot.exe flash recovery xxxx.img,即可刷入recovery,如果刷入失败,请检查设备是否解锁或者USB调试是否开启。

640.png

       进入recovery模式(小米手机是长按电源键+音量加,我用的Nexus6是长按电源键+音量减,进入fastboot模式后按音量键选择模式,电源键确定)

640.png

 双清,删除data和cache

640.png

 进入高级,选择ADB Sideload

640.png

       这时候电脑打开终端,输入adb.exe sideload 刷机包.zip,即可愉快的刷入新系统。

       刷入完成后点击右下角reboot system 即可重启进入系统。

0x04 再次抓包

       进入新系统,再次安装burp证书然后添加代理(tip:实机抓包可以用Win10的移动热点,IP比较固定,再次测试的时候不需要更换代理IP),进行抓包,依然是抓不到模拟器流量,但是有其他的手机APP的流量。

       这次我怀疑是不是SSL-Pinning的原因,这个简单来说分单向认证和双向认证,单向认证就是客户端要对服务端的证书进行单向校验,使用xposed插件进行hook可绕过相关插件有justtrustme、justtrustme++、trustmealready等;双向认证是客户端和服务端要对相互的证书进行校验,遇到比较少,要突破双向认证只能反编译APK去查找客户端证书文件,有兴趣的大佬可以搜索下相关资料,这里不做讲解。

       装xposed就需要root手机,这里我选择了另一种方式,刷入root管理工具Magisk。

640.png


                                          刷入面具和相关插件

       面具(Magisk)是一款安卓ROOT管理工具,可以管理安装软件的ROOT权限分配,也可以在面具插件市场下载riru和riru-lsposed(基于xposed框架,相比edxposed作用于全局,它能够使相关模块只作用于某个选择的APP)下载链接:

https://github.com/topjohnwu/Magisk/releases

640.png

       下载Magisk.apk,修改名称为Magisk.zip,是的,Magisk.zip要通过recovery来进行刷入,由于是新刷入的系统,我们需要再次开启进入开发者模式,启动USB调试,然后关机,进入recovery模式,  这次不要双清  ,直接进入ADB Sideload,电脑端adb.exe sideload Magisk.zip刷入面具包,刷完继续reboot system。

       开启后发现桌面已经有了Magisk应用,但是这时候还是打不开的,会提示缺少Magisk Manager,我们这时候把Magisk.apk扔到手机存储里面,然后在手机内通过文件找到apk,安装即可,这时候就能打开Magisk了。

640.png

       刷入Riru和LSPosed,去面具下面那四个选项里选第四个,然后搜索Riru,先安装Riru在安装LSPosed,安装完后重启手机。

640.png

       桌面上已经有LSPosed了,打开LSPosed,就可以启用各个模块了,LSPosed是对局部应用生效的,选择要生效的APP,然后重新打开这个APP,LSPosed插件就会生效。

image.png

下面模块可以hook SSL-Pinning和对指定APP隐藏root

image.png

0x06 再再次抓包

       继续挂代理抓包,果不其然依旧没抓到,除了手机流量没有任何测试APP的流量产生。

       这个时候我去网上找了一下相关资料发现了一些眉头,由于新刷入的是安卓11,高于安卓7默认不信任用户证书,只能重新打包或者root手机刷入系统证书。相关内容可以参考:

https://cloud.tencent.com/developer/news/17437

(这里又有一个坑,使用adb从电脑往手机里push证书的时候可能会提示Read-only file system,这时候只需要先adb shell进入手机shell,然后su获取root,再输入mount -o rw,remount /system,这样就可以向系统push证书了),完事儿后重启下系统,打开设置-安全-信任的凭据,出现burp证书。

image.png

       再次抓包,依旧失败,这时候想到是不是有代理检测,于是使用postern对流量进行转发,成功抓包。

image.png

0x07 总结

       到后来才发现本次测试APP只需要满足系统证书和流量转发工具即可抓到包,并没有使用SSL-Pinning,我当时在测试本地文件的时候发现了root检测提示信息“设备已被root”,所以一直以为是不是有root检测,走了很多弯路,不过最终还是成功抓到了流量进行了测试,后续测试过程可以直接上系统证书+root隐藏+SSL-Pinning hook+流量转发,基本上能够抓取绝大多数APP流量了。

    APP不信任用户证书可能是高于安卓7也可能开发者在apk的/res/xml/network_security_config.xml文件进行了设置,例如下面就是只信任系统证书。

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>
</network-security-config>

信任系统证书和用户证书

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
            <certificates src="user" /> 
        </trust-anchors>
    </base-config>
</network-security-config>

0x08 抓包姿势总结

  • 无任何检测:直接开代理抓
  • 代理检测:开流量转发工具
  • SSL-Pinning/root检测:xposed插件hook;双向校验需要反编译获取客户端证书
  • 高版本安卓/apk文件不信任用户证书:root导入系统证书
  • 相关工具:除了刷机包和recovery其他的工具打了个包

下载链接:

链接:https://pan.baidu.com/s/12AIUnONW6otKI6QfcI9szQ
提取码:ky3h

内容技巧不多,单纯记录个人工作过程遇到的问题,希望能够帮助遇到类似问题的朋友

参考链接:  

https://forum.butian.net/share/1068

https://cloud.tencent.com/developer/news/17437

https://blog.csdn.net/wlwh90/article/details/45561679

相关实践学习
使用CLup和iSCSI共享盘快速体验PolarDB for PostgtreSQL
在Clup云管控平台中快速体验创建与管理在iSCSI共享盘上的PolarDB for PostgtreSQL。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
相关文章
|
3天前
|
Java Android开发
Rockchip系列之CAN APP测试应用实现(4)
Rockchip系列之CAN APP测试应用实现(4)
24 1
|
3天前
|
测试技术 UED Python
App自动化测试:高级控件交互技巧
Appium 的 Actions 类支持在移动应用自动化测试中模拟用户手势,如滑动、长按等,增强交互性测试。ActionChains 是 Selenium 的概念,用于网页交互,而 Actions 专注于移动端。在Python中,通过ActionChains和W3C Actions可以定义手势路径,例如在手势解锁场景中,先点击设置,然后定义触点移动路径执行滑动解锁,最后验证解锁后的元素状态。此功能对于确保应用在复杂交互下的稳定性至关重要。
38 5
|
3天前
|
XML 数据格式
Xpath高阶定位技巧,轻松玩转App测试元素定位!
XPath是一种用于XML文档中节点定位的语言,支持逻辑运算符(and、or、not)、轴定位、谓词和内置函数。
18 0
|
3天前
|
XML 数据格式 Python
App测试中,强制等待和隐式等待谁更强?
本文介绍了在自动化脚本中添加等待以确保与应用程序同步的重要性。由于应用响应时间的不确定性,适当等待能防止脚本在操作未完成前继续执行,提高测试稳定性。等待包括强制等待(如`time.sleep()`)、隐式等待(全局设置查找元素的等待时间)和显式等待(根据预期条件等待)。示例代码展示了如何在Python的Appium测试中应用这些等待策略,以优化脚本的可靠性和与应用的同步。
24 0
|
3天前
|
测试技术 Python
App自动化测试中,如何更好地处理弹窗?
在App自动化测试中,处理弹窗异常是保证测试稳定性和可靠性的重要环节。当遇到广告弹窗、升级提示等不定时出现的UI元素时,可以采用黑名单处理方法,如上述Python代码示例,通过尝试点击黑名单中的元素来避免干扰。同时,利用异常处理装饰器可以增强函数功能,保持代码整洁,当异常发生时记录日志、截图并保存页面源代码,便于问题排查。这两种策略能有效提升测试的效率和质量。
9 0
|
3天前
|
XML 测试技术 数据格式
解决 App 自动化测试的常见痛点
在App自动化测试中,常见挑战包括启动加载慢和弹框干扰。为处理弹框,可以创建一个黑名单列表,遍历并点击消除。使用`handleAlertByPageSource()`方法结合`getPageSource()`判断弹框元素在当前页面的存在性,提高效率。对于首页加载延迟,使用显示等待特定元素如`user_profile_container`,但需注意弹框可能阻止元素定位。因此,结合PageSource判断首页元素和弹框,确保加载完成判断的准确性。通过这样的优化,能更有效地处理自动化测试中的中断问题。
27 1
|
3天前
|
测试技术 Android开发 索引
XPath定位如何在App自动化测试中大显神威
本文介绍了如何在Appium中使用XPath进行自动化App测试。通过淘宝App实例,展示了XPath在定位元素上的应用,包括基础定位(如通过text、resource-id、class和content-desc属性),contains模糊定位,组合定位以及层级定位(如父、子、兄弟和祖元素定位)。XPath的灵活性和强大功能使得在Appium中高效地定位元素成为可能,从而提升移动应用的测试效率。
17 0
|
3天前
|
监控 安全 Shell
深入探究App压力测试的关键要点:从零开始学习Monkey
Monkey是Google的自动化测试工具,用于模拟用户随机事件以测试应用的稳定性和压力。它可以在模拟器或设备上运行,通过随机点击发现潜在问题。
32 1
|
3天前
|
测试技术 Android开发
快速上手App自动化测试利器,Toast原理解析及操作实例
`Toast`是Android中的轻量级通知,短暂显示在屏幕任意位置,1-2秒后自动消失,不获取焦点且不可点击。Appium通过uiautomator2在控件树中处理Toast。在测试中,可设置隐式等待,利用XPath或Accessibility ID定位Toast元素进行检测和验证。示例代码展示了如何初始化driver,点击触发Toast,以及如何定位并读取Toast文本。
28 3
|
3天前
|
测试技术 UED
APP交互性如何测试?
APP交互性如何测试?

热门文章

最新文章