本文是我的关于如何开始Android逆向系列文章的第一部分。在文末提供了一个文档,你可以根据该文档说明部署同我一样的实验环境。

在了解android应用的逆向之前,你必须对android平台及其架构和android应用程序的构建块(组件)已有了一个较好的理解。如果你并不了解这些,那么我建议你先参阅以下链接,然后再继续浏览本文。

我当前的实验室环境如下:主机系统为windows,其中安装了virtual box 和 genymotion

virtual box 和 genymotion的设备都处于桥接模式

Android 4.4 (kitkat API version 19)

在virtual box中,kali linux也同时运行(与genymotion一起)

注:该设置并非固定,你可以根据自身需求环境进行调整。例如,你也可以使用kali linux作为你的主机系统,并在上面安装genymotion。

在正式开始我们的逆向之旅前,我想先向大家介绍一下名为adb(android debugger bridge)的工具/服务器。它可以帮助我们连接,获取数据并将指令传递给远程Android设备(调试模式可以通过设备设置中的开发者模式打开)。当前情况下,我们将使用genymotion设备(虚拟设备)。

对于安卓应用的逆向,这里有一个非常好的可供我们学习和练习的apk -  DIVA ( Damn insecure and vulnerable mobile Application )。这是一个由Payatu的安全分析师开发的脆弱安卓应用。下面我们也将以该应用为例:

首先,让我们来启动genymotion设备:在Windows/Linux中搜索Genymotion应用

Start genymotion

选中你想要启动的设备,然后点击Start按钮。

如果你以上步骤正确执行,则应该能看到类似以下的界面:

可以看到Android设备已经启动,现在我们来启动虚拟机中的kali linux。步骤如下:启动virtual box

从中启动kali虚拟机

注:这两个虚拟机处于桥接模式。如果有DHCP服务器,则需要连接到路由器或网络。

现在两台机器都已启动,下面让我们来检查下kali和Android设备之间的连接情况。为此,我们需要获取Android设备的IP地址。导航到设置菜单

单击WiFi选项

你会在网络中看到WiredSSID

长按“WiredSSID”选项

你会看到如下所示界面

获取IP后我们回到kali终端,并键入以下命令检查连接情况:adb connect 192.168.20.74

如果命令正确执行,你将会看到以下输出。

现在让我们通过执行以下命令,来验证设备是否真正连接:adb devices

通过确认我们得知设备已连接到IP地址192.168.20.74和5555端口(adb默认的连接端口为5555)。

现在,我们就可以在Android设备上执行不同的adb命令了。通过-h选项查看可用参数:adb -h

在帮助信息中会为你列出所有可用的参数选项。下面是一些在逆向中时常会用到的命令:

ADB 调试adb devices – Lists all the connected devices

adb forward – used for forwarding socket connections

adb kill-serve

无线adb connect – connects to the remote device

adb usb – connects to the USB attached device

包管理器adb install – install a package adb uninstall - uninstall a package adb shell pm list packages – used for displaying lists of packages installed adb shell pm path – used for displaying package path on device adb shell pm clear

文件管理器adb pull – used for pulling / downloading a file adb push – used for pushing / uploading a file adb shell ls – used for displaying list of files and directories in the current directory adb shell cd – used for changing the directory adb shell rm- used for removing a file adb shell mkdir – used for creating a directory adb shell touch – used for creating a file adb shell pwd – used for displaying the current path adb shell cp – used for copying a file adb shell mv – used for moving a file

网络adb shell netstat – used for displaying the statistics for network connection adb shell ping – used for pinging a host / IP adb shell netcfg adb shell ip

Logcatadb logcat adb shell dumpsys adb shell dumpstate

截图adb shell screencap adb shell screenrecord

系统adb root adb sideload adb shell ps adb shell top adb shell getprop adb shell setprop

在了解adb命令后,下面我们来安装DIVA(Android应用程序)。

注:请将该应用下载安装至你的kali机器上,因为所有的adb命令都将从kali中触发。

执行以下命令安装该应用:adb install diva-beta.apk

现在,我们已经完成了diva-beta.apk的安装。让我们来验证下该应用是否已在我们的设备中成功安装。

可以看到应用程序已被正确安装,并可在设备的菜单中使用。

让我们通过单击该应用程的图标来启动它。你将看到如下启动界面:

当前,DIVA为我们准备了以下挑战:

不安全的日志记录 硬编码问题 - 第1部分 不安全的数据存储 - 第1部分 不安全的数据存储 - 第2部分 不安全的数据存储 - 第3部分 不安全的数据存储 - 第4部分 输入验证问题 - 第1部分 输入验证问题 - 第2部分 访问控制问题 - 第1部分 访问控制问题 - 第2部分 访问控制问题 - 第3部分 硬编码问题 - 第2部分 输入验证问题 - 第3部分

我们将逐一解决上述挑战,让你了解Android应用中的不同漏洞。对于第一项挑战,即不安全日志记录,我们可以通过adb命令来检查diva应用的日志记录。命令如下:adb logcat

如果命令正确执行,你将会看到如下所示内容:

可以看到这里的日志记录非常的杂乱,因为它显示了许多不同的日志记录数据(整个设备)。为了让我们看起来更加清晰,我将使用grep命令。但在此之前,我们需要首先获取该应用程序包的进程ID。命令如下:adb shell ps | grep diva

如果命令正确执行,你将会看到如下所示内容:

adb shell是用于通过adb发送任何shell指令的命令;ps作为shell指令发送,ps的输出提供给grep命令。Grep是一个非常棒的用于搜索相关字符串的工具,在本例中我们搜索的字符串为“diva”。

从输出结果中我们得知,diva的pid为1654,包名称为“jakhar.aseem.diva”

现在,让我们以组合的形式使用logcat和grep命令:adb logcat | grep 1654

你将看到与该特定进程(即diva)相关的所有日志。

,FB小编 secist 编译,转载请注明来自FreeBuf.COM

android app逆向分析,如何开始对Android应用的逆向分析?相关推荐

  1. 三星手机com.sec.android.app.sams,三星健康(com.sec.android.app.shealth) - 6.9.1.017 - 应用 - 酷安...

    权限信息 · 控制振动 · 修改系统设置 · 修改或删除您的USB存储设备中的内容 · 精确位置(基于GPS和网络) · 防止手机休眠 · com.google.android.providers.g ...

  2. android app攻击与防范论文,基于Android平台的应用程序安全保护研究与应用

    摘要: 随着Android操作系统的广泛使用和移动互联网时代的到来,Android系统的安全问题也不断出现,给用户和开发者造成了许多困扰.Android应用程序面临着知识产权被侵犯.被二次打包.应用程 ...

  3. 如何自己开发一个Android APP(3)——XML和Android

    XML是一种用于保存数据值的语言. XML是一种标记语言,类似于HTML--如果之前接触过Web开发的话.XML文件利用树状结构作为数据模型.通常来说,一个布局文件拥有一个根布局元素,并将其作为特定布 ...

  4. android app启动图片 加动画效果,Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案...

    Android Studio开发APP启动程序时开屏简单动画效果快速有效解决方案 大家在设计APP的末期,都会想给APP搞一些"花里胡哨"的特效来提高APP的B格.博主表示亲测有效 ...

  5. android设置主题的方法,Android_修改Android App样式风格的方法,android中可以自定义主题和风格 - phpStudy...

    修改Android App样式风格的方法 android中可以自定义主题和风格.风格,也就是style,我们可以将一些统一的属性拿出来,比方说,长,宽,字体大小,字体颜色等等.可以在res/value ...

  6. 接手一手机android app维护 如何快速进入,快速上手Android开发,学会这三点就够了!...

    编程语言是个随互联网时代发展逐步更新的产物,面对互联网更新换代的速度,程序员们如何根据时代的变化选择不同的编程工具,选取适应互联网发展的方向才能与时俱进. 初识Android: 10年的时候,我无意之 ...

  7. android app 快速接入支付宝流程(android studio)

       前一段时间做了商城app,增加了支付宝支付,感谢在遇到问题的时候,帮助我的大神们~    编程的路很长,学习的路也很长,总结才是提高的最快过程~ 一.快捷支付地址: https://b.alip ...

  8. Android app切到后台 返回首页,Android 如何保证App切换到后台,或页面跳转后,重新打开APP、或返回之前页面时,维持其状态不变...

    项目中遇到的一些小问题,记录.分享一下. Android 如何保证App切换到后台,或页面跳转后,重新打开APP.或返回之前页面时,维持其页面状态不变? 1.问:当APP启动后,打开某一界面,然后点击 ...

  9. android app开发 拍照存储目录,关于Android App存储目录的理解

    一.内部存储: 每个app具有以下目录: 1.data/data/包名/shared_prefs (使用sharedPreferenced的时候,将数据持久化存储于本地) 2.data/data/包名 ...

  10. 有道云笔记Android app离线缓存,有道云笔记Android版升级 增加笔记离线阅读与收藏...

    近日,有道云笔记Android版升级至2.5版,增加了iPhone版中颇受用户好评的离线阅读功能,同时增加了微信分享笔记,收藏笔记等实用功能. 升级后,用户可以在离线阅读设置页面,选择需要离线阅读的笔 ...

最新文章

  1. 2021全国高校计算机能力挑战赛(初赛)C语言试题四
  2. jqgrid 单元格绑定点击事件_自定义事件带参数的触发过程
  3. parted磁盘分区与GPT
  4. 利用CGMutablePathRef制作画板涂鸦
  5. [转]Visual Studio 2010帮助文件MSDN安装说明
  6. Altium Designer -- PCB设置板框
  7. linux学习总结之基本命令
  8. qhfl-4 注册-登录-认证
  9. 安装head插件依赖包grunt-cli
  10. 问题记录——com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure...
  11. 什么是TOGAF?TOGAF初学者指南
  12. 电机学他励直流发电机matlab,直流发电机综合实验指导书(全文5篇)
  13. DDoS攻击--CC攻击防护详解(HTTP)
  14. EXCEL 查漏补缺内容
  15. word转换成pdf后图片压缩失真的解决方法
  16. x86与x86-64数据格式与常用的汇编指令笔记
  17. 又一巨头从Java迁移到Kotlin:关键应用全部开始切换、安卓代码库超过千万行Kotlin代码
  18. 解决“¥”符号在安卓上显示只有一个横杠的问题
  19. elm and halogen
  20. oppoR11S安装应用一直失败

热门文章

  1. [html] 举例说明写一个button的按钮的方法有哪些?
  2. [js] 使用delete删除数组,其长度会改变吗
  3. 前端学习(2823):sitemap配置
  4. vue学习中遇到的错误 Duplicate keys detected: ‘[object Object]‘. This may cause an update error.
  5. 前端学习(2440):axios处理文章数据
  6. 前端学习(2077):开始回顾
  7. “睡服”面试官系列第九篇之数值的扩展(建议收藏学习)
  8. shiro学习(17):easyui布局测试
  9. mybatis学习(44):二级缓存1
  10. 第一百期:Java架构师:高并发下的流量控制