智能硬件安全(第二章)笔记

2.1 APK及其基本结构

2.1.1 APK基本结构

Android os上程序安装文件格式
代码想在Android上运行,先编译,再打包成为一个Android os能识别的文件,即APK
一个APK内包含:
被编译的代码文件(.dex文件)
资源文件(resources)
assets
证书(certificates)
清单文件(manifest file)

2.1.2 classes.dex

class.dex 将程序中的类和逻辑代码编译成Dalvik虚拟机可以理解的dex文件格式,由Dalvik虚拟机加载并运行,主要

2.1.3 resources.arsc

包含了一些预编译的资源文件,如二进制的XML文档等。

2.1.4 META-INF目录

编译生成APK包以后,对所有打包文件做SHA-1校验计算,并把计算结果放在此目录下。
安装APK时,会校验决定是否安装

2.1.5 res目录

包含未编译入resources.arsc的资源文件

2.1.6 lib目录

包含指定处理器的已编译代码,是特定于处理器的软件层
Armeabi,armeabi-v7a,arm64-v8a,x86,x86_64,Mips

2.1.7 assets目录

含有应用程序资源的目录,打包APK时不会做任何处理,但需要AssetManager来访问

2.1.8 AndroidManifest.xml

每个应用根目录都必须包含一个Android Manifest.xml文件,此清单文件提供有关应用的基础信息。
如应用名字,版本。。

打包时会被编译成二进制XML格式,可以使用工具反编译回XML文件格式

2.2 反编译

2.2.1 反编译Dalvik字节码文件

先将APk解压,找到class.dex文件。

1.反编译为smail代码

使用 apktool.jar 反编译APk文件

java -jar apktool.jar d APK 文件名 -o 输出目录

使用apktool反编译apk时报错

Exception in thread "main" org.jf.dexlib2.dexbacked.DexBackedDexFile$NotADexFile
: Not a valid dex magic value: cf 77 4c c7 9b 21 01 cd

提示很明显,就是非法Dex,这是因为apk里有加密过后的dex文件,比如有些apk的assets目录下有加密后的Dex文件,添加–only-main-classes参数即可

java -jar "%~dp0\apktool_2.4.1.jar" d -f Game.apk -only-main-classes

2.反编译为jar包

使用dex2jar反编译class.dex文件
可用JD-GUI工具查看

2.2.2 反编译共享库.so文件

.so文件也是ELF文件,可用IDA进行逆向分析

2.3 逻辑分析

Android系统有自己的虚拟机Dalvik。最终编译采用smali而不是java的class
所以反编译得到jar效果没smali更容易理解

下面了解smail的语法和规则

2.3.1 分析smail代码

类似汇编语言,涉及寄存器直接操作,可直接阅读,但难懂

smali在调用方法时,常见指令有
invoke-direct、invoke-virtual、 invoke-static、invoke-super、invoke-interface…
指令后花括号中是方法的参数。参数后面是被调方法所在的类;->方法名(参数类型)返回值类型

在这里插入图片描述

除此以外,对象最为常见,对象类型以“L”为开头表示
格式“Lpackage/ClassName;” 分号结束
java.lang.String -> Ljava/lang/String

一个实例

在这里插入图片描述

将p1,p2两个值中小的赋值为1

2.3.2 分析jar包

在APK未被混淆/加固的情况下,只需JD-GUI、JAD等工具反编译出源码,通过Java代码分析逻辑
在这里插入图片描述

2.3.3 分析共享库

需要汇编基础、C语言基础

2.4 重新打包

2.4.1 打包

使用apktool.jar编译并重打包回APK文件,命令格式为:

java -jar apktool.jar b 输出目录

2.4.2 签名

signapk.jar工具可以为APK进行签名,

java -jar signapk.jar publickey.x509[.pem] privatekey.pk8 in.apk out.apk

2.4.3 测试

有些APK有反篡改保护,重打包后不可用,所以测试是否能正常运行

2.5 动态调试

java环境
安装IntelliJ IDEA

2.6 工具的使用

2.6.1 Android Killer

2.6.2 JEB

2.7 保护措施

2.7.1 代码混淆

传统保护方式
常见混淆工具 ProGuard
最大限度优化字节码文件,重命名类、字段、方法,达到保护效果
混淆针对三类数据:类名、类中方法名、类中字段名
常用规则:
系统组件不能被混淆,自定义view,JNI调用不能被混淆

2.7.3 应用加固

第三方加固平台 APK加固
260加固,梆梆加固。。。
度优化字节码文件,重命名类、字段、方法,达到保护效果
混淆针对三类数据:类名、类中方法名、类中字段名
常用规则:
系统组件不能被混淆,自定义view,JNI调用不能被混淆

2.7.3 应用加固

第三方加固平台 APK加固
260加固,梆梆加固。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值