Android逆向概述
1.Android APK文件结构
android studio生成的apk在以下目录
基本的APK是一个压缩包,压缩包中有
META-INF目录签名信息,包括公司信息、文件的HASH值
Res目录资源信息,包括图片、xml(布局文件、字符串、风格样式等)
AndroidMainfestxml清单文件,包括APK包名、四大组件的一些申明定义、权限、程序的入口
Classes.dex可执行文件,包括java的类信息、方法信息、字段信息、虚拟机指令.
dex文件的生成流程是从java源码->class文件->dex文件
Resources.arsc资源序号文件,包括资源里的所有ID、名称.资源ID对应文件是R.class
Lib目录动态库,扩展名是.so,包括C++代码,有各种平台,比如×86,arm
Assets目录自定义资源,比如.txt,mp4,等等
问题:Android APK的入口函数是什么?
自己定义的MainActivity中onCreate
清单文件中application节点可以添加android:name属性,指定继承自application的类,用于初始化整个app的全局信息.继承自application的类有两个重写函数会执行,是程序最早执行的函数.
①attachBaseContext
②onCreate
所以一个app最早执行的函数是application的类中的attachBaseContext函数一般apk加固之后,都会自定义application类,并重写其中的attachBaseContext函数或onCreate函数,并且声明为native类型的函数.
app运行的流程
Android系统历史分为三个阶段
①android2.3~4.0卡顿
②android4.1~4.4成长,飞跃android虚拟机dalvik->art
③android5.0-现在整体不错逆向分析的环境
系统:android 4.4(同时有dalvik和art)
逆向分析的环境
系统:android 4.4(同时有dalvik和art)
手机:google nexus 5(二手200左右)
2.SDK工具-adb,monitor
adb的使用
需要在SDK文件中找到adb,设置目录到path环境变量中
D:\Android sdk\platform-tools adb命令
①列举设备
adb devices
②将apk上传到设备、下载文件到PC
adb push
adb pull
③安装apk
adb install-r apk文件名(可以覆盖安装)
④启动apk
adb shell am start-n<包名/activity名称>
以调试方式启动apk
adb shell am start-D-n<包名/activity名称>(以调试方式启动)
⑤shell命令
使用adb shell进入安卓命令行,可以在命令行使用Linux命令
Is,cd,su,ps,ps | grep com,kill,chmod
常用adb命令
monitor操作
①概况
·android studio中打开
文件目录中打开
·主要窗口
④日志
过滤日志
3.逆向工具介绍
命令行工具
1.AndroidManifest.xml清单文件解密工具
·AXMLPrinter2.,jar java-jar AXMLPrinter2.jar<清单文件>
java-jar AXMLPrinter2.jar AndroidManifest.xml>out.xml
·APK15PBParser.jar(集成了AXMLPrinter2.jar,apktool.jar中xml解析部分代码)
java-jar APK15PBParser.jar
java-jar APK15PBParser.jar HelloWorld1.apk
2.Dex文件反汇编、汇编工具
Dex文件是android java代码编译生成的二进制文件,包含了虚拟机指令(dalvik虚拟机)
·Baksmali.jar(反汇编工具,将虚拟机指令反汇编成smali代码)
java -jar baksmali.jar -o <输出目录>
java -jar baksmali.jar classes.dex -o out_dir
反汇编生成的目录中,包括所有dex文件中的类代码,每一个类就是一个smali文件.
Java中有三种类,外部类、内部类、匿名类
外部类:MainActivity,java->MainActivity.smali
内部类:MainActivity类中MyOnClickListener类 MainActivitysMyonClickListener.smali
匿名内部类:MainActivity类中new OnClickListener对象->MainActivity$1.smali
·smali,jar(汇编工具,将smali代码汇编生成dex文件)
java -jar smali,jar <目录> -o 文件名
java -jar smali.jar out_dir -o out.dex
修改smali代码,#号是注释代码
//#if-eqz v2,:cond_24
3.apk签名工具
签名工具,使用android系统源码编译时用到的一个工具
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk
下面使用bat脚本执行命令
@ECHO OFF
Echo Auto-sign Created By Dave Da illest 1
Echo Update.zip is now being signed and will be renamed to update_signed.zip
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk
Echo Signing Complete
Pause
EXIT
4.apk反编译工具
apktool
反编译apk
java -jar apktool,jar d
java -jar apktool.jar d HelloWorld.apk
①将清单文件以及其他xml文件解密
②将资源序号文件(resources.arsc)与资源名称做了一个对应关系表
生成在了/res/values/public.xml
③将dex文件反编译成了smali代码
回编译 apk目录
java -jar apktool.jar b <反编译的apk文件目录>
java -jar apktool.jar b HelloWorld
生成的APK在<反编译的apk文件目录>/dist目录中
Dex2jar工具(转换文件格式)
dex2jar>d2j-dex2jar.bat
dex2jar>d2j-dex2jar.bat classes.dex
dex2jar classes.dex->.\classes-dex2jar.jar
5.apk反编译可视化工具
1.AndroidKiller工具(集成了反编译、回编译、安装apk、查看源码).
AndroidKiller_v1.3.1.zip
第一次打开的时候需要配置一下jdk的路径
AndroidKiller中集成了好几个工具:
apktool,dex2jar红具集,adb,jd-gui
官网地址:https://ibotpeaches.github.io/Apktool/
连接夜神模拟器
连不上怎么解决?
结束adb进程,重开模拟器,adb devices
常用命令
打开shell:adb shell,adb -s 设备名称 shell
安装apk:adb install 1.apk , adb install -r 1.apk
列举设备:adb devices
·dex2jar工具集
将dex文件转成jar文件,方便jd-gui反编译
·jd-gui工具
可以查看smali代码对应的java源码
2.JEB反编译工具(付费)
3.Jadx-GUI(开源)
jadx-0.8.0.zip
官网地址:https://github.com/skylot/jadx