网安引领时代,弥天点亮未来
Apktool
Apk反编译得到Java源代码
dex2jar
jd-gui.exe
劫持工具
使用方法
adb工具
PYTHON2.7
drozer工具安装及使用
使用drozer对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%binjava.exe"
)
rem Find the highest version .jar available in the samedirectory as the script
setlocal EnableDelayedExpansion
pushd "%~dp0"
if exist apktool.jar (
setBASENAME=apktool
gotoskipversioned
)
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 .jaror 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
setfastCommand=b
)
if "%ATTR:~0,1%"=="-" if"%~x1"==".apk" (
rem APK file, unpack
setfastCommand=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 notdecode
这个问题,就是apktool.jar比较老旧的问题;apktools.jar下载官网。
得到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进行测试
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
通过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
com.android.mms.service (MmsService)
com.android.providers.downloads
com.android.browser
[Errno 0] Error
使用app.package.info模块查看apk基本信息
dz> run app.package.info -acom.android.providers.downloads
Package: com.android.providers.downloads
ApplicationLabel:
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
DefinesPermissions:
-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 -acom.android.providers.downloads
Package: com.android.providers.downloads
ApplicationLabel:
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
DefinesPermissions:
-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.attacksurfacecom.android.providers.downloads
Attack Surface:
0 activitiesexported
0 broadcastreceivers exported
2 contentproviders exported
1 servicesexported
Shared UID(android.media)
使用app.activity.info模块查看activity组件信息
dz> run app.activity.info -acom.android.providers.downloads
Package: com.android.providers.downloads
No matchingactivities.
使用app.provider.info模块查看contentprovider组件信息
dz> run app.provider.info -acom.android.providers.downloads
Package: com.android.providers.downloads
Authority:downloads
ReadPermission: null
WritePermission: null
ContentProvider: com.android.providers.downloads.DownloadProvider
MultiprocessAllowed: False
Grant UriPermissions: True
Uri PermissionPatterns:
Path:/all_downloads/
Type:PATTERN_PREFIX
Path:/my_downloads/
Type:PATTERN_PREFIX
PathPermissions:
Path:/my_downloads
Type: PATTERN_PREFIX
ReadPermission: android.permission.INTERNET
WritePermission: android.permission.INTERNET
Path:/all_downloads
Type:PATTERN_PREFIX
ReadPermission: android.permission.ACCESS_ALL_DOWNLOADS
WritePermission: android.permission.ACCESS_ALL_DOWNLOADS
Path:/download
Type:PATTERN_PREFIX
ReadPermission: android.permission.INTERNET
WritePermission: android.permission.INTERNET
Authority:com.android.providers.downloads.documents
ReadPermission: android.permission.MANAGE_DOCUMENTS
WritePermission: android.permission.MANAGE_DOCUMENTS
ContentProvider: com.android.providers.downloads.DownloadStorageProvider
MultiprocessAllowed: False
Grant UriPermissions: True
使用app.service.info模块查看service组件信息
dz> run app.service.info -acom.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"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.test.uihijack"
android:versionCode="1"
android:versionName="1.0" >
<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.uihijackcom.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
【推荐阅读】
bundletool工具使用(Android aab包安装)
Google Play上架App之aab转apk和apk转aab的使用方法
Android App Bundle混淆加密加壳加固保护的解决方案(过Google App上架审核)
Gradle Plugin+Transform+ASM Hook并替换隐私方法调用(彻底解决隐私不合规问题)
关注、点赞、转发、分享
原文始发于微信公众号(哆啦安全):App安全检测实践基础
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论