安卓 反编译总结
◆反编译(主动)
Android Killer
Android Killer 是一款可视化的安卓应用逆向工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一 身,支持logcat日志输出,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具。@link
Android Killer主要封装了dex2jar、jd-gui、apkTool等工具,提供便捷的GUI操作。
apkTool作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看
dex2jar作用:将apk反编译成Java源码(classes.dex转化成jar文件)
jd-gui作用:查看APK中classes.dex转化成出的jar文件,即源码文件
主要功能:@link
1、可视化、全自动的反编译、编译、签名;支持批量编译APK。
2、以树形目录管理反编译出的Apk源码文件,浏览、打开、编辑、都可以统一在软件中实现,不同项目间可以自由切换,方便快捷。
3、自动识别图像资源,并提供该类资源的快捷替换功能,方便修改这类图片资源。
4、内置代码编辑器,支持包含(但不限于).samli、.xml、.html等各类格式文件的语法高亮显示,根据 smali文件格式的自动匹配相应语法;同时支持使用系统编辑器来编辑代码文件。
5、内置基于文件内容的单行或多行代码关键字搜索、可显示无穷多个搜索结果以标签的形式分门别类;可指定搜索范围(整个项目或在指定的文件或文件夹中搜索)、大小写,编码类型;从此无需再借助其他工具,即可轻松的完成搜索任务。
6、内嵌Unicode、UTF8、ANSI编码互转工具,方便硬编码文字的检索以及相关汉化类修改。
7、内置Log等调试工具,方便应用进程、logcat输出查看等进阶操作,监测修改apk的运行状况,以助于分析和查找错误。
8、内置ADB功能,包括使用ADB向设备(或模拟器)安装、卸载、运行修改后的apk,进行测试,并可管理所连接设备的存储文件(包括系统以及用户文件)
9、所有操作步骤、结果都会显示在日志窗口,方便查看。
10、默认支持记事本、计算器等小工具,开放设置接口可根据本人需要自定义外部工具,满足个性化需求。
参考:
Android Killer (V 1.3.1 正式版)新版发布专帖 link2
Android反编译工具的使用-Android Killer
Android逆向助手
Android逆向助手是一款针对安卓平台的强大逆向辅助软件,功能涵盖apk反编译打包签名;dex/jar互转替换提取修复;so反编译;xml、txt加密;字符串编码等功能。@link
支持功能:
1、反编译apk;
2、重新打包成apk;
3、对apk进行签名;
4、反编译dex;
5、重新打包成dex;
6、dex转jar;
7、dex转ddx;
8、dex导出成txt;
9、反编译so;
10、jar转dex;
11、提取dex;
12、替换dex;
13、修复dex;
14、加密xml转txt;
15、字符串unicode编解码。@link
参考:
apk反编译工具(android逆向助手) v2.2 最新绿色版
APKIDE
APK改之理(原Mandarava APK改之理)是一款用于修改安卓Apk程序文件的应用工具,APK改之理集成了ApkTool,Dex2jar,JD-GUI等Apk修改工具,集Apk反编译,Apk打包,Apk签名,支持语法高亮的代码编辑器,APK改之理基于文件内容的关键字(支持单行代码或多行代码段)搜索,替换引擎,打造成可视的,一体化的APK修改工具。
该工具类似于AndroidKiller。
参考:
IDA PRO
交互式反汇编器专业版(Interactive Disassembler Professional),人们常称其为IDA Pro,或简称为IDA。是目前最棒的一个静态反编译软件,为众多0day世界的成员和ShellCode安全分析人士不可缺少的利器!IDA Pro是一款交互式的,可编程的,可扩展的,多处理器的,交叉Windows或Linux WinCE MacOS平台主机来分析程序, 被公认为最好的花钱可以买到的逆向工程利器。IDA Pro已经成为事实上的分析敌意代码的标准并让其自身迅速成为攻击研究领域的重要工具。它支持数十种CPU指令集其中包括Intel x86,x64,MIPS,PowerPC,ARM,Z80,68000k,c8051等等。@link
So文件反编译工具,汇编级源码分析。
参考:
IDA Pro 6.8 + All Decompilers Full Leak 破解版下载
反编译总结
Apk文件打包过程 :
Android中build成一个apk过程:
1、使用Android SDK提供的aapt.exe生成R.java类文件
2、使用Android SDK提供的aidl.exe把.aidl转成.java文件(如果没有aidl,则跳过这一步)
3、使用JDK提供的javac.exe编译.java类文件生成class文件
4、使用Android SDK提供的dx.bat命令行脚本生成classes.dex文件
5、使用Android SDK提供的aapt.exe生成资源包文件(包括res、assets、androidmanifest.xml等)
6、使用Android SDK提供的apkbuilder.bat生成未签名的apk安装文件
7、使用jdk的jarsigner.exe对未签名的包进行apk签名
应用程序资源的编译、打包以及查找过程说明:
A. 除了assets和res/raw资源被原装不动地打包进APK之外,其它的资源都会被编译或者处理。
B. 除了assets资源之外,其它的资源都会被赋予一个资源ID。
C. 打包工具负责编译和打包资源,编译完成之后,会生成一个resources.arsc文件和一个R.java,前者保存的是一个资源索引表,后者定义了各个资源ID常量。
D. 应用程序配置文件AndroidManifest.xml同样会被编译成二进制的XML文件,然后再打包到APK里面去。
E. 应用程序在运行时通过AssetManager来访问资源,或通过资源ID来访问,或通过文件名来访问。
安卓apk打包后生成的主要文件列表:
Assets目录:该目录下的文件打包APK不做处理;
assets类资源放在工程根目录的assets子目录下,它里面保存的是一些原始的文件,可以以任何方式来进行组织。这些文件最终会被原装不动地打包在apk文件中。如果我们要在程序中访问这些文件,那么就需要指定文件名来访问。
classesXXX.dex文件:java文件生成的.class文件都会打包到该文件;
res文件:资源文件.xml经过压缩后打包到APK;
res类资源放在工程根目录的res子目录下,它里面保存的文件大多数都会被编译,并且都会被赋予资源ID。这样我们就可以在程序中通过ID来访问res类的资源。res类资源按照不同的用途可以进一步划分为9种子类型。
lib文件:底层相关固件.so文件;
AndroidManifest.xml文件:权限、基本组件等配置信息文件;
resources.arsc文件:R.java相关资源id生成的资源项索引表文件;
Android资源打包工具aapt在编译和打包资源的过程中,会执行以下两个额外的操作:
1. 赋予每一个非assets资源一个ID值,这些ID值以常量的形式定义在一个R.Java文件中。
2. 生成一个resources.arsc文件,用来描述那些具有ID值的资源的配置信息,它的内容就相当于是一个资源索引表。
参考:
系列博客1
Android资源管理框架(Asset Manager)简要介绍和学习计划
Android应用程序资源管理器(Asset Manager)的创建过程分析
系列博客2
Android解析编译之后的所有文件(so,dex,xml,arsc)格式
Android逆向之旅---解析编译之后的Resource.arsc文件格式
Android逆向之旅---解析编译之后的AndroidManifest文件格式
其他
扩展
Android中的动态加载机制 – 扩展
Android应用程序的Activity启动过程简要介绍和学习计划
AndroidKiller反编译生成文件目录:
Assets目录:\Project\assets
classesXXX.dex文件:\Project\smali
.dex文件 => .jar文件 => JD-GUI查看
res文件:\Project\res
lib文件:\Project\lib
AndroidManifest.xml文件:\Project
resources.arsc文件:\Project\res\values\ public.xml