App安全检测实践基础——工具

本文涉及的产品
阿里云百炼推荐规格 ADB PostgreSQL,4核16GB 100GB 1个月
简介: App安全检测实践基础——工具

目录

Apktool

Apk反编译得到Java源代码

dex2jar

jd-gui.exe

劫持工具

使用方法:

adb工具

PYTHON2.7

drozer工具安装及使用

使用drozer对app进行测试

App安全检测实践基础——工具

apktool:简而言之就是获取资源文件,主要查看res文件下xml文件、AndroidManifest.xml和图片。

(注意:如果直接解压.apk文件,xml文件打开全部是乱码)

dex2jar:将apk反编译成Java源码(classes.dex转化成jar文件)

jd-gui:查看APK中classes.dex转化成出的jar文件,即源码文件

Apktool
下载地址:https://ibotpeaches.github.io/Apktool/install/

windows则下载,放置同一目录;名字一样【放置在要检测的apk里最好方便检测】

apktool.bat 不好下载可以用我这个

@echo off
setlocal
set BASENAME=apktool_
chcp 65001 2>nul >nul

set java_exe=java.exe

if defined JAVA_HOME (
set java_exe="%JAVA_HOME%\bin\java.exe"
)

rem Find the highest version .jar available in the same directory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
set BASENAME=apktool
goto skipversioned
)
set max=0
for /f "tokens=1 delims=-_.0" %%A in ('dir /b /a-d %BASENAME%.jar') do if %%~B gtr !max! set max=%%~nB
:skipversioned
popd
setlocal DisableDelayedExpansion

rem Find out if the commandline is a parameterless .jar or directory, for fast unpack/repack
if "%~1"=="" goto load
if not "%~2"=="" goto load
set ATTR=%~a1
if "%ATTR:~0,1%"=="d" (
rem Directory, rebuild
set fastCommand=b
)
if "%ATTR:~0,1%"=="-" if "%~x1"==".apk" (
rem APK file, unpack
set fastCommand=d
)

:load
%java_exe% -jar -Duser.language=en -Dfile.encoding=UTF8 "%~dp0%BASENAME%%max%.jar" %fastCommand% %*

rem Pause when ran non interactively
for /f "tokens=2" %%# in ("%cmdcmdline%") do if /i "%%#" equ "/c" pause

反编译后的文件如下

将反编译后的文件重新打包

目录文件内多了一个build、dist

注意:

反编译时,可能会报bug:

Exception in thread “main” brut.androlib.AndrolibException: Could not decode

这个问题,就是apktool.jar比较老旧的问题; apktools.jar下载官网。

Apk反编译得到Java源代码

得到classes.dex 文件

它就是java文件编译再通过dx工具打包而成的,将获取到的classes.dex放到之前解压出来的工具dex2jar文件夹内

dex2jar
下载地址:https://sourceforge.net/projects/dex2jar/files/latest/download

去执行命令在该目录下,然后生成jar文件

jd-gui.exe
下载地址:https://www.sdbeta.com/plus/download.php?open=2&id=224579&uhash=6fd792195f5c2d1cd6f23471

使用jd-gui.exe去分析生成的classes-dex2jar.jar包

劫持工具
那么在实际检测该漏洞的时候,可以利用工具逆向、扫描源代码进行分析,查看代码在关键位置是否进行了一些报警,如toast。实现的方法为直接使用一个测试的apk对目标应用进行界面覆盖,观察目标应用是否进行了报警。

https://github.com/aloswoya/android_app

在styles.xml文件中利用样式配置将界面设置为透明

使用方法:
adb工具
简介

adb是Android的一个很重要的调试工具,熟练掌握后可实现很多功能,比如有些手机的解锁、ROOT就会用到adb工具

 安装过程

https://developer.android.com/studio/releases/platform-tools

由于网速的问题没下载下来,然后从其他网站上下载了一个比较旧的版本

设置环境变量

安装结果

PYTHON2.7
地址:https://www.python.org/downloads/release/python-2718/

安装结果

drozer工具安装及使用
简介

drozer是一款针对Android系统的安全测试框架。

Drozer可以通过与Dalivik VM,其它应用程序的IPC端点以及底层操作系统的交互,避免正处于开发阶段,或者部署于的组织的android应用程序和设备暴露出不可接受的安全风险。

drozer提供了很多Android平台下的渗透测试exploit供你使用和分享。

对于远程漏洞,drozer能够生产shellcode帮助你部署drozer代理作为一个远程管理工具,最大化对设备的利用。

更快的Android安全评估drozer可以大大缩减Android安全评估的耗时,通过攻击测试暴露Android APP的漏洞。

基于真机的测试

drozer运行在Android模拟器和真实设备上,它不需要USB调试或其他开发即可使用。

自动化和扩展drozer有很多扩展模块,你可以找到他们进行测试以发现Android安全问题

安装过程

https://github.com/FSecureLABS/drozer/releases

将agent.apk 导入模拟器里

使用过程

使用drozer对app进行测试
官方直接指定的drozer支持命令及其命令说明列表如下

命令 描述
run 执行驱动模块
list 显示可在当前会话中执行的所有drozer模块的列表。这将隐藏您没有适当权限运行的模块。
shell 在代理进程的上下文中,在设备上启动交互式Linux Shell。
cd 挂载特定的名称空间作为会话的根目录,以避免重复输入模块的全名。
clean 删除drozer在Android设备上存储的临时文件。
contributors 显示为系统中使用的drozer框架和模块做出贡献的人员列表。
echo 将文本打印到控制台。
exit 终止驱动程序会话。
help 显示有关特定命令或模块的帮助。
load 加载包含drozer命令的文件,并依次执行它们。
module 从Internet查找并安装其他drozer模块。
permissions 显示授予drozer代理的权限列表。
set 将值存储在变量中,该变量将作为环境变量传递给drozer生成的任何Linux shell。
unset 删除drozer传递给它产生的任何Linux shell的命名变量。

找到所要测试安卓应用程序的包名

通过app.package.list模块获取要检测的app的包名
dz> run app.package.list
com.android.providers.telephony (绉诲姩缃戠粶閰嶇疆)
com.android.providers.calendar (鏃ュ巻瀛樺偍)
com.android.providers.media (濯掍綋瀛樺偍)
com.android.wallpapercropper (com.android.wallpapercropper)
com.android.documentsui (鏂囨。)
com.android.externalstorage (澶栭儴瀛樺偍璁惧)
com.android.htmlviewer (HTML 鏌ョ湅绋嬪簭)
com.android.mms.service (MmsService)
com.android.providers.downloads (涓嬭浇绠$悊绋嬪簭)
com.android.browser (娴忚鍣?
[Errno 0] Error

使用app.package.info模块查看apk基本信息
dz> run app.package.info -a com.android.providers.downloads

Package: com.android.providers.downloads
Application Label: 涓嬭浇绠$悊绋嬪簭
Process Name: android.process.media
Version: 5.1.1-500200917
Data Directory: /data/data/com.android.providers.downloads
APK Path: /system/priv-app/DownloadProvider/DownloadProvider.apk
UID: 10004
GID: [1028, 1015, 1023, 1024, 2001, 3003, 3007]
Shared Libraries: null
Shared User ID: android.media
Uses Permissions:

  • android.permission.RECEIVE_BOOT_COMPLETED
  • android.permission.ACCESS_DOWNLOAD_MANAGER
  • android.permission.ACCESS_CACHE_FILESYSTEM
  • android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.INTERNET
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.ACCESS_ALL_DOWNLOADS
  • android.permission.UPDATE_DEVICE_STATS
  • android.permission.CONNECTIVITY_INTERNAL
  • android.permission.MODIFY_NETWORK_ACCOUNTING
  • android.permission.CLEAR_APP_CACHE
  • android.permission.WAKE_LOCK
  • android.permission.READ_EXTERNAL_STORAGE
    Defines Permissions:
  • android.permission.ACCESS_DOWNLOAD_MANAGER
  • android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED
  • android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  • android.permission.DOWNLOAD_CACHE_NON_PURGEABLE
  • android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
  • android.permission.ACCESS_ALL_DOWNLOADS

dz> run app.package.info -a /system/priv-app/DownloadProvider/DownloadProvider.apk
could not find the package: /system/priv-app/DownloadProvider/DownloadProvider.apk
dz> run app.package.info -a DownloadProvider.apk
could not find the package: DownloadProvider.apk
dz> run app.packag.list -f DownloadProvider.apk
unknown module: 'app.packag.list'
dz> run app.package.list -f DownloadProvider.apk
dz> run app.package.info -a com.android.providers.downloads
Package: com.android.providers.downloads
Application Label: 涓嬭浇绠$悊绋嬪簭
Process Name: android.process.media
Version: 5.1.1-500200917
Data Directory: /data/data/com.android.providers.downloads
APK Path: /system/priv-app/DownloadProvider/DownloadProvider.apk
UID: 10004
GID: [1028, 1015, 1023, 1024, 2001, 3003, 3007]
Shared Libraries: null
Shared User ID: android.media
Uses Permissions:

  • android.permission.RECEIVE_BOOT_COMPLETED
  • android.permission.ACCESS_DOWNLOAD_MANAGER
  • android.permission.ACCESS_CACHE_FILESYSTEM
  • android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  • android.permission.ACCESS_NETWORK_STATE
  • android.permission.INTERNET
  • android.permission.WRITE_EXTERNAL_STORAGE
  • android.permission.ACCESS_ALL_DOWNLOADS
  • android.permission.UPDATE_DEVICE_STATS
  • android.permission.CONNECTIVITY_INTERNAL
  • android.permission.MODIFY_NETWORK_ACCOUNTING
  • android.permission.CLEAR_APP_CACHE
  • android.permission.WAKE_LOCK
  • android.permission.READ_EXTERNAL_STORAGE
    Defines Permissions:
  • android.permission.ACCESS_DOWNLOAD_MANAGER
  • android.permission.ACCESS_DOWNLOAD_MANAGER_ADVANCED
  • android.permission.SEND_DOWNLOAD_COMPLETED_INTENTS
  • android.permission.DOWNLOAD_CACHE_NON_PURGEABLE
  • android.permission.DOWNLOAD_WITHOUT_NOTIFICATION
  • android.permission.ACCESS_ALL_DOWNLOADS

使用app.package.attacksurface模块识别攻击面
所谓攻击面,应该就是指可export的安卓四大组件(activaty、broadcast receiver、content provider、service)

dz> run app.package.attacksurface com.android.providers.downloads
Attack Surface:
0 activities exported
0 broadcast receivers exported
2 content providers exported
1 services exported
Shared UID (android.media)

使用app.activity.info模块查看activity组件信息
dz> run app.activity.info -a com.android.providers.downloads
Package: com.android.providers.downloads
No matching activities.

使用app.provider.info模块查看content provider组件信息
dz> run app.provider.info -a com.android.providers.downloads
Package: com.android.providers.downloads
Authority: downloads
Read Permission: null
Write Permission: null
Content Provider: com.android.providers.downloads.DownloadProvider
Multiprocess Allowed: False
Grant Uri Permissions: True
Uri Permission Patterns:
Path: /all_downloads/
Type: PATTERN_PREFIX
Path: /my_downloads/
Type: PATTERN_PREFIX
Path Permissions:
Path: /my_downloads
Type: PATTERN_PREFIX
Read Permission: android.permission.INTERNET
Write Permission: android.permission.INTERNET
Path: /all_downloads
Type: PATTERN_PREFIX
Read Permission: android.permission.ACCESS_ALL_DOWNLOADS
Write Permission: android.permission.ACCESS_ALL_DOWNLOADS
Path: /download
Type: PATTERN_PREFIX
Read Permission: android.permission.INTERNET
Write Permission: android.permission.INTERNET
Authority: com.android.providers.downloads.documents
Read Permission: android.permission.MANAGE_DOCUMENTS
Write Permission: android.permission.MANAGE_DOCUMENTS
Content Provider: com.android.providers.downloads.DownloadStorageProvider
Multiprocess Allowed: False
Grant Uri Permissions: True

使用app.service.info模块查看service组件信息
dz> run app.service.info -a com.android.providers.downloads
Package: com.android.providers.downloads
com.android.providers.downloads.DownloadIdleService
Permission: android.permission.BIND_JOB_SERVICE

安装apk文件

源码地址:https://github.com/aloswoya/android_app

目的:方法为直接使用一个测试的APK对目标应用进行界面覆盖,观察目标应用是否进行了报警。

<?xml version="1.0" encoding="utf-8"?>

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="21" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.test.uihijack.MainActivity"
        android:exported="true"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

打包完成后,在测试apk开启的情况下,使用drozer来调用MainActivity:

run app.activity.start --component com.test.uihijack com.test.uihijack.MainActivity
效果图如下:

修复建议

测试到缺陷后,开发方需要对程序进行修复,修复方法也很简单,

就是也去判断当前应用程序是否位于栈顶 (是否显示在前面),

如果在后台了,就进行一些如toast提示、震动、通知弹窗等等,告诉用于当前应用已经在后台运行了。

通过在线工具进行测试
1.腾讯金刚审计系统
http://service.security.tencent.com

优点:包含了修复建议

2.阿里聚安全检测

网址: http://jaq.alibaba.com/
阿里聚安全下有自己的安全博客,包含一些:1.安全漏洞、2.病毒分析、3.技术研究、4.安全报告相关文档。

3.360捉虫猎手检测结果

网址: http://appscan.360.cn/
同样有自己的安全博客

4.爱加密

网址:http://safe.ijiami.cn/analyze
优点:在导出的报告中可以看到对当前apk的评分

5.百度MTC

网址: http://mtc.baidu.com/

HijackActivity-劫持工具

https://github.com/rohitshampur/droidsheep/blob/master/%20droidsheep/DroidSheep_public/src/de/trier/infsec/koch/droidsheep/activities/HijackActivity.java

静态逆向分析工具-jeb;下载地址:http://www.uzzf.com/soft/313572.html

Android Killer

Tcpdump数据抓包工具;下载地址:https://www.81857.net/soft/11276.html#xzq

xposed - android hook框架[雷神模拟器或者夜神模拟器内搜索安装就行]
JustTrustMe - xposed框架下信任所有证书的插件实现[giithub上搜索]
或者查看https://blog.csdn.net/weixin_43650289/article/details/109105943

参考链接:

https://www.freebuf.com/sectool/249725.html

https://blog.csdn.net/JiaoMaGe/article/details/103023839?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~all~first_rank_v2~rank_v25-3-103023839.nonecase&utm_term=activity%20%E7%95%8C%E9%9D%A2%E5%8A%AB%E6%8C%81%E5%B7%A5%E5%85%B7&spm=1000.2123.3001.4430

https://www.52pojie.cn/thread-749955-1-1.html

https://blog.csdn.net/wizardforcel/article/details/54755814

https://blog.csdn.net/nancyfh/article/details/81196070

https://www.cnblogs.com/zhaoyixiang/p/11236458.html

http://www.mamicode.com/info-detail-2486333.html

https://www.jianshu.com/p/7c0a6da594c8

https://www.cnblogs.com/lsdb/p/9441813.html

https://blog.csdn.net/weixin_39190897/article/details/108802836
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_43650289/article/details/109160297

相关实践学习
阿里云百炼xAnalyticDB PostgreSQL构建AIGC应用
通过该实验体验在阿里云百炼中构建企业专属知识库构建及应用全流程。同时体验使用ADB-PG向量检索引擎提供专属安全存储,保障企业数据隐私安全。
AnalyticDB PostgreSQL 企业智能数据中台:一站式管理数据服务资产
企业在数据仓库之上可构建丰富的数据服务用以支持数据应用及业务场景;ADB PG推出全新企业智能数据平台,用以帮助用户一站式的管理企业数据服务资产,包括创建, 管理,探索, 监控等; 助力企业在现有平台之上快速构建起数据服务资产体系
目录
相关文章
|
6月前
|
移动开发 JavaScript 小程序
从入门到实践:Uni-app跨平台开发与应用
从入门到实践:Uni-app跨平台开发与应用
368 1
|
6月前
|
数据采集 JSON 监控
Kotlin高效App爬取工具:利用HttpClient与代理服务器的技巧
Kotlin高效App爬取工具:利用HttpClient与代理服务器的技巧
|
6月前
|
小程序 容器 JavaScript
探索uni-app:构建跨平台应用的神奇工具
探索uni-app:构建跨平台应用的神奇工具
|
6月前
|
XML Java 测试技术
『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略
『App自动化测试之Appium应用篇』| 元素定位工具Appium-Inspector从简介、安装、配置到使用的完整攻略
761 3
|
6月前
|
XML Java Android开发
Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)
Android App开发实战项目之模仿美图秀秀的抠图工具(附源码和演示视频 简单易懂 可直接使用)
202 0
|
6月前
|
JavaScript 前端开发 测试技术
移动端(APP)自动化脚本工具详细列举(autojs、easyclick、hamibot、ctrljs ...)
移动端(APP)自动化脚本工具详细列举(autojs、easyclick、hamibot、ctrljs ...)
2033 0
|
6月前
|
小程序 开发者
关于UniApp启动到微信小程序工具提示找不到app.json
关于UniApp启动到微信小程序工具提示找不到app.json
582 0
|
6月前
|
XML 测试技术 开发工具
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
『App自动化测试之Appium应用篇』| 元素定位工具uiautomatorviewer从简介、特点、启动到使用的完整过程
228 4
|
5天前
|
数据采集 网络协议 算法
移动端弱网优化专题(十四):携程APP移动网络优化实践(弱网识别篇)
本文从方案设计、代码开发到技术落地,详尽的分享了携程在移动端弱网识别方面的实践经验,如果你也有类似需求,这篇文章会是一个不错的实操指南。
15 1
|
2月前
|
测试技术
基于LangChain手工测试用例转App自动化测试生成工具
在传统App自动化测试中,测试工程师需手动将功能测试用例转化为自动化用例。市面上多数产品通过录制操作生成测试用例,但可维护性差。本文探讨了利用大模型直接生成自动化测试用例的可能性,介绍了如何使用LangChain将功能测试用例转换为App自动化测试用例,大幅节省人力与资源。通过封装App底层工具并与大模型结合,记录执行步骤并生成自动化测试代码,最终实现高效自动化的测试流程。