某佳缘全套协议分析

frist

我有个朋友呀 (不是我我才18岁) 30多岁还是单身 于是勒他就去市面上的一些相亲交友网站到处相亲 然后勒上面骗子还多 各种机器人聊天引流的 我都看不下去了

于是我们这篇就来分析分析一下市面上的一些相亲机器人的工作原理 机器人归根揭底无非就是协议 协议嘛一般大型app都是会有很多加密的 各种so层 ollvm混淆啥的 各种风控 不过都问题不大 这里勒我们先来个简单的平台分析一下他的协议算法

second

某佳缘 拿到app首先抓包看看加密字段信息
图片描述

标红线的地方都是加密的密密麻麻的

我们接着来看看他是否加壳 加壳咱就脱问题不大
图片描述

比较幸运 这个没壳

我们首先从java层开始分析一波 打开我们的jadx-gui直接进行反编译

然后我们搜索他的url 因为他请求这个网站信息 肯定会在本地进行构造 我们直接搜索/sign/signoninfo.php?
图片描述
图片描述

发现这里是个类 我们可以看看d.b是什么

图片描述
这里就是我们url的构造 跟我们抓包出来的是一样的 那我们就往上层看一下调用

图片描述

发现有3处调用位置 我们一一点过去看

1
((b) ((b) ((b) ((b) ((b) ((b) ((b) ((b) ((b) ((b) this.b.c(c.f4555a)).a(“登录请求”)).a(“reallogin”, “1”)).a(“logmod”, “1”)).a(“userinfotypes”, com.jiayuan.c.a.a())).a(“name”, this.c)).a(“secucode”, str)).a(“channel”, e.b())).a(“logtype”, “thirdparty”)).a(“ylcode”, this.d)).x().a(new o(this.c)
最终我们确定了这里就是在构造这些参数

首先我们来看userinfotypes 字段是如何来的
图片描述
就是在com.jiayuan.c.a这类里面 点过去发现都是写死的jSONArray的一个数组

图片描述
图片描述
解码之后一对比果然如此
图片描述
紧接着第二个参数secucode

这里的str得往上面看

图片描述
图片描述

third

接着往下层看来到了getNewCode 方法 这里下面加载了一个"jyn" 的so库文件 我们打开ida将这个so拖进去反编译
图片描述

发现采用的java_的静态注册 传入了两个str 的值
图片描述

直接切换伪代码 将第一个参数改为JNIEnv * 然后这些参数就正常识别出来了 不过我们发现这里应该是有4个参数的 但是这里只有3个 你问我为什么有4个 不是2个吗 我只能推荐你去学习一下ndk开发方便的知识了 第一个是env 第二个是jobject(java有静态关键字修饰的就为jclass) 第三个 第四个就是我们java层传进来的

这里识别有问题 我们大概看一下这里的意思

图片描述
ARM汇编我就不细说了 这里就是取一下我们传入的str支付串的长度 类型转换一下 然后md5加密一下 他传入的信息是什么勒 我们可以借助frida hook 来一波
图片描述

两个参数分别是一个固定的字段(这个字段根据版本的不同而不同是写死的)加上我们的手机号
“3BEF981061D37872D103E21D7BE8ED03”+”1888888888” 然后md5

Frida脚本我就不贴上来了 就一个简单的java层hook 当然你hook他so的第三四的参数也行 返回值就是我们抓包出来的内容

第三个字段就是我们的password 密码字段 其实想这种的一眼就看出来了 密码我设置的是123456 一般的校验加密无非就是md5 sha系列 加密出来都是一样的 这里的密码就用的是sha1加密的我们的密码

其他的traceid android_id deviceid mac都是我们的设备信息 取随机的就行

然后我们就可以用代码实现登陆了
图片描述

这里的滑动我们可以采用本地识别的方式 这里我以后有空教你们怎么编写本地识别库吧 这里我就不说了

图片描述
这样就成功登陆了 然后我们来看看一些人聊天是怎么处理的 我们接着用fiddler抓聊天的数据包 我们发现没有包 这里我们就采用鲨鱼或者是其他的抓包工具 一般聊天都是采用的tcp的通讯

图片描述

00 00 00 bc 7b 22 75 73 65 72 22 3a 22 39 38 34
33 31 39 34 34 22 2c 22 6e 61 6d 65 6f 72 75 69
64 22 3a 22 38 36 26 31 38 36 36 30 31 38 30 30
31 35 22 2c 22 68 61 73 68 22 3a 22 39 32 32 63
30 38 66 64 63 61 33 39 61 65 63 64 36 36 39 64
61 30 34 66 32 32 39 62 33 61 34 65 33 35 31 64
62 35 38 37 22 2c 22 6d 69 64 22 3a 22 61 6e 64
72 6f 69 64 5f 63 63 31 37 33 38 62 30 39 35 63
35 61 64 34 63 22 2c 22 63 69 64 22 3a 22 31 33
22 2c 22 76 65 72 22 3a 22 38 2e 30 22 2c 22 63
6c 69 65 6e 74 69 64 22 3a 22 31 33 22 2c 22 63
68 61 6e 6e 65 6c 69 64 22 3a 22 30 32 35 22 7d
这是进入聊天室的包

39 38 34 33 31 39 34 34 这里就是我们登陆成功返回的用户的id 98431944

38 36 26 31 38 36 36 30 31 38 30 30 31 35 这里是我们的设备信息 86&18660180015

39 32 32 63 61 65 63 64 36 36 39 64 61 30 34 66 32 32 39 62 30 38 66 64 63 61 33 39 61 65 63 64 36 36 39 64 61 30 34 66 32 32 39 62 33 61 34 65 33 35 31 64 62 35 38 37

 
922caecd669da04f229b08fdca39aecd669da04f229b3a4e351db587
 
 
然后就是聊天发消息的包


00 00 00 ab 7b 22 63 6d  64 22 3a 31 32 32 2c 22
74 6f 22 3a 31 37 30 33  38 36 39 36 2c 22 63 68
61 74 6d 73 67 22 3a 22  31 31 31 31 31 31 31 22
2c 22 69 6e 73 6b 22 3a  31 35 39 31 39 34 37 35
30 39 33 39 38 2c 22 70  61 79 22 3a 30 2c 22 6d
73 67 74 79 70 65 22 3a  30 2c 22 73 72 63 22 3a
33 2c 22 65 78 74 22 3a  22 7b 5c 22 62 75 62 62
6c 65 5f 6c 69 6e 6b 5c  22 3a 5c 22 5c 22 2c 5c
22 62 75 62 62 6c 65 5f  6e 6f 5c 22 3a 5c 22 72
50 47 55 6a 5a 44 39 38  5c 5c 5c 2f 4d 55 47 79
67 68 68 6e 41 75 78 77  3d 3d 5c 22 7d 22 7d

解包我们一眼就可以看到31 31 31 31 31 31 31 这些其实就是我们要发送的信息我们这里发送的是111111

以及31 37 30 33 38 36 39 36 我们要私聊的用户id 17038696

31 39 34 37 35 30 39 33 39 38 以及我们自己用户的id 1947509398

这些数据包解密出来了我们就可以编写对应的机器人了 好了这章就讲这么多 最后说一句 相亲有风险交友需谨慎

final

最后老规矩放上成品截图,不知道能不能骗个精
图片描述
图片描述

QQ2008登录协议分析图<br><br>几点说明:<br>1、网上的资料基本上都是把rk(随机密钥)放到QQ报文头之外来对待的,但我觉得应该放到QQ报文头对待更为方便。理由有二:(1)它没有加密,QQ报文头也没加密,且QQ报文体进行了加密;<br>(2)对照我做的QQ登录协议分析图你可以看出,这样更能有效地加深对QQ报文格式记忆,因为所有的过程就一致了,统一了格式。<br>2、这二张图均是对照网上现有的资料后,再根据自己的抓包的情况做出的。谢谢以前写过这些资料的朋友。<br>3、在图,我尽量用精简的语言来描述QQ登录协议过程,所以你应该对QQ协议有了基本的了解才能看明白。比如:rk2(PK*TYPE*LT*)代表本内容要用TEA算法来解密(密钥为rk2),且解密后的内容为(PK*TYPE*LT*)。<br>4、我对所有的过程都进行了术语描述,这些不一定准确,请大家一起来完善它。<br>例如:2006我定义为下面6个过程:<br> LoginToken_Request 0xba<br> LoginToken_Respond 0xba<br> ValidateCode_Request 0xba<br> ValidateCode_Respond 0xba<br> SessionKey_Request 0x22<br> SessionKey_Respond 0x22<br>例如:2008我定义为下面12个过程:<br> Touch_Request 0x91<br> Touch_Respond 0x91<br> PreLT_Request 0x62<br> PreLT_Respond 0x62<br> LoginToken_Request 0xba<br> LoginToken_Respond 0xba<br> ValidateCode_Request 0xba<br> ValidateCode_Respond 0xba<br> PreSK_Request 0xdd<br> PreSK_Respond 0xdd<br> SessionKey_Request 0x22<br> SessionKey_Respond 0x22<br>还有就是对各种密钥和令牌的命名上。<br><br> <br> rgbsky<br> 2008-04-06 于长沙
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值