IoT安全入门07

第七章 物联网渗透测试之移动应用

0x01 安卓应用程序分析

1. Android apk安装包分析

1.1 Android

Android是一个开源的,基于Linux的移动设备操作系统,如智能手机和平板电脑。它是由谷歌及其他一些公司带领的开放手机联盟发行和开发的。

image-20230320123739350

1.2 Android应用组件

Android开发四大组件分别是:

  • 活动(Activity)最基础
  • 服务(Service)后台
  • 广播接收器(BroadcastReceiver)
  • 内容提供者(Content Provider)不同APP之间数据传递共享

image-20230320123939180

1.3 Android安装包

一个Android应用程序的代码想要在Android设备上运行,必须先进行编译,然后被打包成为一个可被系统所能识别的文件

Android设备可以识别的安装包是.APK(Android application package)格式,可用于分发和安装移动应用及中间件。

一个APK安装包内包含:

  • 被编译的源代码文件

  • 文件资源

  • 原生资源文件

  • 证书(签名)

  • 清单文件

image-20230320125146214

2. 静态反编译工具的使用

2.1 工具介绍

高级语言源程序经过编译变成可执行文件,反编译就是逆过程

  • Apktool

    反编译资源和dex文件,并可以将反编译后的项目重新打包成apk

    github开源下载

  • apksigner

    apk签名/验证 工具

  • dex2jar

    将dex转化为.jar

    github开源下载

  • jd-gui

    查看.jar源码

  • jadx

    一款功能强大的快速安卓反编译工具

3. smali语法简介

Dalvik VM是在Android系统上运行Android程序的虚拟机,其指令集是基于寄存器架构的,执行特有的文件格式(dex字节码)来完成对象生命周期管理、堆栈管理、线程管理、安全异常管理、垃圾回收等重要功能。

Smali是用于Dalivk的反汇编程序的实现。Smali支持注解,调试信息,行数信息等基本Java的基本特征,很接近Java编译在JVM上的中间语言。

从Dalvik VM和JVM的编译过程分析,他们的编译过程如下:

JVM:.java -> .class -> .jar

Dalvik VM:.java -> .class -> .dex

3.1 smali的数据类型

image-20230320182754339

image-20230320183606467

3.2 smali函数定义

函数的定义一般为:

1
函数名(参数类型1 参数类型2...)返回值类型

基本数据类型的参数与参数之间没有任何分隔符,对象数据类型使用;结束

image-20230320184338440

3.3 smali的寄存器

说明
v0 第一个本地寄存器
v1 第二个本地寄存器
v2 p0 第一个参数寄存器
v3 p1 第二个参数寄存器

3.4 smali代码举例

image-20230320184824932

0x02 ios应用程序分析

IPA脱壳

从APPStore商店下载安装的APP默认都被苹果加了一层壳,加了壳后我们就无法正常查看程序的运行逻辑了

需要工具:

通过ssh远程连接

image-20230320185521354

显示当前应用:Clutch -l

选择指定应用进行脱壳:Clutch -d packageName

image-20230320185635950

将脱壳后的安装包导出

MobSF

MobSF是Mobile Security Framework的缩写,是一个移动端应用安全问题检出的框架和工具,支持Linux/Windows/Mac,能够执行动态和静态的恶意软件的分析和检测,支持Android和ios移动应用。

image-20230320190042925

GitHub仓库地址:https://github.com/MobSF/Mobile-Security-Framework-MobSF.git

0x03 Android动态调试分析工具使用

1. adb调试命令

1.1 ADB

Android调试桥(adb)是一种功能多样的命令行工具,可以让你与设备进行通信。adb命令可用于执行各种设备操作(例如安装和调试应用),并针对Unix shell(可用来在设备上运行各种命令)的访问权限。

它是一种客户端-服务器程序,包含以下三个组件:

  • 客户端:用于发送命令。客户端在开发计算机上运行,你可以通过发出adb命令从命令行终端调用客户端。
  • 守护程序(adbd):用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。
  • 服务器:用于管理客户端与守护程序之间的通信。服务器在开发机器上作为后台进程运行。

在设备上启用 adb 调试:

要在通过 USB 连接的设备上使用 adb,必须在设备的系统设置中启用 USB 调试(位于开发者选项下)。

在搭载Android4.2及更高版本的设备上,”开发者选项” 屏幕默认情况下处于隐藏状态。如需将其显示出来,请依次转到 设置 > 关于手机,然后点按版本号7次,返回上一屏幕,在底部可以找到开发者选项。具体请依照不同设备实际为准。

1.2 ADB常用命令

查看设备列表

1
adb devices

远程连接

1
adb connect ip:port

进入交互式shell模式

1
adb shell

查看进程pid号

1
adb shell "ps | grep 包名"

查看logcat日志

1
adb logcat

移动文件

1
adb push/push

安装/卸载 应用

1
adb install/uninstall

SHELL查看当前活动的Activity

1
dumpsys activity top | grep ACTIVITY

SHELL启动指定Activity/Service

1
am start/startservice -n 包名/完整类名[-d data]

端口转发

1
adb forward tcp:1234 tcp:1234

查看系统配置

1
adb shell getprop

2. 调试环境搭建

设置为允许调试

  1. 修改Manifest.xml文件的Application属性
  2. 将设备属性ro.debuggable设置为1

image-20230320204911577

app配置修改为允许调试:

反编译安装包AndroidManifest.xml,在application内修改或添加 android:debuggable=”true”,并重打包签名。

系统修改为允许所有应用调试:

使用mprop工具来修改

1
2
3
4
5
6
adb push mprop /data/local/tmp/
adb shell su
chmod 755 /data/local/tmp/mprop
data/local/tmp/mprop
setprop ro.debuggable 1
/data/local/tmp/mprop -r

3. Smalidea动态调试

3.1 使用smalidea插件

smalidea是一个Intellij IDEA/Android Studio smali语法插件,可实现动态调试smali代码。支持14.1或以上版本的IDEA。

下载地址:https://github.com/JesusFreke/smali/wiki/smalidea

0x04 安卓/ios应用 网络接口分析

1. Https

1.1 https协议流程

image-20230320210545112

1.2 中间人攻击

image-20230320211012277

2. 设备证书安装

安装Burp suit的证书

3. Burp suit使用

可参考gitbook:https://t0data.gitbooks.io/burpsuite/content/?q=