找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

4519

积分

0

好友

623

主题
发表于 前天 08:19 | 查看: 9| 回复: 0

最近在项目上处理了不少以移动App为目标的资产测试需求,借此机会梳理一下App渗透的常见思路和实操方法。下文分享的案例均来自一两年前的真实项目,漏洞细节经过处理,主要作为技术思路的参考。

查壳与加固分析

拿到一个APK后,首要步骤是检查它是否经过加固。在安服或漏扫任务中,即使APK未加固,这一点也值得写入报告。

通常可以使用APK查壳工具(如PKID)进行分析。下图显示了一个未加固的APK示例,工具列出了其支持的常见加固厂商列表。

APK查壳工具PKID界面,显示当前APK未加固

若APK未加固,便可直接反编译查看源码。这一步类似于前端代码审计,能获取大量接口信息,有时还能发现硬编码等敏感信息。

代码编辑器界面截图,展示反编译后带语法高亮的源码

然而,实战中遇到的APK大多有加固防护。如下图,这个APK使用了360加固。幸运的是,某些版本的360加固相对容易脱壳。我尝试使用frida-dexdump进行脱壳时失败了,推测是应用内置了Frida检测,可能需要使用定制版或隐藏特征的工具才能绕过。

APK查壳工具显示目标APK为360加固

动态脱壳实战

面对加固,动态脱壳是常用手段。这里不展开冗长的理论,直接使用Fundex(一款Xposed模块)配合LSPosed框架进行尝试。

Fundex模块在LSPosed中的启用界面

启动目标App,脱壳成功。脱壳后的dex文件通常会保存在 /data/data/<包名> 目录下。如果不确定目标应用的包名,可以使用 am monitor 命令来监控Activity启动,从而快速定位。

adb shell am monitor

终端执行am monitor命令,监控Activity启动信息

在对应包名目录下,果然找到了多个dex文件。

使用ls -al命令列出/data/data/包名目录下的文件,可见多个.dex文件

将这些dex文件打包下载到电脑,即可进行后续的逆向工程分析。

crux:/data/data/...zj # tar -cvf dexfiles.tar *.dex

终端中使用tar命令打包所有.dex文件

下图展示了成功脱壳后,在反编译工具中看到的清晰Java代码结构。

文件资源管理器界面,展示反编译后清晰的源码目录结构

绕过安全检测

在测试过程中,发现这个App启动了Root检测,手机会弹出警告并强制退出。

手机弹窗警告,提示检测到Root或Hook框架

对于这种情况,可以使用Magisk的模块(如著名的“Shamiko”模块)来隐藏Root状态。关键是在Magisk设置中开启Zygisk,并正确配置排除列表(DenyList)。

Magisk设置界面,展示Zygisk和排除列表的配置选项

成功绕过检测后,App便能正常启动运行。

成功绕过检测后App正常运行的主界面截图

组件安全与本地数据泄漏

Android App由四大组件构成,其配置声明在 AndroidManifest.xml 中。重点关注 activity 标签的 android:exported 属性,若设置为 true,则意味着该组件可以被系统或其他应用调用。

AndroidManifest.xml文件内容,红色框出多个exported为true的activity

这可能导致严重的未授权访问风险。例如,App的登录页面通常有校验,未登录无法进入修改密码页面。

App的登录界面,要求输入账号密码

但如果修改密码的Activity组件被导出,攻击者可以直接通过ADB命令唤起该页面,从而可能被用于制作钓鱼应用。

adb shell am start -n com.xx.apps.xxx/com.xxx.apps.xxx.ui.profile.ChangePasswordActivity

通过ADB命令直接唤起的修改密码页面

另一个常见风险点是AndroidManifest.xmlapplication标签的android:allowBackup属性。如果设置为true,则允许通过adb backup命令备份应用数据,这可能泄漏存储在本地的登录凭证、会话信息等。

AndroidManifest.xml中extractNativeLibs和allowBackup相关配置

使用以下命令可以备份指定应用的数据:

adb backup -noapk com.xxx.apps.xxxx -f app_backup.ab

终端中执行adb backup命令备份应用数据

攻击者获取此备份文件后,可在另一台设备上恢复,从而直接“登录”受害者账号。许多App将敏感信息(如账号密码)以明文或弱加密(Base64、简单MD5)形式存储在本地数据库文件中。

这些数据库文件通常位于 /data/data/<包名>/databases/ 目录下。通过分析,可能发现包含明文密码或可破解哈希的用户表。

数据库管理工具中查看useraccount表,内含用户名、MD5密码等敏感信息

同样,应用日志文件也可能泄露敏感信息。

SqliteStudio工具查看消息日志表,内容可能含敏感数据

与传统Web渗透的结合

除了上述App特有的测试点,常规的Web漏洞挖掘思路同样适用,甚至有时在App中更容易发现。当然,这建立在App未做严格的证书绑定、加固等防护措施的前提下。

例如,在一次测试中,发现了一个OSS(对象存储)临时访问凭证泄漏的漏洞。通过抓取App的网络请求,在其某个接口的响应体中直接返回了包含AccessKeyIdAccessKeySecretSecurityToken的完整STS凭证。

网络抓包截图,响应体中泄露了OSS的AccessKey, Secret等信息

利用这些泄漏的临时凭证,可以直连对应的OSS服务,列出所有存储桶(Bucket)。

OSS浏览器列出所有可访问的存储桶列表

进一步,可以访问桶内的文件,可能导致大量业务数据泄露。

OSS浏览器中显示存储桶内的敏感文件,如员工表、用户信息等

总结

Android App的渗透测试是一个综合性过程,涵盖了逆向分析、组件安全、本地存储安全以及常规的网络协议安全。从查壳脱壳开始,到分析组件导出风险、挖掘本地数据泄漏,最后结合传统Web测试思路,可以构建出一套较为完整的移动端安全评估方法。希望本文的实战思路能为大家提供一些参考。更多关于移动安全与逆向的深度讨论,欢迎访问云栈社区的技术板块。




上一篇:Solana生态Drift Protocol遭2.85亿美元攻击:Lazarus黑客社会工程学与多签漏洞分析
下一篇:从北京L7总监Offer看“大饼式”薪资结构:算法题“单词缩写”的解题启示
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-4-7 17:08 , Processed in 0.594871 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表