“陌x”登录协议分析

1、抓包 抓两次
在这里插入图片描述

2、对比
在这里插入图片描述

3、我们来方法刨析一下
在这里插入图片描述
登录 他一定有一个点击事件 我们搜onclick 方法刨析了一下 发现没找到有效的信息

4、我们来直接使用jadx-gui来搜索抓取到的字段 居然只发现了一处
在这里插入图片描述

5、发现字段全部都在这块了
在这里插入图片描述

6、我们来分析一下这些字段
“mzip”
在这里插入图片描述

我们来看看这个a方法
在这里插入图片描述
在这里插入图片描述这个a方法 做了一些左移右移等数据操作

我们再来看看这个参数
在这里插入图片描述

aesEncode是Coded.getInstance().aesEncode()方法的返回值
在这里插入图片描述

aesEncode方法返回了一个方法 发现该方法是一个被native修饰的方法
在这里插入图片描述
在这里插入图片描述
它这块调用了这几个SO文件 一个一个来试试 发现在第四个文件里边 当然 我们可以用Frida 来遍历so文件及其文件内的函数 通过这种方法也能找到最终结果
在这里插入图片描述

我们到SO里面来看看
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
aesEncode是一个导入进来的函数
在这里插入图片描述

发现它的aesEncode函数具体实现 在libcoded.so文件中
在这里插入图片描述
在这里插入图片描述
就一个AES_cbc_encrypt算法

“code_version”
该字段调用了一个g方法
在这里插入图片描述

g方法返回了一个this.f54340h
在这里插入图片描述

this.f54340h的值 = d方法的参数
在这里插入图片描述

我们来看看d方法调用处 发现它是一个变量
在这里插入图片描述

该变量又是一个C方法的返回值
在这里插入图片描述
在这里插入图片描述

this.f54329d又被一个c方法调用了
在这里插入图片描述

c方法又返回了一个this.f54355c
在这里插入图片描述

this.f54355c=2 是个常数
在这里插入图片描述code_version=2 是一个常数

"map_id"
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述map_id =时间戳+随机数

“X-KV”
该字段调用了一个h方法
在这里插入图片描述

该h方法 返回了一个字段 this.f54339g
在这里插入图片描述
c方法参数传的就是 “X-KV”的值
在这里插入图片描述
我们回溯一下这个c方法
在这里插入图片描述

d2 就是“X-KV”的值
在这里插入图片描述
在这里插入图片描述
我们来看看他的这个a方法
在这里插入图片描述
这就很明显了 一个MD5 加密算法 现在就是找到str参数
在这里插入图片描述

str参数的值 为 this.f54627b 的值 截取前8位
在这里插入图片描述
在这里插入图片描述
我们来看看Coded.getInstance().computeOutputLength(0, 6)这个方法
在这里插入图片描述
在这里插入图片描述

它这块调用了这几个SO文件 一个一个来试试 发现在第四个文件里边
在这里插入图片描述

打开ida
在这里插入图片描述
在这里插入图片描述

一样的套路 这个方法写在别的SO文件里面 它依赖了libcoded.so文件
在这里插入图片描述
我们打开libcoded.so文件
在这里插入图片描述
就是一些左移右移操作

“X-Sign”
在这里插入图片描述

我们来看看这个a方法
在这里插入图片描述

我们来hook一下该方法的参数信息和返回值
hook之后的结果为
在这里插入图片描述

参数1 是一个byte数组 未赋值
参数2 是一个map集合 里面储存了一些 请求参数
参数3 是一串加密数据 应该是加密处理了 我们来看看参数3
在这里插入图片描述

this.f54362c 我们点进去看一下
在这里插入图片描述

this.f54362c赋值操作
在这里插入图片描述

那么我们现在得找到“f54345d”的值
在这里插入图片描述

我们来看看这个a方法
在这里插入图片描述

我们来hook一下
结果
在这里插入图片描述该程序他还跑了两遍

它的参数应该也是加密了 我们来看看a方法它的参数
在这里插入图片描述

该参数又调用了一个e方法
在这里插入图片描述

e方法又返回了一个字符串
在这里插入图片描述

返回的字符串又调用了一个a方法
在这里插入图片描述

a方法我们具体点进去
在这里插入图片描述
又是这个 好像所有的字段 都有这个操作

刚刚找了a方法的参数 我们现在来看看a方法
在这里插入图片描述
在这里插入图片描述

他会先跑sdbyecbu37x(bArr, bArr2, bArr3, bArr.length)这个方法 但是他会返回a.a(bArr3)这个方法
a(bArr3)这个参数 是sdbyecbu37x()方法的第三个参数
在这里插入图片描述
a方法基本每次字段加密都用到了

sdbyecbu37x(bArr, bArr2, bArr3, bArr.length)是一个被native修饰的方法 我们重点关注它的第三个参数 因为它的第三个参数有在最终的return 方法当中有用到
在这里插入图片描述
在这里插入图片描述

我们打开ida来看看
在这里插入图片描述

关键还是这个sign
在这里插入图片描述

sign方法点进去 跟之前如初一辙 sign方法放在了libcoded.so文件中
在这里插入图片描述

我们打开libcoded.so文件来看看
在这里插入图片描述

这个关键函数 我们来重点来分析一下它的参数(下面为了好分析 我改了参数名 可以结合上文来)
在这里插入图片描述

sha1()方法的第一个参数 就是先开辟一个空间 然后在让它这个数组进行赋值操作 操作结果就是我们的参数1
在这里插入图片描述
在这里插入图片描述
我们这块也对它的一些参数进行了一个赋值
根据分析他会走case 9: 分支 在里面进行一个循环操作
SHA1() 一个标准的sha1 算法
而他们最终操作的值 就是sign字段的值了

以上仅供学习,切勿用于非法用途,文章如有侵犯,请联系删除

个人微信公众号:“安卓逆向菜鸟修炼记”

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值