APP安全基础
ssooking Lv5

认识APK文件

  1. APK的全程是Android application package,是Android的应用程序包。
  2. APK 是一个ZIP格式的文件,可以用解压软件解压。
  3. 当你将APK文件解压之后你会看到如下文件:
    • AndroidManifest.xml:manifest清单文件向Android系统提供应用的必要信息,系统必须具有这些信息方可运行APP代码。
    • .dex代码文件:Dalvik虚拟机可执行文件,由java代码编译后class的文件转换而来
      • dex文件相当于jvm虚拟机的class文件
      • dex文件使用baksmail工具反编译成包含Dalvik字节码的smail文件
      • dex文件使用dex2jar工具反编译成包含.class文件的 jar文件
    • res目录:存放Android程序中所需要的一些资源,如图片、颜色、字符串、布局等资源;
    • assets目录:存放的是原生资源文件,如字体,铃声等;

反编译APK文件

1.apktool反编译apk

资源文件保护

Android apk中的资源主要分为assets资源和res资源两类。
​ Assets资源存放在APP的assets目录下,该类文件是一些原始文件,APP打包时并不会对其进行编译而是直接打包到APP中。对于这一类资源文件的访问,应用层代码需要通过文件名对其进行访问。Res资源则存放在APP的res目录下,该类资源在APP打包时大多会被编译,变成二进制文件,并会为每个该类文件赋予一个resource id。对于该类资源的访问,应用层代码则是通过resource id进行访问的。
​ Android apk开发过程中公司大都提倡命名规范化,因此通过文件名称非常容易理解其含义,这样有利于开发者理解和维护应用,但是同时也给应用破解者提供了方便,破解者通过这些命名很容易便可找到他们需要的文件位置,并理解这些文件的意图。

APkTool用于提取处理apk的资源文件,使用ApkTool反编译APK得到AndroidManifest.xml和资源文件

1
apktool d calc.apk

通过上述命令就可以反编译apk了,没有反编译前(直接解压)得到的AndroidManifest.xml是二进制文件,无法查看,使用apktool反编译后可以正常查看。

1
2
3
4
5
反编译前:
AndroidManifest.xml: Android binary XML

反编译后:
AndroidManifest.xml: XML 1.0 document text, ASCII text

2.dex2jar反编译dex文件

首先解压apk,提取dex文件,然后使用dex2jar反编译

1
d2j-dex2jar classes.dex

此时会生成classes-dex2jar.jar文件,然后使用jar反编译工具即可查看java源码,如jd-GUIjadxLuyten

一个快速反编译apk的脚本

1
2
#!/bin/bash
apktool d $1 && cp $1 $1.zip && unzip $1.zip "*.dex" -d $1_dex/ && rm $1.zip && cd $1_dex/ && d2j-dex2jar *.dex

类似的一个快速反编译apk项目:https://github.com/JavaNoober/android-apk-decompile

APP逆向分析

objection 注入操作

1
objection -g com.timanetworks.android.faw.vw.aftermarket.release explore

drozer

drozer agent

https://github.com/mwrlabs/drozer/releases/download/2.3.4/drozer-agent-2.3.4.apk

如果客户端做了证书验证,安装xposed框架和JustTrustMe模块,抹掉证书验证逻辑,再进行抓包分析。

或者用objection、Firda

adb连接单个模拟器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
夜神模拟器,x86架构
# adb connect 127.0.0.1:62001

网易MUMU模拟器
# adb connect 127.0.0.1:7555

逍遥安卓模拟器
# adb connect 127.0.0.1:21503

天天模拟器
# adb connect 127.0.0.1:6555

海马玩模拟器
# adb connect 127.0.0.1:53001

蓝叠模拟器,支持arm架构
# adb connect 127.0.0.1:5555

2.断开模拟器
# adb disconnect 127.0.0.1:62001

学习资料

  • Post title:APP安全基础
  • Post author:ssooking
  • Create time:2019-09-12 15:39:00
  • Post link:https://ssooking.github.io/2019/09/app安全基础/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.