mmmhua支付链分析

掌握这个APP的支付逻辑其实蛮简单,主要关注调起支付软件之前的创建订单请求。

1、先尝试发送支付时发送的一个请求,从抓的包来看,可能是更新支付状态,获取blottersCode和后续更新账号余额的api。
[Pastedimage20250713211520.png]
先尝试使用登录时的加密算法发送这个请求,但是返回error
验证究竟是不是使用的算法b:
使用frida hook函数,发现发送这个请求的过程中是有调用b的,初步推断可能就是使用的b算法,经过我实现的log_decode算法,把这个请求的data解密后确能得到真实的data,就能肯定使用的是b算法,那么返回error就要排查其他原因。最后发现是因为没有使用j函数,导致传入log_encode的是str而不是json,这下把strTojson改到log_encode实现
实现了伪造订单请求
[Pastedimage20250713211744.png]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
def log_decode(self,encoded_bytes):  
# base64 解码,得到 i_arr 原始字节
b_arr = base64.b64decode(encoded_bytes)
length = len(b_arr)
i_arr = list(b_arr)

c_arr = [''] * length
i3 = 0
i4 = 1

for i5 in range(length):
i6 = i5 % 5
if i6 == 0:
if i3 % 2 == 0:
i4 = 1
else:
i4 = -1
i3 += 1

val = i_arr[i5]
ord_c = val - ord('n') - ((i6 + 1) * i4)
c_arr[i5] = chr(ord_c)
bytes_data = bytearray(ord(c) for c in c_arr)
return bytes_data

返回的data字段里包含众多账单信息,以及回调函数,还有签名字段,这下不用分析了,使用了RSA签名,没看到公钥,也搞不到私钥,没办法篡改订单金额之类的。
整个支付链通过后端验签+第三方回调的方式把核心完全绕过客户端,如果还需要进一步找破绽的话,可能就是看服务端的接口有没有漏洞了,或者分析第三方软件了。