我有个朋友呀 (不是我我才18岁) 30多岁还是单身 于是勒他就去市面上的一些相亲交友网站到处相亲 然后勒上面骗子还多 各种机器人聊天引流的 我都看不下去了
于是我们这篇就来分析分析一下市面上的一些相亲机器人的工作原理 机器人归根揭底无非就是协议 协议嘛一般大型app都是会有很多加密的 各种so层 ollvm混淆啥的 各种风控 不过都问题不大 这里勒我们先来个简单的平台分析一下他的协议算法
某佳缘 拿到app首先抓包看看加密字段信息
标红线的地方都是加密的密密麻麻的
我们接着来看看他是否加壳 加壳咱就脱问题不大
比较幸运 这个没壳
我们首先从java层开始分析一波 打开我们的jadx-gui直接进行反编译
然后我们搜索他的url 因为他请求这个网站信息 肯定会在本地进行构造 我们直接搜索/sign/signoninfo.php?
发现这里是个类 我们可以看看d.b是什么
这里就是我们url的构造 跟我们抓包出来的是一样的 那我们就往上层看一下调用
发现有3处调用位置 我们一一点过去看
最终我们确定了这里就是在构造这些参数
首先我们来看userinfotypes 字段是如何来的
就是在com.jiayuan.c.a这类里面 点过去发现都是写死的jSONArray的一个数组
解码之后一对比果然如此
紧接着第二个参数secucode
这里的str得往上面看
接着往下层看来到了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的通讯
这是进入聊天室的包
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
```
解包我们一眼就可以看到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
这些数据包解密出来了我们就可以编写对应的机器人了 好了这章就讲这么多 最后说一句 相亲有风险交友需谨慎
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2020-6-12 17:15
被猫盾科技编辑
,原因: