文章目录

  • 关于逆向
    • 逆向的准备
    • 逆向步骤
  • 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逆向工具【反射大师】脱壳实战相关推荐

  1. 【Android逆向】XPOSED+反射大师脱壳实战

    目录 前言 一.环境搭建 1.Android模拟器 2.XPOSED 3.反射大师 二.脱壳步骤 1.安装目标apk 2.查壳 3.脱壳 总结 前言 Android APK加壳已经非常普遍了,Andr ...

  2. Android逆向工具xposed和mt管理器进行应用脱壳和去广告

    1.下载安卓模拟器,使用网易木木模拟器,官网下载就行,然后打开root和应用兼容性,否则无法使用xposed . 下载之后模拟器版本为 2.下载xposed,官网 https://repo.xpose ...

  3. 【Android 逆向】整体加固脱壳 ( 脱壳点简介 | 修改系统源码进行脱壳 )

    文章目录 一.脱壳点简介 二.修改系统源码进行脱壳 一.脱壳点简介 在上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 rewriteD ...

  4. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | dvmDexFileOpenPartial | dexFileParse | 脱壳点 | 获取 dex 文件在内存中的首地址 )

    文章目录 前言 一.DexPrepare.cpp 中 rewriteDex() 方法分析 二.DvmDex.cpp 中 dvmDexFileOpenPartial() 方法分析 ( 脱壳点 ) 三.D ...

  5. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmContinueOptimizati() 函数分析 )

    文章目录 前言 一.DexPrepare.cpp 中 dvmContinueOptimizati() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DEX 优化流程分析 | D ...

  6. 【Android 逆向】整体加固脱壳 ( DEX 优化流程分析 | DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 | /bin/dexopt 源码分析 )

    文章目录 前言 一.DexPrepare.cpp 中 dvmOptimizeDexFile() 方法分析 二./bin/dexopt 源码分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ...

  7. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | RawDexFile.cpp 分析 | dvmRawDexFileOpen函数读取 DEX 文件 )

    文章目录 前言 一.RawDexFile.cpp 中 dvmRawDexFileOpen() 方法分析 前言 上一篇博客 [Android 逆向]整体加固脱壳 ( DexClassLoader 加载 ...

  8. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | 查找 DexFile 对应的C代码 | dalvik_system_DexFile.cpp 分析 )

    文章目录 前言 一.查找 DexFile 对应的 C++ 代码 1.根据 Native 文件命名惯例查找 C++ 代码 2.根据方法名查找 二.dalvik_system_DexFile.cpp 源码 ...

  9. 【Android 逆向】整体加固脱壳 ( DexClassLoader 加载 dex 流程分析 | DexFile loadDexFile 函数 | 构造函数 | openDexFile 函数 )

    文章目录 前言 一.DexFile.loadDexFile 函数分析 二.DexFile 构造函数分析 三.DexFile.openDexFile 函数分析 前言 上一篇博客 [Android 逆向] ...

最新文章

  1. Chapter 3 Phenomenon——24
  2. 04-树7 二叉搜索树的操作集(c语言实现)
  3. MySQL+Hibernate下连接空闲8小时自动断开问题解决方案
  4. 20191004:包装类Integer,int,String类的相互转换
  5. 黑龙江省计算机应用能力考试,2020黑龙江省一级计算机基础及MS Office应用考试在线自测试题库(不限设备,登陆即可做题)...
  6. web前端设计与开发作品:旅游酒店网站设计——中国风的温泉酒店预订网站全套html模板(13页) HTML+CSS+JavaScript
  7. 混沌神经网络的实际应用,进化算法优化神经网络
  8. 工业通讯 | OEM嵌入式通讯模块与西门子PLC S7-1200通讯测试指南
  9. rpg人物制作软件_RPG Maker系列最新版本《RPG制作大师MZ》上架Steam
  10. Word中如何修改脚注的编号方式
  11. 想成功就不要设定目标,你信吗?
  12. TokenInsight 对话首席——加密通证期货世界,究竟是投机还是金融工具?
  13. 安卓应用设置第一个显示的界面
  14. 十年电影票房数据爬取与分析 | 免费数据教程
  15. js 移动端阻止下拉滑动、刷新
  16. MySQL 不四舍五入取整、取小数、四舍五入取整、取小数、向下、向上取整
  17. Java解决时间小时时差问题
  18. cPython的GIL
  19. 痛苦与反思:想提升自己,却不知道该如何做
  20. 如何加声调口诀_小学拼音声调的口诀是什么??

热门文章

  1. 云南交通职业技术学院计算机网络技术,交院笔记_云南交通职业技术学院_零二七艺考...
  2. Bitcoin+STARK: ZeroSync Khepri
  3. RS232,RS422,RS485的区别和RS485通讯线缆注意事项
  4. android应用怎样接入广告,android应用加入广告方法
  5. 关于mount命令挂载NFS问题
  6. 微信小程序开发系列——3. 腾讯云服务器配置
  7. 新一代3D造型设计与着色渲染系统
  8. 抓图工具HyperSnap
  9. 各大主流网站使用的 font-family 字体
  10. Android仿知乎图片墙