Android逆向概述

image.png
image.png

1.Android APK文件结构

android studio生成的apk在以下目录
image.png
基本的APK是一个压缩包,压缩包中有
image.png
META-INF目录签名信息,包括公司信息、文件的HASH值
Res目录资源信息,包括图片、xml(布局文件、字符串、风格样式等)
AndroidMainfestxml清单文件,包括APK包名、四大组件的一些申明定义、权限、程序的入口
Classes.dex可执行文件,包括java的类信息、方法信息、字段信息、虚拟机指令.
dex文件的生成流程是从java源码->class文件->dex文件
Resources.arsc资源序号文件,包括资源里的所有ID、名称.资源ID对应文件是R.class
image.png
image.png

Lib目录动态库,扩展名是.so,包括C++代码,有各种平台,比如×86,arm
image.png
Assets目录自定义资源,比如.txt,mp4,等等
image.png

问题:Android APK的入口函数是什么?

自己定义的MainActivity中onCreate
清单文件中application节点可以添加android:name属性,指定继承自application的类,用于初始化整个app的全局信息.继承自application的类有两个重写函数会执行,是程序最早执行的函数.
①attachBaseContext
②onCreate
image.png
所以一个app最早执行的函数是application的类中的attachBaseContext函数一般apk加固之后,都会自定义application类,并重写其中的attachBaseContext函数或onCreate函数,并且声明为native类型的函数.
app运行的流程
image.png

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
image.pngadb pull
image.png
③安装apk
adb install-r apk文件名(可以覆盖安装)

④启动apk
adb shell am start-n<包名/activity名称>
image.png
以调试方式启动apk
adb shell am start-D-n<包名/activity名称>(以调试方式启动)
image.png
⑤shell命令
使用adb shell进入安卓命令行,可以在命令行使用Linux命令
Is,cd,su,ps,ps | grep com,kill,chmod

常用adb命令

image.png

monitor操作

①概况
·android studio中打开
image.png
文件目录中打开
image.png
·主要窗口
image.png
④日志
image.png
过滤日志
image.png

3.逆向工具介绍

命令行工具

命令行工具以及demo.zip

1.AndroidManifest.xml清单文件解密工具

·AXMLPrinter2.,jar java-jar AXMLPrinter2.jar<清单文件>
java-jar AXMLPrinter2.jar AndroidManifest.xml>out.xml
image.png
image.png

·APK15PBParser.jar(集成了AXMLPrinter2.jar,apktool.jar中xml解析部分代码)
java-jar APK15PBParser.jar
java-jar APK15PBParser.jar HelloWorld1.apk
image.png
image.png

2.Dex文件反汇编、汇编工具

Dex文件是android java代码编译生成的二进制文件,包含了虚拟机指令(dalvik虚拟机)
·Baksmali.jar(反汇编工具,将虚拟机指令反汇编成smali代码)
java -jar baksmali.jar -o <输出目录>
java -jar baksmali.jar classes.dex -o out_dir
image.png
反汇编生成的目录中,包括所有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
image.png

3.apk签名工具

签名工具,使用android系统源码编译时用到的一个工具
java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk
下面使用bat脚本执行命令

  1. @ECHO OFF
  2. Echo Auto-sign Created By Dave Da illest 1
  3. Echo Update.zip is now being signed and will be renamed to update_signed.zip
  4. java -jar signapk.jar testkey.x509.pem testkey.pk8 update.apk update_signed.apk
  5. Echo Signing Complete
  6. Pause
  7. EXIT

image.png

4.apk反编译工具

apktool

反编译apk
java -jar apktool,jar d
java -jar apktool.jar d HelloWorld.apk
①将清单文件以及其他xml文件解密
②将资源序号文件(resources.arsc)与资源名称做了一个对应关系表
生成在了/res/values/public.xml
image.png
③将dex文件反编译成了smali代码
回编译 apk目录
java -jar apktool.jar b <反编译的apk文件目录>
java -jar apktool.jar b HelloWorld
生成的APK在<反编译的apk文件目录>/dist目录中
image.png

Dex2jar工具(转换文件格式)

dex2jar>d2j-dex2jar.bat
dex2jar>d2j-dex2jar.bat classes.dex
dex2jar classes.dex->.\classes-dex2jar.jar
image.png
image.png

5.apk反编译可视化工具

1.AndroidKiller工具(集成了反编译、回编译、安装apk、查看源码).

AndroidKiller_v1.3.1.zip
第一次打开的时候需要配置一下jdk的路径
image.png
AndroidKiller中集成了好几个工具:
apktool,dex2jar红具集,adb,jd-gui

image.png
image.png
image.png
image.png
官网地址:https://ibotpeaches.github.io/Apktool/
image.png

·adb工具
image.png
image.png

连接夜神模拟器

连不上怎么解决?
结束adb进程,重开模拟器,adb devices
image.png

常用命令
打开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源码
image.png
image.png
image.png
image.png

2.JEB反编译工具(付费)

jeb236.zip
image.png
image.png

3.Jadx-GUI(开源)

jadx-0.8.0.zip
官网地址:https://github.com/skylot/jadx
image.png
image.png
image.png

4.GDA反编译工具

GDA3.65.zip
image.png

5.Java反编译工具(将java文件反编译为源码)

4.Android逆向分析方法5.字符串分析法-实例-破解一个

apk的流程

6.日志过滤分析法

7.配置环境问题