【Frida】Frida Hook 实战 某 APK 的账号密码,并分析加密规则

本文介绍了安卓应用抓包分析与Frida Hook的小规模实战。先搭建软件环境,包括雷电模拟器、Fiddler抓包工具等;接着进行抓包配置,分析包结构并搜索关键字段;然后搭建Frida环境,Hook ToMD5方法并验证加密;最后总结需具备完整环境、熟练工具使用、快速定位代码等能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

起序:学 安卓逆向 用到的 Frida 框架,小规模实战一波。起 了解 Frida 框架简单使用 的作用。

一、软件环境

测试 APK 是比较老的版本,因为从这个版本往上都是经过 加固 的,反编译不出源码,我还不会 脱壳。所以…,你懂的。

二、抓包配置

本文使用的 老版本APK,使用的是 HTTP,下方链接是配置之后,Fiddler 可以抓取 HTTPS 包。请自行选择。

三、抓包分析&审计代码

1、安装 APK

这个打个码,自己下载之后就知道了。

在这里插入图片描述

注:在进行下面的步骤之前,先打开 Fiddler。如何使用 Fiddler 这里不细讲。

2、登陆

账号密码都是随便的,目的是 抓包分析 包结构。点击登陆。

在这里插入图片描述

3、Fiddler 查看包结构

1、查看 WebForms

点击左边协议InspectorsWebForms,可以看到有两个字段,正是点击登陆输入的账号密码,还有一个不知道的字符串(可以大胆猜测是加密的字符串)。

字段
data{“password”:“123”,“phone”:“15912345678”}
apisign7f2e918f3083fa5c3ca95a6a83759d60

在这里插入图片描述

2、查看 Raw

这个是封包的协议头

在这里插入图片描述

这个就不解释了,看看就行了。

POST http://guocai.test2.ruanjiekeji.com/App/Login/login HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 112
Host: guocai.test2.ruanjiekeji.com
Connection: Keep-Alive
Accept-Encoding: gzip
User-Agent: okhttp/3.6.0

data=%7B%22password%22%3A%22123%22%2C%22phone%22%3A%2215912345678%22%7D&apisign=7f2e918f3083fa5c3ca95a6a83759d60

4、搜索关键字段

封包中的除去原来 HTTP/HTTPS 协议中原有的字段,其他不属于协议中的字段都是程序中自己封装的,所以就可以根据 字段 来搜索该 字段 出现的位置,比如这个 加密的字符串 apisign

1、反编译 apk

此时用到的 jadx-gui 反编译 apk 工具。

在这里插入图片描述

2、搜索 apisign

勾选 类名方法名变量名代码。因为对于初学者来说,不知道 apisign 会出现在哪里,所以勾选全部是最为稳妥的做法。(附加:像封装协议中的数据一般都在 代码 中,所以只勾选 代码 也是可以的。)

在这里插入图片描述

进入到该代码块中。

在这里插入图片描述

3、简单阅读代码

从这两行代码中可以看出 dataapisign 就是 协议包头 的数据。

  • 这里可以看出,将 Constants.MD5_KEYdata 的字符串 进行 MD5 加密,那这里的两个参数是什么的?
...
newBodyBuilder.add("data", data.toString());
newBodyBuilder.add("apisign", MD5Util.ToMD5(Constants.MD5_KEY, data.toString()));
...

按着 Ctrl,点击 MD5_KEY。可以看出 MD5_KEY 是一个字符串: d367f4699214cec412f7c2a1d513fe05

在这里插入图片描述

按着 Ctrl ,点击 ToMD5 方法,可查看 MD5UtilToMD5 方法的内容。这里就这吧,反正也不好看懂。也不必看懂。为了能看到 ToMD5 这个加密方法传入的两个参数的内容,该 Frida 出场了。

  • String pstr2 = secretKey + pstr; ToMD5 方法的第一条语句就是将两个参数 拼接起来

在这里插入图片描述

四、Frida Hook ToMD5 方法

Frida 是使用 PythonJavaScript 代码实现 Hook 的。

1、Frida 环境搭建

2、代码解释

这就需要一些基础了,我尽量写的明白点吧。要想熟练使用,需要系统的学习一下 Frida 这个框架如何使用的。

# -*- coding: utf-8 -*-
# 导入 frida, sys 库
import frida, sys

# 编写 JavaScript 代码
jscode = """
Java.perform(function(){
	<!-- 获取 MD5Util 这个类的对象 -->
	var utils = Java.use("com.softgarden.baselibrary.utils.MD5Util");
	<!-- 调用 ToMd5 这个,因为这个方法的参数有两个,所以在 function 中有两个参数,至于为什么没有类型修饰,因为 JavaScript 是弱语言 -->
	utils.ToMD5.implementation = function(a, b){
		<!-- send() 方法就是输出到控制台上,下面有截图可以看出效果 -->
		send("Hook Start...");
		send("第一个参数: " +a);
		send("第二个参数: " +b);
		<!-- 获取 ToMD5 这个方法执行的结果,并打印到控制台上 -->
		var res = this.ToMD5(a, b);
		send("ToMD5 方法返回值: " +res);
		<!-- 返回这个结果,因为在 ToMD5 方法中就是将整个方法执行的结果返回,这里没有做任何修改,只是做了输出中间结果 -->
		return res;
	}
});
"""

# 这下面的代码的作用就是为了执行上面 JS 代码,输出 JS 中 send() 方法中的内容
def message(message, data):
	if message["type"] == 'send':
		print("[*] {0}".format(message['payload']))
	else:
		print(message)

# 获取这个 APK 的进程
process = frida.get_remote_device().attach('com.ljhhr.mobile')
# 加载 JS 代码
script = process.create_script(jscode)
script.on("message", message)
script.load()
sys.stdin.read()

3、执行 py 脚本&展示

复制上面 py 脚本放在 py 文件中,在含有 fridafrida-tools 的虚拟环境中,执行该脚本。

python Frida.py

再点击 雷电模拟器APK 的登陆按钮,可以看出输出的内容。

在这里插入图片描述

对比一下 查看 WebForms,这里输出的内容和 查看 WebForms 这一步一摸一样。

[*] Hook Start...
[*] 第一个参数: d367f4699214cec412f7c2a1d513fe05
[*] 第二个参数: {"password":"123","phone":"15912345678"}
[*] ToMD5 方法返回值: 7f2e918f3083fa5c3ca95a6a83759d60

4、加密验证

到目前可知,apisign 的值是采用 MD5 加密得出的,加密前的数据是传入的两个参数 拼接 起来的。

在这里插入图片描述

五、总结

从上面可以看出 Frida 框架 的简单使用方法,首先要有一个完整的 软件环境,为了搭建一个完整的环境,我也是头发掉了好几根。

  • 完整的软件环境
  • 熟练使用 抓包工具(Fiddler、Wireshark...)
  • 快速定位关键代码
  • 代码审计
  • 脚本编写

如果对您有帮助,点个赞再走吧。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

边扯边淡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值