App逆向
1 app 逆向入门
# 1 逆向设备与root-真机和模拟器-解BL锁-fastboot刷机和root-twrp刷root-面具和常见模块# 2 Python虚拟环境-系统解释器环境-virtualenv虚拟环境-解释器配置常见错误# 3 抓包与配置-charles介绍配置和安装-https证书-用户证书与系统证书-解锁system分区-Magisk+moveCert# 4 反编译工具和配置-apk文件结构-jdk安装和配置-jadx配置和使用-jeb配置和使用-GDA使用-反编译工具对比推荐# 5 逆向分析流程-模拟器配置-app的安装和初始化-http抓包配置-charles必备技能-抓包配置-修改和重新请求-请求现象分享-apk反编译和关键点寻找-算法逆向和还原
2 Java必备语法
# 1 Java环境搭建# 2 JDK和JRE# 3 语法基础-文件/类名/代码结构-变量和常量-输入输出-条件语句-循环语句-注释和其他# 4 数据类型-整数相关:byte,short,int,long-字符和字符串-数组-Object基类-List相关:ArrayList,LinkedList-Set相关:HashSet,TreeSet-Map相关:HashMap,TreeMap-类型转换-逆向常见案例# 5 面向对象相关-类和对象-静态成员-类的继承-接口和抽象类-成员修饰符-泛型# 6 包相关-包的定义-导入和修饰符-成员权限-内置和第三方# 7 常见加密和工具(Java和Python)-字节和字节数组(有无符号)-UUID随机值-十六进制字符串-md5/sha1/sha256等加密-RSA非对称加密-AES/DES 加密-GZIP压缩-国密等-Cyberchef工具
3 安卓开发核心
# 1 安卓环境搭建-Android Studio-安卓SDK安卓和配置# 2 安装开发(正向)-UI开发和设计-标签处理和事件绑定-交互字段-后台服务-OKHttp3网络请求:常见请求,拦截器,逆向常见应用套路-Retrofit网络库-SharedPreferences持久化-Json序列化和反序列化# 3 安装无障碍开发(正向)-开启无障碍服务-引导无障碍页面-页面元素查找# 4 API开发-Flask框架搭建与使用-路由和视图编写-API请求接收和响应-安装http配置和数据交互# 5 C语言基础-整形和字节-字符和字符串-数组-指针:指针类型,多级指针,指针运算-结构体-预处理和头文件-常见内置包和函数# 6 安卓JNI开发(正向)-NDK工具包-项目配置-JNI和JVM对象-native方法的定义-静态注册和动态注册-java类型/native类型/jni签名-c语言和java的调用和转换:-ptrace处理-导出函数/导入函数/符号表
4 Frida框架
# 1 ADB-服务管理-必备指令:上传下载,安装卸载,手机处理,远程系统,usb和网络连接,多设备处理,其它指令-案例:自动刷抖音# 2 安装和配置-frida-server(安卓端)-frida(PC端)-端口转发# 3 脚本语言分类-Python版-JavaScript版# 4 Hook模式-attach-spawn# 5 Hook脚本-java层-so层# 6 frida-rpc和数据通信-rpc类型处理和转化-相互数据通信# 3 ROOT检测-java层关键字检测和绕过-so层关键字检核和绕过-定制AOSP源码绕过# 4 frida监测和反调试-frida特征检测-strongR-frida-ptrace占坑-libc.so系统函数hook-pthread寻找和替换# 5 脱壳-脱壳工具使用-frida脱壳-安卓底层必备脱壳+Fart脱壳机-so层加固,内存脱壳,修复-VMP加固原理和脱壳
5.1 逆向原理
# 安卓app逆向正向:安卓开发工程师 ->Java语法+安卓框架 -> 功能代码(Java+C) -> APK(资源文件/.dex/.so)逆向:安卓逆向工程师 -> APK -> 反编译 -> Java+C代码 + Hook -> Python代码还原
5.2 什么是反编译,什么是HOOK
反编译
# 反编译是指将已编译的安卓应用程序(APK文件)转换回其源代码的过程。通常,安卓应用程序在开发过程中会经过编译,将源代码转换为可执行的二进制代码,这使得源代码不可见和难以理解。反编译的过程旨在还原应用程序的源代码,以便进行分析、理解和修改。# 通过安卓反编译,你可以获取应用程序的源代码,了解其实现逻辑、算法、资源文件和其他关键信息。这对于安卓应用程序的安全评估、漏洞分析、逆向工程、定制化和学习都有重要意义。# 在安卓反编译过程中,常见的工具和技术包括:apktool:apktool是一款常用的开源工具,用于反编译和重新打包APK文件。它可以将APK文件解压为资源文件和Smali代码,并提供了对Smali代码进行分析和编辑的功能。JADX:JADX是一款功能强大的开源工具,用于将APK文件转换为可读的Java源代码。它能够还原大部分Java代码,并提供源代码分析和导航功能。JD-GUI:JD-GUI是一款免费的Java反编译工具,可以将已编译的Java类文件转换为可读的Java源代码。尽管它主要用于Java反编译,但对于某些Smali代码的反编译也有一定的支持
HOOK
# HOOK指的是通过修改或替换目标应用程序的函数或方法来改变其行为的技术。这种技术允许开发者或黑客在不修改应用程序源代码的情况下,对其进行定制、调试、修改或篡改。# 在安卓中,常见的HOOK技术有以下几种:动态链接库(DLL)注入:通过加载一个自定义的动态链接库来替换目标应用程序的某些函数或方法。这种方式通常需要在ROOT权限下进行,并且需要一些额外的工具和技术,如Xposed Framework或Frida。Xposed框架:Xposed是一款强大的安卓框架,它提供了一种简单的方式来HOOK安卓应用程序。通过Xposed框架,开发者可以编写模块,用于修改或替换目标应用程序的函数或方法。Frida框架:Frida是一款功能强大的动态分析工具,它提供了在运行时修改和HOOK应用程序的能力。通过Frida,开发者可以使用JavaScript编写脚本,动态修改目标应用程序的行为
5.3 电脑设备选择
# mac或win系统均可# 建议i5,16g以上内存
5.4 安卓设备选择
-
安卓真机
推荐:Pixel谷歌手机【逆向+刷自定义安卓系统+脱壳机】
注意:购买时,必须要买解OEM锁的版本(欧版)
其他:小米手机(官方支持解BL锁)
在逆向时,你的安卓设备必须获取ROOT权限,一般想要获取ROOT的权限,必须:
-
手机解BL锁或OEM锁 -
刷官方系统 + 基于Magisk面具对手机进行ROOT
5.5 什么是OEM锁,BL锁
"Pixel开启OEM锁",通常指的是在Google Pixel设备上启用了OEM锁(也称为Bootloader锁)。OEM锁是一个安全机制,目的是保护设备免受未经授权的修改和潜在的安全威胁# 如何开启OEM锁,详见资料https://www.cnblogs.com/liuqingzheng/p/17462146.html
5.6 补充谷歌系列手机
# 以下是Nexus和Pixel手机的一些常见型号、版本和发布时间的简要列表:## Nexus手机系列:Nexus One - Android 2.1 Eclair - 2010年1月发布Nexus S - Android 2.3 Gingerbread - 2010年12月发布Galaxy Nexus - Android 4.0 Ice Cream Sandwich - 2011年11月发布Nexus 4 - Android 4.2 Jelly Bean - 2012年11月发布Nexus 5 - Android 4.4 KitKat - 2013年10月发布Nexus 6 - Android 5.0 Lollipop - 2014年10月发布Nexus 5X - Android 6.0 Marshmallow - 2015年9月发布Nexus 6P - Android 6.0 Marshmallow - 2015年9月发布Nexus 9 - Android 5.0 Lollipop - 2014年11月发布Nexus Player - Android 5.0 Lollipop - 2014年11月发布## Pixel手机系列:Pixel - Android 7.1 Nougat - 2016年10月发布Pixel XL - Android 7.1 Nougat - 2016年10月发布Pixel 2 - Android 8.0 Oreo - 2017年10月发布Pixel 2 XL - Android 8.0 Oreo - 2017年10月发布Pixel 3 - Android 9 Pie - 2018年10月发布Pixel 3 XL - Android 9 Pie - 2018年10月发布Pixel 3a - Android 9 Pie - 2019年5月发布Pixel 3a XL - Android 9 Pie - 2019年5月发布Pixel 4 - Android 10 - 2019年10月发布Pixel 4 XL - Android 10 - 2019年10月发布Pixel 4a - Android 10 - 2020年8月发布Pixel 4a (5G) - Android 11 - 2020年9月发布Pixel 5 - Android 11 - 2020年9月发布Pixel 6和Pixel 6 Pro -2021年9月发布Pixel 7a、Pixel 7 -2023年5月发布
六 Root设备
6.1 什么是root
ROOT是指获取安卓设备(手机或平板电脑)的超级用户权限,也被称为管理员或根用户权限。通过Root手机,用户可以获得对操作系统的完全控制权限,可以访问和修改系统文件、安装自定义固件、运行需要Root权限的应用程序等。# Root权限的好处包括:定制化:Root后,用户可以更深入地定制和个性化他们的设备,如更改主题、修改系统设置、安装自定义ROM等。删除预装应用程序:有些设备预装了一些无法卸载的应用程序,通过Root可以删除这些预装应用程序,释放存储空间和系统资源。安装和运行需要Root权限的应用程序:有些应用程序需要Root权限才能正常工作,例如一些备份工具、系统优化工具等。提高性能和扩展功能:通过Root权限,用户可以进行一些系统优化和调整,以提高设备的性能和功能。需要注意的是,Root手机可能存在一些风险和潜在的问题,包括安全性问题、失去设备保修、无法正常升级系统等。# Root手机也可能违反设备制造商的保修条款,因此在进行Root操作之前,请先查看设备的保修政策。
6.2 谷歌pixel手机root方式
参考资料:
https://www.cnblogs.com/liuqingzheng/p/17462146.html
https://www.cnblogs.com/liuqingzheng/p/17462127.html
6.3 小米手机root方式
正常拿到一部手机后需要做:
-
第1步:申请解BL锁
注册小米账号、手机和账号绑定、申请解锁,申请后一般需等7天才能成功解锁。
注:淘宝上有人可以秒解,曾有同学新手机被搞的无法开机,又去返厂(请谨慎)。
-
第2步:root,手机root就是获得最高权限,app逆向必备,一般现在的手机root有2种方式:
-
FastBoot刷Magisk,一般分区无法挂载(system目录)【推荐】
七 Python虚拟环境
7.1 虚拟环境搭建
虚拟环境优点
1、使不同应用开发环境相互独立2、环境升级不影响其他应用,也不会影响全局的python环境3、防止出现包管理混乱及包版本冲突
windows
安装
# 建议使用pip3安装到python3环境下pip3 install virtualenvpip3 install virtualenvwrapper-win
配置虚拟环境管理器工作目录
# 配置环境变量:# 控制面板 => 系统和安全 => 系统 => 高级系统设置 => 环境变量 => 系统变量 => 点击新建 => 填入变量名与值变量名:WORKON_HOME 变量值:自定义存放虚拟环境的绝对路径eg: WORKON_HOME: D:\Virtualenvs# 同步配置信息:# 去向Python3的安装目录 => Scripts文件夹 => virtualenvwrapper.bat => 双击
MacOS、Linux
安装
# 建议使用pip3安装到python3环境下pip3 install -i https://pypi.douban.com/simple virtualenvpip3 install -i https://pypi.douban.com/simple virtualenvwrapper
工作文件
# 先找到virtualenvwrapper的工作文件 virtualenvwrapper.sh,该文件可以刷新自定义配置,但需要找到它# MacOS可能存在的位置 /Library/Frameworks/Python.framework/Versions/版本号文件夹/bin# Linux可能所在的位置 /usr/local/bin | ~/.local/bin | /usr/bin# 建议不管virtualenvwrapper.sh在哪个目录,保证在 /usr/local/bin 目录下有一份# 如果不在 /usr/local/bin 目录,如在 ~/.local/bin 目录,则复制一份到 /usr/local/bin 目录-- sudo cp -rf ~/.local/bin/virtualenvwrapper.sh /usr/local/bin
配置
# 在 ~/.bash_profile 完成配置,virtualenvwrapper的默认默认存放虚拟环境路径是 ~/.virtualenvs# WORKON_HOME=自定义存放虚拟环境的绝对路径,需要自定义就解注VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3source /usr/local/bin/virtualenvwrapper.sh# 在终端让配置生效:-- source ~/.bash_profile
使用
# 在终端工作的命令# 1、创建虚拟环境到配置的WORKON_HOME路径下# 选取默认Python环境创建虚拟环境:-- mkvirtualenv 虚拟环境名称# 基于某Python环境创建虚拟环境:-- mkvirtualenv -p python2.7 虚拟环境名称-- mkvirtualenv -p python3.6 虚拟环境名称# 2、查看已有的虚拟环境-- workon# 3、使用某个虚拟环境-- workon 虚拟环境名称# 4、进入|退出 该虚拟环境的Python环境-- python | exit()# 5、为虚拟环境安装模块-- pip或pip3 install 模块名# 6、退出当前虚拟环境-- deactivate# 7、删除虚拟环境(删除当前虚拟环境要先退出)-- rmvirtualenv 虚拟环境名称
7.2 pycharm创建虚拟环境
7.3 导出项目依赖
# 每个python项目根目录,必须要有一个requirements.txt 用来存方项目的依赖pip freeze > requirements.txt
命令
1、创建虚拟环境到配置的WORKON_HOME路径下
选取默认Python环境创建虚拟环境:
-- mkvirtualenv 虚拟环境名称
基于某Python环境创建虚拟环境:
-- mkvirtualenv -p python2.7 虚拟环境名称-- mkvirtualenv -p python3.6 虚拟环境名称
2、查看已有的虚拟环境
-- workon
3、使用某个虚拟环境
-- workon 虚拟环境名称
4、进入|退出 该虚拟环境的Python环境
-- python | exit()
5、为虚拟环境安装模块
-- pip或pip3 install 模块名
6、退出当前虚拟环境
-- deactivate
7、删除虚拟环境(删除当前虚拟环境要先退出)
-- rmvirtualenv 虚拟环境名称
### 7.2 pycharm创建虚拟环境### 7.3 导出项目依赖```python# 每个python项目根目录,必须要有一个requirements.txt 用来存方项目的依赖pip freeze > requirements.txt
夜雨聆风