java反编译工具_App安全检测实践基础——工具

网安引领时代,弥天点亮未来   

01515419ee22804c37c3fed475b75b99.png 0x00目录 简述

Apktool

Apk反编译得到Java源代码

dex2jar

jd-gui.exe

劫持工具

使用方法

adb工具

PYTHON2.7

drozer工具安装及使用

使用drozer对app进行测试

01515419ee22804c37c3fed475b75b99.png 0x01APKTooL

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

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

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

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

c2a29ec45559c5889dea13de7a131f98.png

Apktool

下载地址

https://ibotpeaches.github.io/Apktool/install/

3599fc5adbaea6d7dfe64e2eead5a22e.png

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

e830617bd00f67dfac357b59167455bf.png

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

@echo offsetlocalset 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 samedirectory as the scriptsetlocal EnableDelayedExpansionpushd "%~dp0"if exist apktool.jar (    setBASENAME=apktool    gotoskipversioned)set max=0for /f "tokens=1* delims=-_.0" %%A in ('dir /b/a-d %BASENAME%*.jar') do if %%~B gtr !max! set max=%%~nB:skipversionedpopdsetlocal DisableDelayedExpansion rem Find out if the commandline is a parameterless .jaror directory, for fast unpack/repackif "%~1"=="" goto loadif not "%~2"=="" goto loadset ATTR=%~a1if "%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 interactivelyfor /f "tokens=2" %%# in("%cmdcmdline%") do if /i "%%#" equ "/c" pause

69846702d9a1e2c10cff2b2b1e925f20.png

反编译后的文件如下

f8abb512313e7c9ae6899d79fb230d05.png

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

a0b3b8bac013314d34cd1e1827b4e543.png

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

47c8ecc8769f8a79ecfac88bd6b31217.png

c4c450351ddacf82f4770d660a34a3d4.png

注意:

反编译时,可能会报bug:

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

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

01515419ee22804c37c3fed475b75b99.png 0x0 Apk反编译得到Java源代码

b0bd02390a517fc20de6c1aebaf591e5.png

得到classes.dex 文件

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

dex2jar

下载地址

https://sourceforge.net/projects/dex2jar/files/latest/download

c28fbc2581ad163922dbcd9e279f3a3c.png

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

e7461143417b7a4a0369c28070c8a674.png

jd-gui.exe

下载地址:

https://www.sdbeta.com/plus/download.php?open=2&id=224579&uhash=6fd792195f5c2d1cd6f23471

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

6b63234c3e771318ee5f874186896d3f.png

716f4865ac23aae148710a8dd9991193.png

01515419ee22804c37c3fed475b75b99.png 0x03劫持工具

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

https://github.com/aloswoya/android_app

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

f4fdd552855e11ce0c63a769513d142f.png

703011a5ccf1d3bedfbd63a12783e327.png

a9589fa88c8570e5fd6f51ad7060e981.png

87140787bca9d6134aab0b0d971696b0.png

01515419ee22804c37c3fed475b75b99.png 0x04使用方法

adb工具

简介

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

安装过程

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

f30ec671b06c8168d3ffffc0dd43361d.png

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

6873bf95f23882f473505792c1a7efd4.png

设置环境变量

4001bfb6628e7b95b97fa298c5186f08.png

安装结果

f383ca54dab2037889e511ed26f635d4.png

52b8cae2fef203df4f17b4a7b2214c42.png

bcac045fff33631f6d7167d4da98c285.png

1c77d92256d6dd751d8a25ae5e7afb97.png

abe71d3a043206ff79d5214bf1bfc758.png

PYTHON2.7

下载地址

https://www.python.org/downloads/release/python-2718/

9a840a4979c7ec49d0caa7bef27bbf90.png

bffb1ee1caeff989e6a217bbd1b64328.png

安装结果

af3d4a26c9511acab04db8339ce0bd72.png

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

465e6a5c1bd070d414149e5bef7a45b0.png

0ce44a76cad8a7c927274a11ecb6fa49.png

将agent.apk 导入模拟器里

6b5a2cdc8b9d9a2ba094c165e86012b1.png

2ab800c34171325af2d2c6a3a82f8bc3.png

使用过程

b67a2d7466eee8aaaa3fa5be01cbb8c9.png

使用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的命名变量。

4152b3f045106719f0415ad185038aec.png

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

8224ea2aabd8d3ef502753502743652d.png

通过app.package.list模块获取要检测的app的包名dz> run app.package.listcom.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.apkcould not find the package: /system/priv-app/DownloadProvider/DownloadProvider.apkdz> run app.package.info -a DownloadProvider.apkcould not find the package: DownloadProvider.apkdz> run app.packag.list -f DownloadProvider.apkunknown module: 'app.packag.list'dz> run app.package.list -f DownloadProvider.apkdz> run app.package.info -acom.android.providers.downloadsPackage: 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.downloadsAttack 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.downloadsPackage: com.android.providers.downloads  No matchingactivities. 使用app.provider.info模块查看contentprovider组件信息dz> run app.provider.info -acom.android.providers.downloadsPackage: 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.downloadsPackage: com.android.providers.downloads com.android.providers.downloads.DownloadIdleService    Permission:android.permission.BIND_JOB_SERVICE

安装apk文件

f5e7ccddbb1b8db2feb86f6b043f0e72.png

源码地址

https://github.com/aloswoya/android_app

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

20dc068175333d81684571fdec13934e.png

<?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>

596346ae63807f19000d131ac4bf45b8.png

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

run app.activity.start --component com.test.uihijackcom.test.uihijack.MainActivity

效果图如下:

68c04a7b727ca8d4f7c3b9c824bce9cf.png

修复建议

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

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

如果在后台了,就进行一些如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

a2def26772f116d95a018cb92740ca8c.png

静态逆向分析工具-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

16bb5a676ec99288d70f92092b2bd80d.png

0x05参考链接

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

100f5f400df38cec4e644d83050524f9.png

6ae2dda1e20233d43e349cd063a2de65.gif 

知识分享完了

喜欢别忘了关注我们哦~

予以风动,必降弥天之润!

   弥  天

安全实验室

10b33ed42bf2c8310ea1498c9afde19d.png
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值