app:油联合伙人v1.4

接口:https://chinayltx.com/app/api/v1/partnerLogin/login

解析流程

该app未作双向认证,所以可以直接正常抓包,通过抓包分析,可以看得出来,密码是做了加密,请求头中的X-Sign参数也做了相应加密

image-20230519180333662

image-20230519182620674

在此使用jadx进行反编译,搜索关键字“password”,都可以点进去看一下,我们直接看第三个,第三个进去发现是路由,也正好是我们接口的路径,我们再查找用例,看一下是谁调用了

image-20230519181624810

image-20230519181721037

image-20230519181825011

这里应该是发起请求,查找用例找不到,我们直接搜索loginWithToken,很明显最后一个更符合一点

image-20230519181857745

image-20230519182010675

进去后发现这里是一个构造方法,我们再看下谁调用了setPwd方法,直接查找用例,只有一个,我们直接进去看一下是什么

image-20230519182108884

image-20230519182200625

setPwd方法传入了一个经过md5加密后的参数,我们直接看md5方法,直接hook他,看下传入了什么参数

image-20230519182220228

image-20230519182313041

对照一下,应该就是对密码进行了md5加密,对应的X-Sign参数也获取到了,经过测试后,应该是拼接了时间戳和密码的第二位往后的字符串以及加密后的密码

image-20230519182437355

image-20230519182802102

将逻辑改写成py代码获取参数即可请求登录接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import hashlib


md5 = hashlib.md5()
pwd = "1234567"
encrypt_pwd = hashlib.new('md5', '1234567'.encode('utf-8')).hexdigest()
print(encrypt_pwd)

token = ""
reqTime = "15797717652"
nonce_str = "123456"
nonce_str_sub_2 = nonce_str[2:]
body_string = "phone=15797717652&password=4297f44b13955235245b2497399d7a93"

encrypt_string = f"{token}{reqTime}{nonce_str_sub_2}{body_string}"

obj = hashlib.md5()
obj.update(encrypt_string.encode('utf-8'))
res = obj.hexdigest()
print(res)