前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[1196]Android逆向工具【反射大师】脱壳实战

[1196]Android逆向工具【反射大师】脱壳实战

作者头像
周小董
发布2023-10-10 08:33:21
2.7K0
发布2023-10-10 08:33:21
举报
文章被收录于专栏:python前行者

关于逆向

逆向——包括但不限于通过反编译、Hook 等手段,来解析一些功能的实现过程。

逆向在很多领域都有应用,比如如今爬虫技术已经遍地走,甚至不用写代码都可以爬取数据,导致前端开发的反爬意识也逐步提升。因此 JS、Android 等领域的逆向,已经成为爬虫开发者必备的技能之一。

逆向的准备

这里介绍下关于 Android 的逆向准备:

  • Android 真机或模拟器(最好是真机)
  • 安装 Android 5.0 或 6.0 版本
  • Fiddler、Charles 等抓包工具
  • Jadx、ApkTool 等反编译工具
  • dumpDex、FDex2 等脱壳工具
  • Java、Android 开发基础知识
  • Xposed 框架开发基础知识
逆向步骤

介绍一下本文逆向的步骤:

image.png
image.png

当然,用三步概括,看上去像“把大象塞进冰箱分为几步”。逆向作为一项与应用开发者对抗的网络安全技术,其手段花样多端,有时甚至不需要代码也可以完成逆向,所以这个概括仅对应文中的遇到情况。


相信点击进入这篇博客的小伙伴都知道并且搞过App逆向,不过有时候会遇到各种加壳的App,不让你反编译。但是道高一尺,魔高一丈,有正向加密,就有逆向解密。此篇博客博主带大家搭建脱壳环境,并且手动脱一个加了某60的壳的App

Android系统

脱壳需要用到的工具,对Android系统是有要求的:环境需要一个Android系统,需要root权限、版本不能高于Android8.0。这样的真机现在已经很难找到了,还是模拟器方便一些。建议使用虚拟机/模拟器,不然你还要获取root权限,容易搞坏真机。我这里用的是网易模拟器,Android系统的版本为6.0.1.

image.png
image.png
image.png
image.png

安装Xposed框架

需要root权限,虚拟机直接允许即可,真机要用第三方工具获取,网上有很多教程。

1、下载Xposed Installer

官网地址:https://repo.xposed.info/module/de.robv.android.xposed.installer

image.png
image.png
2、安装Xposed Installer

下载完毕后,直接拖入模拟器安装即可。然后打开这个App

image.png
image.png
image.png
image.png

由于我之前安装过,所以没提示要root权限,第一次安装的时候会提示授权的,授予即可。

安装反射大师

反射大师是一个支持一键脱壳的神器,貌似什么壳都能脱,不过后面更新的壳会不会添加检测机制就说不清了。。。

1、下载反射大师

下载地址:https://www.lanzous.com/i6x1kaf https://www.duote.com/android/1048782.html

image.png
image.png
2、安装ReflectMaster并授权

直接拖入模拟器中进行安装,然后打开。会提示让你激活Xposed。

image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png

然后重启模拟器!

脱壳实战

1、安装待脱壳的软件

首先在模拟器中安装好待脱壳的软件,用MT管理器可以查看软件加的是什么壳。(反射大师不区分壳类型,是壳都可以脱。)

image.png
image.png
2、用反射大师打开待脱壳App

先把软件选中,然后打开待脱壳的App。

image.png
image.png
image.png
image.png
image.png
image.png
3、脱壳(核心步骤)
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
image.png
4、用jadx反编译

jadx工具可以将dex反编译成java代码。

image.png
image.png

脱壳后分析

安居客app脱壳文件

image.png
image.png

经过上一步的脱壳操作,我们获取到了多个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目录中即可看到

image.png
image.png
image.png
image.png

2、Dex2Java脚本

该脚本用于将多个dex合并为单个sources文件

自编写如下:

Dex2Java.py

代码语言:javascript
复制
import os, sys

if __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 + file
        print(sh)
        os.system(sh)

ps:该python脚本执行时需要传入jadx文件的绝对路径

具体使用

1、我们使用反射大师获取了多个dex文件,我们将Dex2Java.py放入这些dex文件的同一个文件夹中

image.png
image.png

2、该目录下执行Dex2Java.py并传入jadx的绝对路径,我这里为C:\Users\admin\Desktop\jadx\bin\jadx

Dex2Java.py C:\Users\admin\Desktop\jadx\bin\jadx

image.png
image.png

3、执行完毕后,相同目录下将会得到一个sources文件夹,该文件夹能直接用IDE工具打开查看其java代码

image.png
image.png
image.png
image.png
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

代码语言:javascript
复制
import os, sys

if __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) + ' ' + file
        print(sh)
        os.system(sh)

ps:该python脚本执行时需要传入baksmali.jar文件的绝对路径

具体使用

1、我们使用反射大师获取了多个dex文件,我们将Dex2Smali.py放入这些dex文件的同一个文件夹中

image.png
image.png

2、该目录下执行Dex2Smali.py并传入baksmali.jar的绝对路径,我这里为E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar

Dex2Smali.py E:\mobileAppCrawler\dump\安居客dump\dump\baksmali.jar

image.png
image.png

3、执行完毕后得到多个classes文件

image.png
image.png

4、使用apktool反编译目标apk,得到apk同名项目文件夹 将apk拖入apktool脚本所在文件夹,cmd执行以下命令apktool -r d anjuke.apk -only-main-classes

image.png
image.png
image.png
image.png
image.png
image.png

总结与体会

脱壳只是第一步,后面还有修改、调试、回编译,工作量都很大,以上就是脱壳环境搭建与脱某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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于逆向
    • 逆向的准备
      • 逆向步骤
      • Android系统
      • 安装Xposed框架
        • 1、下载Xposed Installer
          • 2、安装Xposed Installer
          • 安装反射大师
            • 1、下载反射大师
              • 2、安装ReflectMaster并授权
              • 脱壳实战
                • 1、安装待脱壳的软件
                  • 2、用反射大师打开待脱壳App
                    • 3、脱壳(核心步骤)
                      • 4、用jadx反编译
                      • 脱壳后分析
                        • Dex2Java
                          • Dex2Smali
                          • 总结与体会
                          领券
                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档