1.安卓逆向学习入门记录
时间:2022-07-28
本文章向大家介绍1.安卓逆向学习入门记录,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
[TOC]
0x00 前言
Android 安全与逆向分析, 自从2017年网络安全法的实施,网络安全受到越来越多的企业和行业的重视,Android 安全的重要性已无需多言,只要有智能机的朋友无论是apple还是Android都是离不开其内部的生态圈的, 所以自2017年起各大主流的加固采取VM优化代码,加之各厂商协议越来越底层和采用证书, 更越发重视服务器的风险控制和安全保障, 所以对安卓软件和安卓系统的渗透测试已成为热门的学习方向;
学习流程:
- 1.环境搭建
- 2.APK文件结构
- 3.APK打包流程
- 4.APK安装流程
- 5.APK反编译与回编译
- 6.基础知识点(编程语言:Java C/C++ , 虚拟机)
- 7.Dalvk字节码
- 8.small文件
- 9.快速定位关键代码
0x01 基础环境
常用工具集:
- 运行环境: JDK/SDK/NDK
- IDE:Eclipse(推荐) / AndroidStudio
- 逆向工具:AndroidKill / Jeb / Jadx / GDA /Android逆向助手 / IDA / GDB (后面单独介绍各逆向工具的使用)
- 签名:Apkhelper / getsign / APK 上上签
- 安卓模拟器:雷电(快速) / 海马玩(稳定)
- 常用软件: adb.exe / RE文件管理器 / MT 管理器
基础软件安装:
# 静默安装
jdk-8u251-windows-x64.exe /s
# 环境变量
setx JAVA_HOME "C:Program FilesJavajdk1.8.0_251" /M
setx NDK_HOME "C:Android-Reseverandroid-ndk-r21" /M
setx CLASSPSTH ".;%JAVA_HOME%libdt.jar;%JAVA_HOME%libtools.jar;" /M
setx PATH "%PATH%;%JAVA_HOME%bin;%NDK_HOME%" /M
# 安装软件版本
C:UsersWeiyi>java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_251-b08)
Java HotSpot(TM) 64-Bit Server VM (build 25.251-b08, mixed mode)
C:UsersWeiyi>ndk-build
Android NDK: Could not find application project directory !
Android NDK: Please define the NDK_PROJECT_PATH variable to point to it.
C:Android-Reseverandroid-ndk-r21build\..buildcorebuild-local.mk:151: ***
Android NDK: Aborting . Stop.
注意事项:
- 1.JDK与NDK的配置路径中不能有中文和空格;
- 2.安装包文件不全则运行会出错;
- 3.安装完成后需要校验设置的环境变量;
- 4.如果在运行ndk-build提示
api-ms-win-crt-convert-l1-1-0.dll
找不到时候将本机的32位与64位分别放置于system32、SysWOW64目录之中然后注册该DLL;@echo 开始注册 copy api-ms-win-crt-convert-l1-1-0.dll %windir%sysWOW64 regsvr32 %windir%sysWOW64api-ms-win-crt-convert-l1-1-0.dll /s @pause
0x02 APK文件与目录介绍
APK 文件
描述:APK全称为Android Package的缩写即Android安装包,APK是类似于Symbian sis 或者 Sisx 的文件格式。通过将APK文件直接转入到Android手机或者Android模拟器中即可安装执行;
APK 文件目录
描述:将APK文件通过解压缩包进行解压,然后可以看见应用程序的一些代码和资源;
❯ tree -L 1 -r
├── third_party
├── resources.arsc
├── res # 通用 - 编译过的文件(二进制)以及应用静态资源(图片/xml/)即UI界面的一些东西;
├── drawable #图片
├── layout #布局
└── menu #菜单
├── org
├── okhttp3
├── lib # 通用 - 静态链接文件so
├── jsr305_annotations
├── javax
├── freemarker
├── error_prone
├── entity.ftl
├── dao.ftl
├── dao-unit-test.ftl
├── dao-session.ftl
├── dao-master.ftl
├── dao-deep.ftl
├── content-provider.ftl
├── classes.dex #通用 - java编译后的可执行文件(android中)
├── build-data.properties
├── resources.arsc # 经过AAPT编译过的资源文件,字符串文件以及显示样式文件夹
├── assets #通用 - 不经过AAPT编译的资源文件
├── androidsupportmultidexversion.txt
├── META-INF #通用 - 文件摘要(摘要加密和签名证书文件目录)
├── GOFUN.RSA #公钥加密算法描述
├── GOFUN.SF #加密文件它是使用私钥对摘要名称加密后得道的密文信息,只有使用私钥配对的公钥才能进行解密该文件;
└── MANIFEST.MF #程序清单文件,它包括所有文件的摘要信息
└── AndroidManifest.xml # 通用 - 配置清单文件(安卓的配置清单)
文件:MANIFEST.MF
Manifest-Version: 1.0
Name: AndroidManifest.xml
SHA-256-Digest: sCLLLPEivWLfeMHwNEz7Bt3yeBWMiT+EjPcIL9QdvxI=
文件:gofun.sf (采用公钥对MANIFEST.MF文件中的资源进行再次摘要加密)
Signature-Version: 1.0
Created-By: 1.0 (Android)
SHA-256-Digest-Manifest: WPorAy8iCJO3Rl5xbczVMiBhZOXOQXjVwylG1xL2ulA=
X-Android-APK-Signed: 2
Name: AndroidManifest.xml
SHA-256-Digest: GFXtodin/suAdOtSKFP/1RSvvOFy/Hx6dxlcJyZYRYc=
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 鸿蒙源码下载并编译
- g2o、Eigen、Mat矩阵类型转换
- 相见恨晚!OLAP数仓基础入门大全
- Activiti7 流程变量(UEL-Value方式)
- 给IE9及其以下等不支持classList属性的浏览器,添加classList属性
- Docker使用手册 嵌入式Linux环境搭建
- Activiti7 流程部署
- Activiti7 启动流程实例
- linux文本处理工具及正则表达式
- linux目录结构及文件管理
- centos7-httpd虚拟主机
- k8s1.13.0二进制部署-node节点(四)
- k8s1.13.0二进制部署-flannel网络(二)
- k8s1.13.0二进制部署-master节点(三)
- k8s1.13.0二进制部署-ETCD集群(一)