反编译
常识
.apk文件
- META-INT 签名文件
- res 资源文件(AXML)
- R 资源文件
- AndroidManifest.xml 配置文件
- classes.dex
- resources.arsc 二进制资源文件
- lib 存放用C/C++编写的,用NDK编译生成的so文件
- 其他文件
.dex文件
是一种可在Dalvik虚拟机中执行的格式,包含最终由Android运行时执行的代码。
编译流程:.java -> .class -> .dex
.smali文件
Smali是Android的Dalvik虚拟机使用的一种dex格式的中间语言,是类似汇编语言的一套指令集,是Dalvik的寄存器语言
Android的签名保护机制
Android系统进制安装签名不一致的apk
什么是编译
什么是反编译
如何进行反编译
pic1.png1. 使用apktool工具反编译
命令
// outDir为输出文件的路径
// 若不指定则为当前文件路径
java -jar apktool.jar d -f xxx.apk outDir
输入命令
apktool-res.png
反编译后目录如下
apktool2.png
这时已经可以获取图片和XML类型文件了,但源代码依然无法获取,现在其为smali格式
apktool3.png
工具
autoSign
签名工具
jadx
一款开源的Java decompiler
Command line and GUI tools for produce Java source code from Android Dex and Apk files
dex2jar
用于将dex文件转换成jar
jd-gui
用于将jar文件转换为java代码
apktool
用于还原9-patch图片、布局、字符串等一系列资源
AXMLPrinter2.jar
将xml文件反编译
操作
- 下载并解压相关工具,下载需要进行反编译的APK
影响
大胆一猜
- 获取用户名及密码
- 在用户不知情的情况下,控制用户的操作,向后台发送请求
- 恶意攻击后台,或者攻击用户,侵犯隐私及威胁数据安全
安全
代码混淆技术
Proguard
- It makes your Java and Android applications up to 90% smaller and up to 20% faster.
- ProGuard also provides minimal protection against reverse engineering by obfuscating the names of classes, fields and methods.
签名检测
目的:防止二次重打包
方式:
除了在java层处理,还可以在so或服务器中校验
应对:
在 so 里的用 IDA 打开 so 跟踪修改,服务器验证的抓包查看
使用C++改造底层
.etc
数据分拆合并
.etc
网友评论