APK终端安全分析法
APK及其基本结构
APK组成
被编译的代码文件(.dex文件)
资源文件(resources)
assets
证书(certificates)
清单文件(manifest file)
各文件分类及说明
文件 | 说明 |
classes.dex | DEX是Dalvik EXecutable的简称,classes.dex是将程序中的类和逻辑代码编译成Dalvik虚拟机可以理解的dex文件格式,由Dalvik虚拟机加载并运行,通常为APK的主要代码文件 |
resources.arsc | 这个文件包含了一些预编译的资源文件,如二进制的XML文档等 |
META-INF目录 | 在编译生成一个APK包时会对所有要打包的文件做一个SHA-1的校验计算,并把计算结果放在META-INF目录下。 在Android平台上安装APK包时,安装器会对包里的文件进行校验,如果校验结果与META-INF目录下的内容不一致,系统就不会安装这个APK |
res目录 | res目录主要包含了一些未被编译入resources.arsc的资源文件 |
assets目录 | assets 目录是一个含有应用程序资源的目录,但是在打包 APK 时不会对 assets目录下的文件做任何处理,并需要使用AssetManager来访问 |
AndroidManifest.xml | 每个应用的根目录中都必须包含一个 AndroidManifest.xml 文件,这个清单文件为Android系统提供有关应用的基本信息,例如,应用的名字、版本、所需权限、注册的服务、引用的库文件等,系统必须获得这些信息才能运行应用代码。 该文件在打包时会被编译成二进制XML格式,可以使用工具反编译回XML文本格式。 |
关于lib目录
lib 目录包含了指定处理器的已编译代码,是特定于处理器的软件层,可分为如下目录
目录 | 说明 |
Armeabi | 包含所有基于ARM处理器的编译后代码 |
armeabi-v7a | 包含所有基于ARMv7及更高版本的处理器的编译后代码 |
arm64-v8a | 包含所有基于ARMv8、ARM64及更高版本的处理器的编译后代码 |
x86 | 包含所有基于x86处理器的编译后代码 |
x86_64 | 包含所有基于x86_64处理器的编译后代码 |
Mips | 包含所有基于MIPS处理器的编译后代码 |
反编译
反编译Dalvik字节码文件
步骤:
解压APK文件并找到classes.dex
apktool 反编译APK文件,命令如下: java -jar apktool.jar d APKfile -o outdir
smail目录中的文件即为反编译出的代码
dex2jar反编译classes.dex文件
反编译共享库.so文件
可通过IDA翻译出伪代码分析程序的逻辑
逻辑分析
重新打包
动态调试
相关工具
保护措施
最后更新于