我有个朋友呀 (不是我我才18岁) 30多岁还是单身 于是勒他就去市面上的一些相亲交友网站到处相亲 然后勒上面骗子还多 各种机器人聊天引流的 我都看不下去了
于是我们这篇就来分析分析一下市面上的一些相亲机器人的工作原理 机器人归根揭底无非就是协议 协议嘛一般大型app都是会有很多加密的 各种so层 ollvm混淆啥的 各种风控 不过都问题不大 这里勒我们先来个简单的平台分析一下他的协议算法
某佳缘 拿到app首先抓包看看加密字段信息
标红线的地方都是加密的密密麻麻的
我们接着来看看他是否加壳 加壳咱就脱问题不大
比较幸运 这个没壳
我们首先从java层开始分析一波 打开我们的jadx-gui直接进行反编译
然后我们搜索他的url 因为他请求这个网站信息 肯定会在本地进行构造 我们直接搜索/sign/signoninfo.php?
发现这里是个类 我们可以看看d.b是什么
这里就是我们url的构造 跟我们抓包出来的是一样的 那我们就往上层看一下调用
发现有3处调用位置 我们一一点过去看
((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得往上面看
接着往下层看来到了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
``` 这个就是我们登陆成功返回的 hash这个字段 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
这些数据包解密出来了我们就可以编写对应的机器人了 好了这章就讲这么多 最后说一句 相亲有风险交友需谨慎
最后老规矩放上成品截图,不知道能不能骗个精
[培训]科锐逆向工程师培训(6月24日远程教学开班, 第38期)!
最后于 3天前 被乌云科技团队编辑 ,原因: