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

本文是我的关于如何开始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

fbcb023c09d78439566b8c450308bcc6.png

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

17ff602f653c8f210e6f76877969e99b.png

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

f53322d54a00bc8138f16e31f6473a74.png

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

从中启动kali虚拟机

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

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

单击WiFi选项

你会在网络中看到WiredSSID

长按“WiredSSID”选项

你会看到如下所示界面

9a09afdd44e7f8e419925b9b25a2fe40.png

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

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

25dde4e852259108937be591e10cbe2f.png

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

a759bb8f76f933070333115e71f3518d.png

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

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

9e4ee4258e2a38b24fcf27c5880511a5.png

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

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

8c3b4a8ce0b126944f9df3ad77111d81.png

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

18158aed4558089c771433de0c1595ef.png

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

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

e888499dced08f0a40ef6f5a63b191f1.png

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

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

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

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

85650b907bbe0a39f82a4deb63c4ba8b.png

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

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

46e78e39393884b042668ecd0f7dc815.png

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

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

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

c859ccc20db53ff2442274d32d50f4b4.png

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/410781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swipper.js实现轮播功能

我是歌谣 放弃很难 但是坚持一定很酷 微信公众号关注小歌谣 今天我们来说一下工作中的一个小需求 就是给我们的页面去实现一个轮播的功能 最近需要实现一个小的需求 就是如何类似于如何把一个图片变成一个轮播效果 于是乎就开始考虑 用一款插件去实现这个功能 所以选择了一…

Spring.NET 1.3.1 正式版已发布

Spring.NET 1.3.1 下载地址为http://www.springframework.net/download.html 正如已经提到的其他地方,这将是Spring.NET的最终版本提供支持的。NET1.x中Spring.NET的未来版本将只针对。NET 2.0和更高版本,让Spring.NET更积极地利用近期功能的更多信息在。…

android wifi连接手机,Android手机无线连接利器-AirDroid

AirDroid是一款可以在电脑的浏览器上对手机进行管理的应用,需要wifi网络支持,手机安装启用服务后,在pc的浏览器即可登陆进行管理和操作,可以管理联系人、短信、文件、应用、照片、铃声、音乐、通话记录,还可以快速搜索…

RFC函数的初步使用-同步

1、由于没有外围系统,采用不同SAP不同client之间进行测试。 首先在A-client搭建需要被调用的RFC函数。在A-client里运行SE37创建函数 在属性页签选择“远程启用的模块” 设定inport参数,传入人员名称去取usr21中的值 设定export参数,其中zper…

Android编程获取手机型号,本机电话号码,sdk版本及firmware版本号(即系统版本号)...

Android开发平台中,可通过TelephonyManager 获取本机号码。 TelephonyManager phoneMgr(TelephonyManager)this.getSystemService(Context.TELEPHONY_SERVICE);txtPhoneNumber.setText(phoneMgr.getLine1Number()); //txtPhoneNumber是一个EditText 用于显示手机号注…

判断cloudblob是否存在

这是开博的第一篇,还要废话一下。我写的很多内容都是网上找资料然后自己总结出来的,原出处已经很难找到了,所以不会标出引用的内容。如果侵犯到您的版权,请和我联系,我会删改相关的内容。 cloudblob 是azure blob的一个…

android studio炸包怎么导入,请问android studio如何引入包

梦里花落0921jar包放项目根目录libs文件夹右键选择Add As Library"剩选项默认行点击。Show import popup,这个是用于编辑XML时,自动会弹出一个import的对话框,问你是否需要导入。JavaInsert imports on paste:(All Ask None),这个其实就…

动态规划-直方图最大长方形

/* 1017: C03-单调栈算法-最大长方形时间限制: 1 Sec 内存限制: 128 MB 提交: 17 解决: 10 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述给你一个直方图,告诉你各个条形矩形的高度,求基线对齐构成的矩形中面积最大的矩形的面积。对于每一个矩形…

Metropolis Hasting算法

Metropolis Hasting Algorithm: MH算法也是一种基于模拟的MCMC技术,一个很重要的应用是从给定的概率分布中抽样。主要原理是构造了一个精妙的Markov链,使得该链的稳态是你给定的概率密度。它的好处,不用多说,自然是可以对付数学形…

荣耀变鸿蒙系统,鸿蒙系统首批升级机型曝光!荣耀手机遗憾缺席,原因很简单...

原标题:鸿蒙系统首批升级机型曝光!荣耀手机遗憾缺席,原因很简单大家好,我是科技君的探讨,欢迎关注我,与我一起进行科技的探讨。华为鸿蒙系统可以说是目前数码圈关注度最高的事件之一了。从早期公布&#xf…

bzoj2733永无乡

永无乡 HYSBZ - 2733 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示。某些岛之间由巨大的桥连接,通过桥可以从一个岛 到达另一个岛。如果…

在 Delphi 下使用 DirectSound (14): 测试镶边效果器 IDirectSoundFXFlanger8

{相关结构:} TDSFXFlanger packed recordfWetDryMix: Single; // 0 .. 100 : 50 (%)fDepth: Single; // 0 .. 100 : 100 (%)fFeedback: Single; //-99 .. 99 : -50 (%)fFrequency: Single; // 0 .. 10 : 0.25lWaveform: Longint; // 0 .. 1 : 1fDelay: Sin…

html判断是否在页面,html判断当前页面是否在iframe中的实例

html判断当前页面是否在iframe中的实例在做HTML页面的时候,经常会遇到“如果当前页面显示在iframe中,我们就相应的处理”判断方法为://判断是否在iframe中if(self!top){parent.window.location.replace(window.location.href);}以上这篇html判…

一种用户体验-显示对话框时灰化你的主窗体

袁永福 ( http://www.xdesigner.cn ) 2007-8-10 程序全部源代码下载(工程文件使用VS.NET2003格式):/Files/xdesigner/DisableMask.rar 在一些Web程序中,有一种页面效果,当弹出一个模拟的对话框时,主页面就整体灰化了,其他的元素不能动弹,只有这个对话框能…

html文档中用于表示页面标题的标记对是,汽车发动机拆装与检修实训超星尔雅答案...

摘要:汽车生活事件也称为应激源( )在教师的直接领导下整个班级的学生一起进行的学习,机拆检修称为( )实训教学二字连用最早出自( )...汽车生活事件也称为应激源( )发动下列不属于课程与教学关系观的是( )在教师的直接领导下整个班级的学生一起进行的学习…

H5|web移动前端自适应适配布局解决方案

方案: 固定一个某些宽度,使用一个模式,加上少许的媒体查询方案使用flexbox解决方案使用百分比加媒体查询使用rem1. 简单问题简单解决 我觉得有些web app并一定很复杂,比如拉勾网,你看看它的页面在iphone4,iphone6,ipad…

[转] 用Diff和Patch工具维护源码

在Unix系统下,维护源码版本可以使用很多方法,其中最常用的当然是大名鼎鼎的CVS,但实际上,简单的版本维护工作并没有必要使用复杂的CVS等专门的版本维护工具,Unix标配中的diff和patch工具就完全可以完成代码的简单备份和…

jQuery 结合 Json 提交数据到Webservice,并接收从Webservice返回的Json数据

简单的Json数据提交 jQuery ajax webservice:get 和 post 一、GET 方式客户端代码vardata { classCode: "0001"}; //这里要直接使用JOSN对象$.ajax({ type: "GET", contentType: "application/json; chars…

X86逆向教程10:学会使用硬件断点

本节课我们将学习硬件断点的使用技巧,硬件断点是由硬件提供给我们的一组寄存器,我们可以对这些硬件寄存器设置相应的值,然后让硬件帮我们断在需要下断点的地址上面,这就是硬件断点,硬件断点依赖于寄存器,这…

html 监控键盘,后台监控鼠标和键盘(可监听全局的鼠标以及键盘按键)

资源下载此资源下载价格为3D币,请先登录资源文件列表MouseKeyboardLibrary/MouseKeyboardLibrary/app.config , 134MouseKeyboardLibrary/MouseKeyboardLibrary/bin/Debug/MouseKeyboardLibrary.exe , 23040MouseKeyboardLibrary/MouseKeyboardLibrary/bin/Debug/Mo…