[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
JDK:Java开发与运行环境。下载地址
NDK:使您能在 Android 应用中使用 C 和 C++ 代码。 下载地址
IDE:Eclipse(推荐) / AndroidStudio
逆向工具:AndroidKill / Jeb / Jadx / GDA /Android逆向助手 / IDA / GDB (后面单独介绍各逆向工具的使用)
签名:Apkhelper / getsign / APK 上上签
安卓模拟器:雷电(快速) / 海马玩(稳定)
常用软件: adb.exe / RE文件管理器 / MT 管理器
基础软件安装:
[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
JDK:Java开发与运行环境。下载地址
NDK:使您能在 Android 应用中使用 C 和 C++ 代码。 下载地址
IDE:Eclipse(推荐) / AndroidStudio
逆向工具:AndroidKill / Jeb / Jadx / GDA /Android逆向助手 / IDA / GDB (后面单独介绍各逆向工具的使用)
签名:Apkhelper / getsign / APK 上上签
安卓模拟器:雷电(快速) / 海马玩(稳定)
常用软件: adb.exe / RE文件管理器 / MT 管理器
基础软件安装:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 jdk-8u251-windows-x64.exe /s setx JAVA_HOME "C:\Program Files\Java\jdk1.8.0_251" /M setx NDK_HOME "C:\Android-Resever\android-ndk-r21" /M setx CLASSPSTH ".;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;" /M setx PATH "%PATH%;%JAVA_HOME%\bin\;%NDK_HOME%" /M C:\Users\Weiyi>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:\Users\Weiyi>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-Resever\android-ndk-r21\build\\..\build\core\build-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;1 2 3 4 @echo 开始注册 copy api-ms-win-crt-convert-l1-1-0.dll %windir%\sysWOW64 regsvr32 %windir%\sysWOW64\api-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文件通过解压缩包进行解压,然后可以看见应用程序的一些代码和资源;1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 ❯ tree -L 1 -r ├── third_party ├── resources.arsc ├── res ├── drawable ├── layout └── menu ├── org ├── okhttp3 ├── lib ├── 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 ├── build-data.properties ├── resources.arsc ├── assets ├── androidsupportmultidexversion.txt ├── META-INF ├── GOFUN.RSA ├── GOFUN.SF └── MANIFEST.MF └── AndroidManifest.xml
文件:MANIFEST.MF1 2 3 4 Manifest-Version: 1.0 Name: AndroidManifest.xml SHA-256-Digest: sCLLLPEivWLfeMHwNEz7Bt3yeBWMiT+EjPcIL9QdvxI=
文件:gofun.sf (采用公钥对MANIFEST.MF文件中的资源进行再次摘要加密)1 2 3 4 5 6 7 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=