android 逆向工程apktool dex2jar jd-gui Jadx Smali2Java
app安全–签名校验:
(签名只是对完整性和签名发布机构的校验机制,不能阻止 Apk 被修改,只是签名无法保持一致
不同私钥对应着不同的公钥,实质上不同的公钥就代表了不同的签名)
JAVA层的签名校验,NDK层校验(IDA打开so跟踪修改),分段存放签名Hash串,服务器校验(服务器验证的抓包查看)
Apk文件结构:
1、META-INF:
签名文件夹,里面有三个文件 MANIFEST.MF 、 CERT.SF 、 CERT.RSA。
2、res:
资源文件,里面的 xml 格式文件在编译过程中由文本格式转化为二进制的 AXML 文件格式。
3、AndroidManifest.xml:
Android 配置文件,编译过程依然被转换为 AXML 格式。
4、classes.dex: (核心逻辑在 classes.dex,破解和二次打包也基本上针对该文件)
java 代码编译后产生的类似字节码的文件(dalvik 字节码)。
5、resources.arsc:
具有 id 值资源的索引表(asserts 文件夹中的资源不会生成索引)。
6、其他文件:
可由开发者自己添加,诸如assets等,或者lib(native so代码)等目录。
smali
Dalvik VM内部执行的核心代码,是Android的Dalvik虚拟机所使用的一种dex格式的中间语言。Android采用的是Java语言进行开发,
但是Android系统有自己的虚拟机Dalvik,代码编译最终不是采用的java的class,而是使用的smali。也就是由java转化而来
apktool
apk反编译工具,拥有编译、反编译、签名等功能,可得到apk的资源文件和配置文件以及代码的smali文件
1、反编译.apk
对.apk文件进行反编译,生成相应的res、smali文件。
2、重建.apk
根据反编译.apk得到目录重建.apk文件。
3、签名.apk
对.apk文件进行签名。
4、优化.apk
对.apk文件进行优化。
5、framework-res.apk工具
实现framework-res.apk的安装和管理。
6、.apk转.jar
将.apk文件转换为.jar文件。
7、.dex转.jar
将.dex文件转换为.jar文件。
常用命令如下:
解包;
APK:Java -jar apktool.jar d *.apk -o out
*.apk 是被解包的APK文件名, out是输出目录名称
重新打包:
java -jar apktool.jar b out
out 就是上面的输出目录
导入framework-res.apk 架构文件:
java -jar apktool.jar if frameword-res.apk
需要将 framework-res.apk 文件放在 apktool.jar 的相同目录下,导入架构文件可以解决一些调用了系统框架资源的 APK 包解包失败的问题
如:
java -jar apktool.jar d Demo.apk -f
//反编译,若报错 --- Exception in thread “main” java.lang.NullPointerException,根据错误信息,删除C:\Users\×××\apktool\framework\1.apk文件,从新运行以上指令即可
java -jar apktool.jar b Demo -f
//打包,根据反编译Demo.apk得到的目录Demo,进行重建Demo.apk文件(生成的Demo.apk文件位于Demo/dist目录下)
1、java -jar apktool.jar就是调用apktool.jar来工作(它会自己找到main函数执行)
2、d 表示反编译(也可以是.jar包)
b 表示重建apk文件
3、Demo.apk 需反编译文件(跟apktool.jar文件处于同一目录下)
4、-f的意思是说如果Demo.apk反编译后端生成的Demo文件夹已存在, 就会覆盖
dex2jar
是一个能操作Android的dalvik(.dex)文件格式和Java的(.class)的工具集合,包含以下几个功能
1、dex-reader/writer: 用于读写 Dalvik Executable (.dex) 文件格式. 包含一个简单的API(与ASM相似)
2、d2j-dex2jar: 执行dex到class的文件格式转换
3、smali/baksmali: 与smali工具功能一致,但是对中文更友好
4、其他工具: 字符串解密
如:
将要反编译的APK后缀名改为.rar或则.zip,并解压,得到其中的额classes.dex文件(它就是java文件编译再通过dx工具打包而成的),
将获取到的classes.dex放到dex2jar-2.0文件夹内,命令行下定位到dex2jar.bat所在目录,输入dex2jar.bat classes.dex在改目录下会生成一个classes_dex2jar.jar的文件
jd-gui
是一个独立的显示“.class” 文件Java源代码的图形用户界面工具,java的jar文件反编译工具。您可以使用JD-GUI浏览和重建源代码的即时访问方法和字段,以代码高度方式来显示反编译过来的代码。可以浏览重建的源代码,JD-GUI的即时访问方法和字段
是一个免费的非商业用途软件—jd-gui不得包含或嵌入到商业软件产品。
使用C++开发,主要具有以下功能:
一、支持众多Java编译器的反编译;
二、支持对整个Jar文件进行反编译,并本源代码可直接点击进行相关代码的跳转;
(APK打包时做过混淆,反编译之后里边多以abc之类的命名,但逻辑是很清晰的,可以给我们提供一个实现的思路)
JD-Core和JD-GUI
JD-Core 是一个免费的库,从一个或多个“.class”文件中 重构Java源代码。
JD-Core 可以用来恢复丢失的源代码,并深究Java运行时类库。
JD-GUI 和 JD-Eclipse(都包括JD-Core)
Java反编译工具,实现了eclipse的高亮着色功能,多文件标签浏览
Jadx
一款github上开源apk静态分析工具(Android反编译gui工具)
jadx可以一行命令直接反编译恢复出.java文件, 代码还原度高,且支持交叉索引等,
(相当于apktool + dex2jar + jd-gui的功能集, 但速度较慢,不支持变量,方法重命名等,在针对混淆代码分析时有些力不从心!)
操作步骤:(需要安装jdk)
1、需要先把1.apk拷贝到jadx目录的bin目录下 //支持反编译.dex, .apk, .jar or .class
2、打开cmd窗口,cd进入jadx的bin目录
3、在bin目录新建out文件夹
4、cmd窗口执行命令jadx -d out 1.apk
(或者双击jadx-gui.bat,点选需要反编译的.apk, 软件自动会反编译出.java文件等, 反编译了资源文件和源码)
Smali2Java
集成apktool的图形化apk反编译工具,运行Smali2JavaUI.exe,将要反编译的APK文件直接打开即可看见项目的.java源码(也可以转换.smali文件成.java文件),相当于apktool + dex2jar + jd-gui的功能集
(只是少了声明文件、布局文件、图片资源文件、smali文件、语言文件等其它反编译后的相关项目文件)
Android Killer
是一款免费可视化安卓反编译软件箱,它可以对安卓APK文件进行反编译、APK打包、APK签名、APK编码转换等多种功能为一体;
编译文件以树形目录结构呈现出来,自动失败图像资源文件,并提供图片资源的快捷替换功能,方便用户对APK文件进行二次修改,
同时工具中内置了代码编辑器,支持包含(但不限于)。
samli、xml、html等各类格式文件的语法高亮显示(良好的smali显示效果和编辑功能)。
同时,ak有一项强大的功能是代码插入,可以对代码进行稍加的封装,即可实现快速插入代码(代码插桩)
打造一站式逆向工具操作体验,大大简化了用户在安卓应用/游戏修改过程中的各类繁琐工作