认识APK文件
- APK的全程是Android application package,是Android的应用程序包。
- APK 是一个ZIP格式的文件,可以用解压软件解压。
- 当你将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.dex2jar反编译dex文件
首先解压apk,提取dex文件,然后使用dex2jar反编译
1 | d2j-dex2jar classes.dex |
此时会生成classes-dex2jar.jar文件,然后使用jar反编译工具即可查看java源码,如jd-GUI、jadx、Luyten。
一个快速反编译apk的脚本
1 |
|
类似的一个快速反编译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 | 夜神模拟器,x86架构 |
学习资料
- 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.