一、            实验环境搭建

1.      安装JDK

2.      安装Android Studio

3.      模拟器或真机

我的是夜神模拟器和nexus

工具

Apktool

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

下载完成直接保存打开,启动apktool,使用下面命令查看选项帮助

Dex2jar/JD-GUI

Dex2jar和JD-GUI是安卓应用逆向工程中经常用到的两个工具。Dex2jar能将.dex文件转换 为.jar文件。JD-GUI则是一个Java反编译工具,可以将.jar文件还原为原始的Java源代码

下载地址:http:// sourceforge.net/projects/dex2jar/     http://jd.benow.ca

下载后无需安装直接可以打开。

Burp suite

下载地址:http://portswigger.net/burp/download.html

手机端设置bp代理,进行APP流量抓取分析。

Drozer

下载地址:https://labs.mwrinfosecurity.com/tools/drozer/

agent

下载地址:https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk

电脑安装drozer,安装完测试

接下来安装前面下载的agent.apk,安装到模拟器或者真机上。可以使用adb命令进行安装.apk文件。

在使用drozer进行评估之前,我们首先要将工作站中的drozer控制台连接到模拟器的代理上。所以我们先要在模拟器上启动代理,并使用命令进行端口转发。

端口转发并启动连接到手机

Advanced REST Client

谷歌扩展程序,直接从谷歌商店下载

adb基础

adb是一款对安卓应用进行渗透测试的必备工具,Android SDK默认自带adb,它位于Android SDK的platform-tools目录中。

adb基础命令

adb connect 127.0.0.1:62001 链接夜神模拟器

adb devices 查看连接

adb logcat  打印logcat

adb install  安装,覆盖安装是-r

adb uninstall卸载

adb push   推送本地文件至 Android 设备

adb pull    推送Android文件至本地

adb shell mount -o remount rw / 修改系统读写权限

adb root  获得root权限

adb kill-server  重启

二、            安卓ROOT

1.      什么是root

Android 是基于Linux内核的系统,Linux有两种用户系统:一种是普通用户账户,一种是root账户。普通用户账户的权限通常比较低,在进行软件安装、操作系统设置更改等特权操作之前需要获得root权限。而root账户享有诸如更新应用、安装软件、执行命令等权限。root用户能对整个系统进行更精细化的控制,通过对设备进行完全控制的行为被称为root。

检测你是否拥有设备root权限的一个简单方法是,在adb shell中执行su命令。

在root过的设备上,通常我们的UID等于0,root shell中使用”#”而不是”$”来表示root。

2.      为什么要root设备

由于硬件制造商和运营商的限制,我们不能完全控制安卓设备。通过ROOT设备,我们能够突破这些限制,从而获得额外的权限。

root的好处

l  完全控制设备:在默认情况下,普通用户不能完全访问设备,但在ROOT之后,用户可以完全控制安卓设备

l  安装其他应用:拥有root权限的用户可以安装一些具有特殊功能的应用,这些应用被称为root应用

l  更多的特性和个性化功能:在安卓设备上安装第三方的recovery和ROM之后,可以获得更好的特性和个性化功能

root的坏处

   ROOT降低设备的安全性:一旦设备被ROOT之后,它的安全性就会降低。

  让设备变砖:设备变砖的意思是,它可能会变得毫无 用处,你需要找到修复的方法。

  使保修失效:ROOT过的设备会使保修失效。

3.      锁定和已解锁的boot loader

boot loader是设备启动后先运行的程序。它负责维护和启动硬件和安卓内核,若没有它, 设备将无法启动。

三、            安卓应用的基本构造

1.      安卓应用基础知识

1.1     安卓应用结构

解压APK文件的步骤如下。

(1) 把文件扩展名.apk改成.zip。

(2) 在Linux或Mac系统中,使用下面的命令解压文件:

Unzip filename.zip 在Windows系统中,可以使用7-Zip、WinRAR或者其他类似的工具来解压文件。

文件或文件夹包含的内容

  AndroidManifest.xml:包含应用的大部分配置信息、包名、应用组件、组件安全设置、应 用所需权限,等等。

  classes.dex:包含由开发人员编写的源代码生成的Dalvik字节码,以及应用在设备上运行 时所执行的内容。

  resources.arsc:包含编译过的资源。

  Res:包含应用所需的原始资源,比如应用图标等图片。

  Assets:用于存放开发人员感兴趣的音乐、视频、预置的数据库等文件,这些文件会与应 用绑定。

  META-INF:用于存放应用签名和应用所用到的所有文件的SHA1摘要。

1.2     APK文件存储位置

  /data/app/   用户安装应用的存放位置,全局可读可复制

  /system/app/   存放系统自带的应用程序,全局可读可复制

  /data/app-private/   存放禁止复制的应用,有root权限便可提取。

提取过程:

(1) 找到应用包名;

(2) 找到APK文件在设备上的存储路径;

(3) 从设备上拉取APK文件

2.      安卓应用组件

安卓基本组件:activity、service、connect provider、broadcastreceive

2.1     activity

activity为用户提供了一个可以通过与之交互来完成某些操作的界面。有时,activity会包含多 个fragment。fragment表示activity中的一个行为或用户界面的一部分。用户可以在activity中进行 打电话、发短信等操作。

2.2     service

服务可以在后台长时间运行,而且不提供用户界面。以音乐应用为例,当选好歌曲后,你可 以关闭它的所有界面,它能在后台正常播放歌曲

2.3     内容提供程序

内容提供程序以一个或多个表格的形式为外部应用提供数据。如果应用需要与其他应用共享 数据,内容提供程序就是一种方法,它可以充当应用间的数据共享接口。内容提供程序使用标准 的insert()、query()、update()、delete()等方法来获取应用数据。所有的内容提供程序 都使用content://开头的特殊格式的URI。只要知道这个URI并拥有合适的权限,任何应用都可以 从内容提供程序的数据库中进行数据插入、更新、删除和查询等操作。

2.4     广播接收器

广播接收器是一个能在设备系统中接收广播通知的组件。它能接收诸如低电量、启动完成、 耳机连接等消息。虽然大部分广播事件都是由系统发起的,但是应用也可以发出广播。从开发人 员的角度来说,当应用需要针对特定的事件做出反应时,就可以使用广播接收器。

_______________________________________________________________________________________________________________________________________________________

内容来源于《Android App安全攻防实践》,记录一下自己的学习笔记

Android App安全渗透测试(一)的更多相关文章

  1. Android平台下渗透测试工具大集合

    Android平台下渗透测试工具大集合 分享一个google的项目,各种Android下的渗透测试工具. Ad Network Detector (1.2): http://market.androi ...

  2. 【原创】记一次对X呼APP的渗透测试

    获取CMS并本地安装 X呼是一款开源的客服CMS系统,访问官网,下载安卓版本的app和源码本地搭建: 发现这cms预留admin表中的用户就不少.... 直接用预留的密码解密,然后就能登录手机APP了 ...

  3. 一次失败的APP业务渗透测试

    作者:whoamiecho 来源:ichunqiu 本文参加i春秋社区原创文章奖励计划,未经许可禁止转载! 一.  过程 1.1.事情起因:暴力破解 测试给了个普通用户账号,可以登录.APP一来就要登 ...

  4. Android APP弱网测试问题和解决分析

    最近做了一次移动APP的弱网和中断测试,接下来分享一下遇到的一些问题: 1.现象:用户登录应用时下载初始化数据,下载过程中因网速太慢点击取消并重新登录,数据初始化完成后出现重复,造成数据不一致. 原因 ...

  5. Android渗透测试Android渗透测试入门教程大学霸

    Android渗透测试Android渗透测试入门教程大学霸 第1章  Android渗透测试 Android是一种基于Linux的自由及开放源代码的操作系统,主要用于移动设备,如智能手机.平板等.目前 ...

  6. Android App 压力测试方法(Monkey)

    一.为什么要开展压力测试 a.提高产品的稳定性:b.提高产品的留存率 二.什么时候开展压力测试 a.首轮功能测试通过后:b.下班后的夜间进行 三.7个基础知识(理论部分) 3.1 手动测试场景与自动测 ...

  7. 自动化移动安全渗透测试框架:Mobile Security Framework

    自动化移动安全渗透测试框架:Mobile Security Framework 译/Sphinx  测试开发社区  7月3日 Mobile Security Framework (移动安全框架) 是一 ...

  8. Android App渗透测试工具drozer,Qark,Androguard

    一. drozer简介 drozer(以前称为Mercury)是一款Android安全测试框架. drozer允许您通过承担应用程序的角色并与Dalvik VM,其他应用程序的IPC端点和底层操作系统 ...

  9. Android App渗透测试工具汇总

    网上搜集了一些App安全学习教程及工具,项目地址:https://github.com/Brucetg/App_Security 一. drozer简介 drozer(以前称为Mercury)是一款A ...

随机推荐

  1. SVM多核学习方法简介

    作者:Walker SVM是机器学习有监督学习的一种方法,常用于解决分类问题,其基本原理是:在特征空间里寻找一个超平面,以最小的错分率把正负样本分开.因为SVM既能达到工业界的要求,机器学习研究者又能 ...

  2. 两行代码统计模型参数量与FLOPs,这个PyTorch小工具值得一试

    你的模型到底有多少参数,每秒的浮点运算到底有多少,这些你都知道吗?近日,GitHub 开源了一个小工具,它可以统计 PyTorch 模型的参数量与每秒浮点运算数(FLOPs).有了这两种信息,模型大小 ...

  3. PHP7内核:源码分析的环境与工具

    本文主要介绍分析源码的方式,其中包含环境的搭建.分析工具的安装以及源码调试的基本操作. 一.工具清单 PHP7.0.12 GDB CLion 二.源码下载及安装 $ wget http://php.n ...

  4. 巴什博弈 HDU-1846

    描述:一堆石子有 n 个 ,两个人开始轮流取,每人最多取m个,最少取1个,最后一个将石子取完的是赢家. 思路:对于先手来说,如果有(m+1)个石子,先手取 k 个,后手就可以取 m+1-k 个,所以有 ...

  5. Linux 常用命令速记

    1.touch:创建文件,比如: touch a.txt   2.vi:编辑修改文件,比如: vi a.txt 打开编辑页面后: a 键:开始输入编辑: Esc键:结束输入内容 :wq:保存文件编辑内 ...

  6. coding++:error Could not read JSON: Unexpected token (START_OBJECT), expected START_ARRAY: need JSON Array to contain As.WRAPPER_ARRAY type information for class java.lang.Object

    Spring源码中是使用容器中的ObjectMapper对象进行序列化和反序列化. 当我们将自定义的ObjectMapper对象放入IOC容器中后,会自动覆盖SpringBoot自动装载的Object ...

  7. I - 动物狂想曲 HDU - 6252(差分约束)

    I - 动物狂想曲 HDU - 6252 雷格西桑和路易桑是好朋友,在同一家公司工作.他们总是一起乘地铁去上班.他们的路线上有N个地铁站,编号从1到N.1站是他们的家,N站是公司. 有一天,雷格西桑起 ...

  8. hello world: 我的博客写作思路

    1. 本人计算机专业,研究生刚毕业,即将入职金融科技领域,决定借博客园平台写自己的博客,原因如下: 从小白到大白,离不开各大学习平台和技术博客的指导和分享,是时候回馈了. 借此机会整理自己从本科.研究 ...

  9. js 数组 随机排序

    方法一: function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1) + min) } fu ...

  10. HTML5+CSS+JQuery 实现简单的进度条功能

    样式: <style type="text/css"> .processcontainer2{ width:450px; border:1px solid #6C9C2 ...