type
status
date
slug
summary
tags
category
icon
password
😀
目标:抓包分析、frida hook分析登录协议并使用python复现 工具:Jadx、Frida、Charles、雷电模拟器

一、抓包分析

1.1 登录界面登录

 
notion image

1.2 Charle抓包

通过这个包可以看出它是一个加密了的数据,但是是什么加密的就不知道了,一眼是看不出来的,就像看电影只看了一个龙头,啥电影还是不知道。
notion image
发现了一个关键字"Encrypt”,把它放到jadx里去搜索碰碰运气。

二、Jadx反编译静态分析&Frida动态分析

2.1 ”Encrypt“关键字搜索

把安装包拖进Jadx,搜索Encrypt
notion image
可以看到这里搜出来了,但是有两个,不知道它是走的哪个函数,挨个点进去看

2.2addRequestMap函数

2.2.1 函数分析

notion image
它对addMap进行了一系列操作,首先加了一个时间戳进去,然后给paraMap处理了一下,最后Des加密后传值给encrypt的。

2.2.2 addReuestMap的hook

不知道传进函数的addMap是什么值,hook看一下。
以上是hook的代码,执行如下
notion image
addMap的值就是{loginImei=Android010138025009594, equtype=ANDROID, userPwd=asd1234, username=13966666666}还没有经过任何的处理,可以看到有输入的用户名和密码。hook出来就说明在登录的时候执行了这个函数,不然会没反应。

2.2.3 paraMap的hook

传进来的addMap知道是什么值了,但是后面还进行了paraMap的处理,先去看下paraMap函数。 分析:它先是把addMap排序了一下,然后转成了StringBuilder,又经过了md5函数的处理,这个md5不一定是标准的md5加密,还是要进去看函数具体实现,最后又加进了addMap里面。
notion image
hook一下,看下它的传参以及返回值是什么。
执行如下
notion image
从返回值看,确实是排序了,还把sign加了进去,sign就是进行md5加密后的值。

2.2.4 md5的hook

进去md5函数sign的签名算法是如何实现的。
notion image
把传参和返回值hook出来,去验证一下是不是标准的MD5加密。
执行如下
notion image
equtype=ANDROID&loginImei=Android010138025009594&timeStamp=1718279734313&userPwd=asd1234&username=13966666666&key=sdlkjsdljf0j2fsjk扔到加密网站看看
notion image
发现和hook出来的一样,那就是标准的。
paraMap的作用就是给addMap加了个sign。

2.3 Des加密分析

通过上述分析知道,paraMap是加了一个签名进去,后面的encodeDesMap函数才是真加密。另立小标题,不然太冗余😀
进去看下encodeDesMap函数
notion image
没啥看的,关键在DesSecurity类里面,进去看看
notion image
关键看InitCipher这个函数,它把secKey转成的md5(注意des加密中key只取前8个字节,而md5有16个字节),然后进行DES/CBC/PKCS5Padding加密
hook检验一下
这里直接调用了javax.crypto.spec.DESKeySpec来把key hook出来
结果如下
notion image

2.4 paraMap函数

虽然上面已经把登录协议的大致流程和算法已经弄清楚,但是搜索有两个,还有paraMap函数没有看,这个和上面分析的paraMap不一样,参数数量不同。
直接hook
执行后什么也没有输出,说明登录没有走这个函数。

三、协议算法复现

协议算法:原始addMap———>添加时间戳,给paraMap处理———>排序,并将数据MD5加密作为sign加入到addMap———>secKeyMD5加密取前八个字节作为key———>DES/CBC/PKCS5Padding加密
用python实现如下

四、验证

可以看到服务器返回过来的数据解密后是{"code":-1,"message":"账号或密码错误","data":{}}说明解密没问题,根据内容来看发送加密的数据也没有问题。
notion image

五、分析过程中遇到的问题

在2.2.2中,hook addReuestMap时,其传参addMap是Map类型,如果直接打印输出的是[object],没有具体的数据,因此要对其进行转换,输出其里面的字符串。
类似的还有2.3 Des加密时,因为源码中在加密的过程中还进行了base64编码,所以hook代码输出的key要用base64的编码输出,hook代码里调用了安卓的系统函数去编码的。
 
 
 
 
关键代码快速定位Frida HOOK常用API
展叶
展叶
春风若有怜花意,可否许我再少年
Announcement
type
status
date
slug
summary
tags
category
icon
password
当我们还是孩子的时候,我们总是幻想有人来救我们。
我们等了很久很久,充满焦虑,直到有一天醒来,发现我们在等的人就是我们自己。

这是治愈之旅的开始