记录一次成功反混淆脱壳及抓包激活app全过程

前言

​ 近期接到一个需求,要对公司之前开发的一款app进行脱壳。因为该app是两年前开发的,源代码文件已经丢失,只有加壳后的apk文件,近期要查看其中一项功能的源代码,因此需要尝试进行脱壳处理,反编译后发现该app是使用某数字公司的加壳工具进行混淆加壳的。此外,该app是给特定平板使用的,需要激活码进行激活才能使用,而原激活码服务器已经停止运行,只能通过抓包修改激活码服务器地址进行激活。该文档记录了我成功脱壳抓包的全过程。

​ 我尝试的Xposed框架的工具均无效,使用IDA查看底层代码后发现JNI经过包装,修改难度较大,最终通过blackdex及frida框架的dexdump成功抓取dex文件。

​ 注意:软件必须激活能正常使用才能进行抓取dex文件。

1、使用apktools、dex2jar、jd-gui进行反编译,查看文件源码

这三种反编译工具的使用请自行查看相关教程:https://blog.csdn.net/helloc888/article/details/106712649?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-106712649-blog-123085977.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2~default~CTRLIST~Rate-1-106712649-blog-123085977.pc_relevant_default&utm_relevant_index=2。其实使用jadx也可以查看源码,但开始我没有使用jadx查看,而是使用这三种工具。

查看文件源码后发现该apk经过360加固混淆,无法查看相关源码,因此开始本次脱壳之路。

2、下载安装夜神模拟器,并配置

夜神模拟器下载:https://www.yeshen.com/

由于手上没有用于测试的平板,因此安装夜神模拟器进行脱壳测试。通过网址下载安装即可,注意:电脑要在主板设置中开启VT,加快模拟器运行速度。

下载安装完成后,进入夜神模拟器并进行初步配置。文件管理、设置等都在工具文件夹中。

文件同步路径查看,文件同步类似于docker中的文件挂载,在该文件夹中的文件,模拟器和电脑都可以访问,需要传到电脑的文件直接放到该文件夹下就不用导出,导出也是导出到该文件夹下

在右上角 设置/基础 中开启root权限

3、安装可能需要使用的软件

3.1、安装xposed

如果需要xposed框架,那么直接在搜索栏中搜索xposed并安装,授予root权限

打开安装好的xposed软件,安装xposed框架

需要使用该框架时,则在左上角选项卡中的模块一栏运行相关脱壳软件即可

3.2、安装终端模拟器

模拟器中需要使用linux命令进行授权等操作的话,则要安装终端模拟器apk,使用adb其实也可以不用安装

安卓终端模拟器apk下载:https://f-droid.org/packages/jackpal.androidterm/

使用这款模拟器主要是支持中文输入,可以查找中文文件进行相关操作,可以不安装F-Droid,只安装终端模拟器,个人推荐

建议使用本机下载apk后,使用夜神模拟器安装功能进行安装,使用夜神模拟器中的浏览器进行下载安装软件会出现失败的情况

模拟器操作与linux常用操作相同,su切换管理员

3.3、安装adb

Adb是Android Debug Bridge的简称,是一个Android调试工具

adb下载地址:https://dl.google.com/android/repository/platform-tools-latest-windows.zip,下载后解压即可使用,配置环境变量(此电脑→属性→高级系统设置→环境变量→Path(系统变量)→新建(添加adb绝对路径之后确定)),以便可以系统全局使用

查看adb版本

使用adb连接模拟器并查看连接设备

3.4、安装frida及frida-server

在cmd中通过命令行安装frida:

pip install frida
pip install frida-tools

查看frida版本及安卓设备版本

frida-server下载网址:https://github.com/frida/frida/releases,根据查到的安卓版本及frida版本到该网址下载对应的frida-server文件

下载frida-server后解压并安装到模拟器中:

adb push C:\Users\admin\Downloads\frida-server-16.0.1-android-x86 /data/local/tmp/frida-server-16.0.1-android-x86
adb shell
su
cd /data/local/tmp
chmod 755 frida-server-16.0.1-android-x86
./frida-server-16.0.1-android-x86 &

frida-server运行成功界面:

测试frida-server安装成功:

4、开始脱壳

本次脱壳尝试了多种dexdump方法,最后有效的有两种:dexdump和blackdex

4.1、安装FRIDA-DEXDump

FRIDA-DEXDump项目地址:https://github.com/hluwa/FRIDA-DEXDump

通过命令行安装:

pip3 install frida-dexdump

使用dexdump抓取加壳app的dex文件:

frida-dexdump -U -f com.app.pkgname

需要开启执行抓取命令后,在模拟器中需要脱壳的安装好的app,运行成功界面:

4.2、下载BlackDex文件

BlackDex项目地址:https://github.com/CodingGay/BlackDex,下载地址:https://github.com/CodingGay/BlackDex/releases,下载apk安装到模拟器即可。

下载界面:

运行界面:

运行成功:

需要脱壳的应用无需运行,该项目通过虚拟化技术将程序运行,初始化Application,启动成功后调用handleDumpDex核心方法来dump内存中的dex文件

5、抓取到的dex文件修复

安装MT管理器:https://mt2.cn/

同样使用本机下载apk,安装到模拟器中,使用MT管理器修复抓取到的dex文件。MT还有很多其他的实用功能可以使用,在这里没有用到所以不再详述。

6、使用jadx查看修复后的项目,进行反混淆后保存

jadx项目地址:https://github.com/skylot/jadx,下载后解压即可使用,需要配置环境变量跟上文中类似

在cmd中输入jadx-gui即可运行jadx的gui界面

在jadx中打开脱壳并修复后的dex文件

进行反混淆操作后,在 文件→全部保存 中保存全部项目文件

查看保存后的项目代码示例

7、Fiddler抓包并修改请求激活app

Fiddler是一款强大的抓包软件,可以对拦截到的包进行修改后在将修改后的请求发出

我们要脱壳的是我们几年之前开发的app,当时的服务器已经停止运行了,所以要修改服务器地址进行激活app

Fiddler下载:https://www.telerik.com/fiddler/fiddler-everywhere,下载后正常安装即可(正版有10天试用期足够了)。

夜神模拟器开启网桥模式

通过ipconfig查看本机IP,修改夜神模拟器wlan代理(长按WiredSSID)为手动,并设置主机名为本机IP,端口为8888(fiddler默认端口),保存

访问本机IP+端口8888下载证书并保存到模拟器中:

运行界面(已经可以抓到夜神模拟器的请求):

fiddler右上角设置中打开HTTPS抓包,并忽略服务认证错误:

新建拦截规则,拦截到包含目标url的包并替换替换为新的服务器url地址:

修改完后软件可以正常运行

注意:我们只要获取源码即可,不需要回编为app,回编为app还需要打开dex文件详细查看并删除libjiagu、stub等文件,过签重命名修改文件等操作,详情可参考该文章:https://www.52pojie.cn/thread-1453091-1-1.html。

记录一次成功反混淆脱壳及抓包激活app全过程的更多相关文章

  1. .net反混淆脱壳工具de4dot的使用

    de4dot是一个开源的.net反混淆脱壳工具,是用C#编写的,介绍一下它的使用方法 首先 pushd 到de4dot.exe所在文件夹,然后调用 de4dot.exe  路径+dll名称 如果显示: ...

  2. chrome 抓包的小功能--preserve log (记录页面跳转后,所有的抓包记录)

    1.记录页面跳转后,所有的抓包记录,勾上

  3. 网络协议 反扒机制 fidder 抓包工具

    协议 http 协议: client 端 server 端交互的 一种形式 请求头信息: User-Agent: 情求载体的身份标识 connection: 'close' 连接状态 请求成功后 断开 ...

  4. .net破解一(反编译,反混淆-剥壳)

    大家好,前段时间做数据分析,需要解析对方数据,而数据文件是对方公司内部的生成方式,完全不知道它是怎么生成的. 不过还好能拿到客户端(正好是C#开发)所以第一件事就是用Reflector编译,但是没有想 ...

  5. net破解一(反编译,反混淆-剥壳,工具推荐)

    net破解一(反编译,反混淆-剥壳,工具推荐) 大家好,前段时间做数据分析,需要解析对方数据,而数据文件是对方公司内部的生成方式,完全不知道它是怎么生成的. 不过还好能拿到客户端(正好是C#开发)所以 ...

  6. RESTClient调试POST方法&Reflector+de4dot反混淆破解dll

    RESTClient调试POST方法 RESTClient是火狐的一款WebAPI测试工具. 1.先看下我们要调试的接口

  7. 关于使用PyExecJS+nodejs使用与js反混淆

    来源:https://cuiqingcai.com/5024.html 梳理这篇博客的时候出问题,我默认的是jscript作为pyexcJs的引擎,问题很大,大部分的js都无法加载,各种包用不了,只能 ...

  8. 反混淆:恢复被OLLVM保护的程序

    译者序: OLLVM作为代码混淆的优秀开源项目,在国内主流app加固应用中也经常能看到它的身影,但是公开的分析研究资料寥寥.本文是Quarkslab团队技术博客中一篇关于反混淆的文章,对OLLVM项目 ...

  9. C# 反编译-Reflector 反混淆-De4Dot 修改dll/exe代码-reflexil

    反编译工具 Reflector 破解版下载地址:http://pan.baidu.com/s/15UwJo 使用方法:略 反混淆工具De4Dot 开源软件 下载地址http://pan.baidu.c ...

随机推荐

  1. JS 取Json数据中对象特定属性值

    解析JSON JSON 数据 var str = '[{"a": "1","b": "2"}, {"a&quo ...

  2. Docker 12 数据卷

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

  3. 【MySQL】从入门到精通9-数据库的备份(完结)

    上期:[MySQL]从入门到精通8-SQL数据库编程 第一章:数据的导出 回到我们的Workbench. 选择Data Export. 选择需要导出的数据库. 注意,如果选择"Export ...

  4. 10_Linux基础-SHELL入门1

    @ 目录 10_Linux基础-SHELL入门1 一. 输入输出重定向 二. 2个特殊文件 三. here document 四. tee命令 五. 清空文件内容 六. SHELL入门 SHELL的变 ...

  5. KingbaseES R3集群备库执行sys_backup.sh物理备份案例

    案例说明: KingbaseES R3的后期版本支持通过sys_backup.sh执行sys_rman的物理备份,实际上是调用了sys_rman_v6的工具做物理备份.本案例是在备库上执行集群的备份, ...

  6. KingbaseES 并行查询

    背景:随着硬件技术的提升,磁盘的IO能力及CPU的运算能力都得到了极大的增强,如何充分利用硬件资源为运算加速,是数据库设计过程中必须考虑的问题.数据库是IO和CPU密集型的软件,大规模的数据访问需要大 ...

  7. token总结

    token 总结 1. token 和SessionID 的区别 Token机制相对于Cookie机制又有什么好处呢? 支持跨域访问: Cookie是不允许垮域访问的,这一点对Token机制是不存在的 ...

  8. DFS算法-求集合的所有子集

    目录 1. 题目来源 2. 普通方法 1. 思路 2. 代码 3. 运行结果 3. DFS算法 1. 概念 2. 解题思路 3. 代码 4. 运行结果 4. 对比 1. 题目来源 牛客网,集合的所有子 ...

  9. Java访问Scala中的Int类型

    出错代码 写java 和 scala 混合代码的时候遇到一个小问题 def extractRefInputFieldsWithType(exprs: JList[RexNode]): Array[(I ...

  10. 水晶报表导出pdf文件

    /// <summary> /// 导出pdf文件 /// </summary> /// <param name="mjsReport">报表文 ...