某熊APP登录参数RSA公钥签名sign

本文详细介绍了如何分析某熊APP的登录验证码签名算法,并使用易语言进行了代码实现。首先通过分享视频链接到电脑,利用浏览器进行分析,找到登录过程中的POST请求和加密的sign参数。接着,作者在JS中定位到加密方法,揭示了基于RSA私钥的签名过程。最后,给出了易语言的代码示例,演示了如何复现这个签名算法,为后续的登录和视频下载铺平道路。


前言

某熊APP上很多生活技能教学视频,比如做小吃,做甜点等民间养食制作视频,但限于手机屏幕太小,又不能网页播放,非常不方便,于是想,如果能把视频下载到电脑上看,是不是更方便呢?
心动不如行动,今天,就先分析这个APP的登录方式.
已知:该APP为360加固,后面会有文章介绍怎么脱壳.

一、分析过程

1:获取随机一个视频地址,分享到电脑上打开分析;
 为什么分享到电脑操作呢?APP直接分析不香么?
 因为APP抓包非常不方便,涉及到的算法还要对APP反编译查找算法,该款APP为360加固,不能直接分析,那么如果电脑浏览器上能分析,就省了很多时间,这个方法针对所有APP都有效,是个捷径。
 2:在电脑上用浏览器打开视频地址,按F12,切换到手机模式,再刷新一次网页,如下图

在这里插入图片描述

 如上图,右边三条横线处点击,会看到登录菜单,点击登录,来到登录页面,如下图,需要输入手机号,获取验证码登录:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sI2TgDSq-1628156135766)(%28https://i-blog.csdnimg.cn/blog_migrate/24881a668527ba99c912a852407ff7ef.png#pic_center)]

 3:这里我们来看看,登录是怎么完成的,以后就可以模仿登录下载视频,

在这里插入图片描述

 如上图,打开xhr,发现就二条数据,打开最后一条,发现是一个POST请求,其实sign参数是加密的,其它都是明码,今天主要是研究这个加密是怎么执行的.
 4:搜索sign,发现有好几个JS,但和登录相关的,一眼就能看出来了loginxxxxx.js

在这里插入图片描述

在JS里看到这个方法就肯定要下断了: d.sign = m.getSign(d)
下断后再点一次发送验证码,让JS加载一次到断点这里,发现d就是我们要POST提交的数据参数,那个sign的结果,就是对提交参数进行加密后验证。我们跟进去getSign看看,
在这里插入图片描述
就是这么简单吧,看到PrivateKey,也就是私钥

 getSign: function(e) {
            var n = [];
            for (var t in e)
                n.push(t + "=" + encodeURIComponent(e[t]));
            n.sort();
            var i = n.join("&")
              , o = new RSAKey;
            o.readPrivateKeyFromPEMString("MIIBOwIBAAJBAMGRHPht6chmKr+cyF/ABmZ1TfB6ythOouu2shUnz6ymtHQeKSgeKX7mT1sQrGSRwweYECmFJy7sOcDeK58DVWECAwEAAQJBAKBW4yeKbIA62ShV58kg2GxguQn9vS9GnEAi2wsZKjb5gT1LMMau2DP9VU5ata5EvWbJY9RVp44s64OhuyWASq0CIQD4SNILBN/1ik3pi87A4y50grl1p/sCQboAY4YJgqV1KwIhAMeU/0ohfZPV3Fb8J8fg6ofDzlOrHFq24PcJOFr3dbGjAiBOW1UGqzwvFr3uBfRzRX9kv9jd++yo0qtr8fzcRYIITwIgEbVnvXUhRlfIeDNheDu9s5QtH4FkP6xQY7r+tBuW5s8CIQDnbwS8CRzsvqkxLAWXfj+L/WQiNaU8+KT8UEavgIgcXQ==");
            var r = o.signString(i, "sha1");
            return hex2b64(r)
        }

这一下就全部出来了吧,对POST参数进行字母从前到后排序,然后放到getSign进行RSAT私钥签名.得到sign

二、用易语言代码实现

.版本 2
.支持库 e2ee

.子程序 获取验证码, 文本型
.局部变量 RSA, RSA加解密
.局部变量 sign, 文本型
.局部变量 返回结果, 文本型
.局部变量 data, 文本型
.局部变量 t, 文本型
.局部变量 签名参数, 文本型
.局部变量 p, 文本型
.局部变量 json, 类_json
.局部变量 statusText, 文本型

t = 时间_取现行时间戳 ()
p = “13838383838”
签名参数 = “mobile=” + p + “&nation=86&operation_type=0&plat=18&t=” + t + “&type=0”
RSA.载入私钥 (“MIIBOwIBAAJBAMGRHPht6chmKr+cyF/ABmZ1TfB6ythOouu2shUnz6ymtHQeKSgeKX7mT1sQrGSRwweYECmFJy7sOcDeK58DVWECAwEAAQJBAKBW4yeKbIA62ShV58kg2GxguQn9vS9GnEAi2wsZKjb5gT1LMMau2DP9VU5ata5EvWbJY9RVp44s64OhuyWASq0CIQD4SNILBN/1ik3pi87A4y50grl1p/sCQboAY4YJgqV1KwIhAMeU/0ohfZPV3Fb8J8fg6ofDzlOrHFq24PcJOFr3dbGjAiBOW1UGqzwvFr3uBfRzRX9kv9jd++yo0qtr8fzcRYIITwIgEbVnvXUhRlfIeDNheDu9s5QtH4FkP6xQY7r+tBuW5s8CIQDnbwS8CRzsvqkxLAWXfj+L/WQiNaU8+KT8UEavgIgcXQ==, )
RSA.签名 (#哈希算法_SHA1, 签名参数, sign, #文本内容类型_Base64)
data = 签名参数 + “&sign=” + 编码_URL编码 (sign, ,)
返回结果 = 编码_utf8到gb2312 (网页_访问S (“https://api.mixiong.tv/user/authcodesign”, 1, data, , , , , , , , , , , , , , , , , , ))
json.解析 (返回结果, , )
statusText = json.取通用属性 (“statusText”, )
返回 (statusText)

总结

今天主要是分析这个APP获取验证码的签名算法,只要获取到验证码,后面的登录就很简单了,看到这里的你,想到了什么没有?发一次验证码********,最后提醒,大家不要用这些技术做违 法的事情哦.今天就写到这里了,下次把完整的登录代码写出来。然后就是脱固360壳分析视频.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白小马

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值