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实现轮播功能

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

使用 function 构造函数创建组件和使用 class 关键字创建组件

使用 function 构造函数创建组件: 如果想要把组件放到页面中,可以把构造函数的名称,当作 组件的名称,以 HTML标签形式引入页面中, 因为在React中,构造函数就是一个最基本的组件。 注意: 组件的首…

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 sdk,我想使用天地图sdk,第三方插件的教程走通了,现在卡住了

用Android Studio按照教程,增加第三方插件的例子走通了,运行后的app可以alert出来了,方法可以用。但是现在,怎么把天地图弄出来啊。本人是前端,不会安卓。天地图官网的使用步骤:1) 将API文件tiandituapi.ja…

[html] 如何优化大数据列表(10万+)的性能?说说你的方案

[html] 如何优化大数据列表(10万)的性能?说说你的方案 定时器批量绘制, 过滤,查询使用serviceWorker ?个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论…

Java容器Stack

Stack继承关系 Collection 接口AbstractCollectionAbstractListVectorStack 方法 public E push 元素在栈顶,最后一个元素 public synchronized E pop() 删除并返回栈顶元素(最后一个) public synchronized E peek()返回栈顶元素&#xff08…

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

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

[html] 如何使用纯HTML实现跑马灯的效果?

[html] 如何使用纯HTML实现跑马灯的效果? HTML marquee 元素用来插入一段滚动的文字。 但是该元素已废弃。个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面…

字符串处理

Title#region GetSubString /// <summary> /// 取得指定开始和结束字符串中间的数据串 /// </summary> /// <param name"content"></param> /// <param name"startStr"></param> /// <param name"endSt…

HTTP管线化(HTTP pipelining)

默认情况下http协议中每个传输层连接只能承载一个http请求和响应&#xff0c;然后结束。 HTTP是一个简单的协议。客户进程建立一条同服务器进程的 T C P连接&#xff0c;然后发出请求并读取服务器进程的响应。服务器进程关闭连接表示本次响应结束。服务器进程返回的文件通常…

[html] 如果列表元素li的兄弟元素为div,会产生什么情况?

[html] 如果列表元素li的兄弟元素为div&#xff0c;会产生什么情况&#xff1f; 单纯的对html来说主要是破坏了语义结构吧, css方面来说不好统一控制样式&#xff0c;div默认也没有list-style个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xf…

RFC函数的初步使用-同步

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

C# 繁体,简体互转

首先对Miscrosoft.VisualBasic类的引用. using Microsoft.VisualBasic; public static string Traditional2Simplified(string str) { //繁体转简体 return (Microsoft.VisualBasic.Strings.StrConv(str, Microsoft.VisualBasic.VbStrConv.Si…

[html] html的哪个标签可以预渲染?

[html] html的哪个标签可以预渲染&#xff1f; link 标签的 relpreload个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

2017蓝桥杯c语言C组承压计算,蓝桥杯2017Java B组---分巧克力and承压计算

分巧克力package lala;/**儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力&#xff0c;其中第i块是Hi x Wi的方格组成的长方形。为了公平起见&#xff0c;小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要…

HDU2138 随机素数测试 Miller-Rabin算法

题目描述 Give you a lot of positive integers, just to find out how many prime numbers there are.. In each case, there is an integer N representing the number of integers to find. Each integer won’t exceed 32-bit signed integer, and each of them won’t be …

[html] 你写一个页面需要多长时间?

[html] 你写一个页面需要多长时间&#xff1f; 和页面结构&#xff0c;样式&#xff0c;交互设计正相关个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

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

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

vba copy sheet

Sub copySheet() Dim wkbk As Workbook Set wkbk Workbooks.open("源文件.xls") 先打开要复制的文件 wkbk.sheets(1).Copy thisworkbook.sheets(1) 再将此文件中第一个工作表复制到当前工作簿的第一个工作表前 End Sub 这样是最简单的代码了&#xff0c;但是有些限制…

Android仿ios二级菜单侧滑,仿IOS的列表项滑动菜单——ListItemMenu

一个简单的仿IOS的列表项滑动菜单(也不知道怎么描述比较好)。顺手做出来的小东西&#xff0c;就分享给大家了。仿iOS列表项滑动菜单:1、滑动出现菜单&#xff0c;越界阻尼效果&#xff1b;2、删除列表项效果。GitHub地址:https://github.com/zarics/ListItemMenu1.[代码]布局示…