[1196]Android逆向工具【反射大师】脱壳实战
文章目录
- 关于逆向
- 逆向的准备
- 逆向步骤
- Android系统
- 安装Xposed框架
- 1、下载`Xposed Installer`
- 2、安装`Xposed Installer`
- 安装反射大师
- 1、下载反射大师
- 2、安装ReflectMaster并授权
- 脱壳实战
- 1、安装待脱壳的软件
- 2、用反射大师打开待脱壳App
- 3、脱壳(核心步骤)
- 4、用jadx反编译
- 脱壳后分析
- Dex2Java
- Dex2Smali
- 总结与体会
关于逆向
逆向——包括但不限于通过反编译、Hook 等手段,来解析一些功能的实现过程。
逆向在很多领域都有应用,比如如今爬虫技术已经遍地走,甚至不用写代码都可以爬取数据,导致前端开发的反爬意识也逐步提升。因此 JS、Android 等领域的逆向,已经成为爬虫开发者必备的技能之一。
逆向的准备
这里介绍下关于 Android 的逆向准备:
- Android 真机或模拟器(最好是真机)
- 安装 Android 5.0 或 6.0 版本
- Fiddler、Charles 等抓包工具
- Jadx、ApkTool 等反编译工具
- dumpDex、FDex2 等脱壳工具
- Java、Android 开发基础知识
- Xposed 框架开发基础知识
逆向步骤
介绍一下本文逆向的步骤:
当然,用三步概括,看上去像“把大象塞进冰箱分为几步”。逆向作为一项与应用开发者对抗的网络安全技术,其手段花样多端,有时甚至不需要代码也可以完成逆向,所以这个概括仅对应文中的遇到情况。
相信点击进入这篇博客的小伙伴都知道并且搞过App
逆向,不过有时候会遇到各种加壳的App
,不让你反编译。但是道高一尺,魔高一丈
,有正向加密
,就有逆向解密
。此篇博客博主带大家搭建脱壳环境,并且手动脱一个加了某60的壳的App
。
Android系统
脱壳需要用到的工具,对Android系统是有要求的:环境需要一个Android
系统,需要root权限、版本不能高于Android8.0。这样的真机现在已经很难找到了,还是模拟器方便一些。建议使用虚拟机/模拟器
,不然你还要获取root
权限,容易搞坏真机。我这里用的是网易模拟器,Android
系统的版本为6.0.1
.
安装Xposed框架
需要root
权限,虚拟机直接允许即可,真机要用第三方工具获取,网上有很多教程。
1、下载Xposed Installer
官网地址:https://repo.xposed.info/module/de.robv.android.xposed.installer
2、安装Xposed Installer
下载完毕后,直接拖入模拟器安装即可。然后打开这个App
由于我之前安装过,所以没提示要root权限,第一次安装的时候会提示授权的,授予即可。
安装反射大师
反射大师是一个支持一键脱壳的神器,貌似什么壳都能脱,不过后面更新的壳会不会添加检测机制就说不清了。。。
1、下载反射大师
下载地址:https://www.lanzous.com/i6x1kaf
https://www.duote.com/android/1048782.html
2、安装ReflectMaster并授权
直接拖入模拟器中进行安装,然后打开。会提示让你激活Xposed。
然后重启模拟器!
脱壳实战
1、安装待脱壳的软件
首先在模拟器中安装好待脱壳的软件,用MT管理器可以查看软件加的是什么壳。(反射大师
不区分壳类型,是壳都可以脱。)
2、用反射大师打开待脱壳App
先把软件选中,然后打开待脱壳的App。
3、脱壳(核心步骤)
4、用jadx反编译
jadx工具可以将dex反编译成java代码。
脱壳后分析
安居客app脱壳文件
经过上一步的脱壳操作,我们获取到了多个dex文件,接下来这些dex文件我们可以直接一个一个拖入jadx进行分析,在jadx中可以直接看到其内部的java代码。但是这样对于我们而言太麻烦了,像上面安居客的例子,我们获得了 16个dex,假如我们一个一个拖进jadx中分析,将会耗费我们大量的精力,因此我们需要对这些dex文件进行二次加工,加工细分为以下两个方向:
1、将多个dex使用jadx合并为单个sources文件,然后使用IDE软件进行查看(java层代码静态分析)
2、将多个dex使用baksmali.jar转为smali代码,结合apktool得到项目文件,替换相关smali文件后可用于动态调试
Dex2Java
准备工作
1、jadx文件
jadx文件我们可以通过直接在github项目中下载,如图下载最新版本的jadx-x.x.x.zip,解压后的bin目录中即可看到
2、Dex2Java脚本
该脚本用于将多个dex合并为单个sources文件
自编写如下:
Dex2Java.py
import os, sysif __name__ == "__main__":if len(sys.argv) < 2 :print("start error!start need 2 arguments!")sys.exit()print(sys.argv[1])
path = os.path.split(__file__)[0] + '\\'
print(path)
files= os.listdir(path)
for file in files: if file.find(".dex") > 0: sh = sys.argv[1] + ' -j 1 -r -d ' + path + " " + path + fileprint(sh)os.system(sh)
ps:该python脚本执行时需要传入jadx文件的绝对路径
具体使用
1、我们使用反射大师获取了多个dex文件,我们将Dex2Java.py
放入这些dex文件的同一个文件夹中
2、该目录下执行Dex2Java.py
并传入jadx的绝对路径,我这里为C:\Users\admin\Desktop\jadx\bin\jadx
Dex2Java.py C:\Users\admin\Desktop\jadx\bin\jadx
3、执行完毕后,相同目录下将会得到一个sources文件夹,该文件夹能直接用IDE工具打开查看其java代码
Dex2Smali
准备工作
1、apktool
apktool用于将apk文件反编译为项目文件,下载地址:https://www.pcsoft.com.cn/soft/57847.html
2、baksmali.jar文件
basksmali.jar文件用于将dex文件转为smali代码,下载地址:https://bitbucket.org/JesusFreke/smali/downloads/
3、Dex2Smali脚本
该脚本用于将dex文件转为smali代码
自编写如下:
Dex2Smali.py
import os, sysif __name__ == "__main__":if len(sys.argv) < 2 :print("start error!start need 2 arguments!")sys.exit()path = os.path.split(__file__)[0] + '\\'
files= os.listdir(path)
for file in files: if file.find(".dex") > 0: prefix = file.split('.')[0]print(prefix)sh = 'java -jar ' + sys.argv[1] + ' disassemble -o smali_' + ('' if 'classes'==prefix else prefix) + ' ' + fileprint(sh)os.system(sh)
ps:该python脚本执行时需要传入baksmali.jar文件的绝对路径
具体使用
1、我们使用反射大师获取了多个dex文件,我们将Dex2Smali.py
放入这些dex文件的同一个文件夹中
2、该目录下执行Dex2Smali.py
并传入baksmali.jar的绝对路径,我这里为E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar
Dex2Smali.py E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar
3、执行完毕后得到多个classes文件
4、使用apktool反编译目标apk,得到apk同名项目文件夹
将apk拖入apktool脚本所在文件夹,cmd执行以下命令apktool -r d anjuke.apk -only-main-classes
总结与体会
脱壳只是第一步,后面还有修改、调试、回编译,工作量都很大,以上就是脱壳环境搭建与脱某60壳实战的主要内容。壳确实脱了,但是没有修复步骤,比如修改Apk中的xml、程序入口等操作。这主要是由于不同的壳,修复步骤不同。
分析代码这个步骤,完全是考验你的 Java 基本功 + 耐心,二者缺一不可。
不过不要退缩,我们只要遵循一些技巧,就可以大幅减少工作量。由于分析过程比较繁琐,这里就不结合具体代码了,只做一些理论总结:
1、从目标 API 开始入手,跟踪执行流程: 比如我们刚才已经搜索到关键词代码,那就从那一行开始,通过 IDEA 查看方法功能,可以一路向下点击。
2、只分析涉及代码块,缩小分析范围: 请求过程通常会构建 Request 对象,那参数加密一定就在构建对象之前,我们只要找到构建 Request 对象的代码,然后查看加密参数被传入之前都经过了怎样的处理,其他代码全部无视。
3、将部分代码块复制出来进行执行: 虽然反编译的项目代码无法被整体执行,但对于冗长难懂的方法代码,我们可以连同相关代码一起复制到一个新项目中,进行编译执行,方便我们调试。
4、尝试搜索一些关键词: 代码并不会所有都被混淆,可以尝试全局搜索一些关键词。比如 Java 常用的加密算法,我们可以搜索 RSA、AES、MD5、Encrypt、public_*key 这些关键词和正则匹配,能搜到再好不过了。
当你找到了加密方法,那么可以复制出来独立执行,然后自己构建参数传入加密,通过模拟请求,看接口是否正常返回。
需要注意,如果不能正常请求,并不一定是你找错了地方,也有可能代码本身有误,反编译的代码是有几率会出现这种情况的,导致你执行的和 APK 执行的结果不同。遇到这种情况,只能通过其他手段来修正代码,如阅读 Smali 代码、通过 Hook 等手段,这种情况比较复杂。
参考:https://blog.csdn.net/qq_41855420/article/details/106276824
https://blog.csdn.net/dannyxycheung9665/article/details/130254095
App 爬虫必备技能:三步完成 Android 逆向:https://zhuanlan.zhihu.com/p/80733843
http://www.newxtc.com/article.php?id=227
[1196]Android逆向工具【反射大师】脱壳实战相关推荐
- 【Android逆向】XPOSED+反射大师脱壳实战
目录 前言 一.环境搭建 1.Android模拟器 2.XPOSED 3.反射大师 二.脱壳步骤 1.安装目标apk 2.查壳 3.脱壳 总结 前言 Android APK加壳已经非常普遍了,Andr ...
- Android逆向工具xposed和mt管理器进行应用脱壳和去广告
1.下载安卓模拟器,使用网易木木模拟器,官网下载就行,然后打开root和应用兼容性,否则无法使用xposed . 下载之后模拟器版本为 2.下载xposed,官网 https://repo.xpose ...
- 【Android 逆向】整体加固脱壳 ( 脱壳点简介 | 修改系统源码进行脱壳 )
文章目录 一.脱壳点简介 二.修改系统源码进行脱壳 一.脱壳点简介 在上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 rewriteD ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )
文章目录 前言 一.DexPrepare.cpp 中 rewriteDex() 方法分析 二.DvmDex.cpp 中 dvmDexFileOpenPartial() 方法分析 ( 脱壳点 ) 三.D ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )
文章目录 前言 一.DexPrepare.cpp 中 dvmContinueOptimizati() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | D ...
- 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )
文章目录 前言 一.DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 二./bin/dexopt 源码分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ...
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 )
文章目录 前言 一.RawDexFile.cpp 中 dvmRawDexFileOpen() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DexClassLoader 加载 ...
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 查找 DexFile 对应的C代码 | dalvik_system_DexFile.cpp 分析 )
文章目录 前言 一.查找 DexFile 对应的 C++ 代码 1.根据 Native 文件命名惯例查找 C++ 代码 2.根据方法名查找 二.dalvik_system_DexFile.cpp 源码 ...
- 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )
文章目录 前言 一.DexFile.loadDexFile 函数分析 二.DexFile 构造函数分析 三.DexFile.openDexFile 函数分析 前言 上一篇博客 [Android 逆向] ...
最新文章
- Chapter 3 Phenomenon——24
- 04-树7 二叉搜索树的操作集(c语言实现)
- MySQL+Hibernate下连接空闲8小时自动断开问题解决方案
- 20191004:包装类Integer,int,String类的相互转换
- 黑龙江省计算机应用能力考试,2020黑龙江省一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题)...
- web前端设计与开发作品:旅游酒店网站设计——中国风的温泉酒店预订网站全套html模板(13页) HTML+CSS+JavaScript
- 混沌神经网络的实际应用,进化算法优化神经网络
- 工业通讯 | OEM嵌入式通讯模块与西门子PLC S7-1200通讯测试指南
- rpg人物制作软件_RPG Maker系列最新版本《RPG制作大师MZ》上架Steam
- Word中如何修改脚注的编号方式
- 想成功就不要设定目标,你信吗?
- TokenInsight 对话首席——加密通证期货世界,究竟是投机还是金融工具?
- 安卓应用设置第一个显示的界面
- 十年电影票房数据爬取与分析 | 免费数据教程
- js 移动端阻止下拉滑动、刷新
- MySQL 不四舍五入取整、取小数、四舍五入取整、取小数、向下、向上取整
- Java解决时间小时时差问题
- cPython的GIL
- 痛苦与反思:想提升自己,却不知道该如何做
- 如何加声调口诀_小学拼音声调的口诀是什么??
热门文章
- 云南交通职业技术学院计算机网络技术,交院笔记_云南交通职业技术学院_零二七艺考...
- Bitcoin+STARK: ZeroSync Khepri
- RS232,RS422,RS485的区别和RS485通讯线缆注意事项
- android应用怎样接入广告,android应用加入广告方法
- 关于mount命令挂载NFS问题
- 微信小程序开发系列——3. 腾讯云服务器配置
- 新一代3D造型设计与着色渲染系统
- 抓图工具HyperSnap
- 各大主流网站使用的 font-family 字体
- Android仿知乎图片墙