JS安全防护算法与逆向分析——新浪微博登录JS加密算法

新浪微博登录JS加密算法

声明:本教程从安全角度出发讲解,只为增加读者的安全知识,提升读者数据安全意识,以及对于病毒和钓鱼网站的防护能力。绝无其他任何目的与用途。

 

新浪微博作为国内最大的即使分享社交平台,其用户基数庞大,为了进一步维护网络社交环境,阻止机器人等无用用户涌入,微博必然会提高用户登录的门槛(增强其数据加密算法)以防范爬虫机器人的存在。可事实上,就算新浪微博再怎么将其防护算法复杂化,我们依然会看到我们的个人账户上出现一些垃圾粉丝(机器人),那它们是怎么做到登录的呢?微博又是如何应对它们的登录的呢?让笔者一一道来。

 

我们在输入账户密码点击登录之后,抓包会发现发起了一个POST请求,如下图所示:

 

遵循上节淘宝算法分析的流程,我们依然寻找参数中我们不认识的部分(被加密的部分),我们来看看微博会传输哪些我们的个人信息来识别用户身份。笔者的params参数如下,我们可以发现其中su、servertime、nonce、rsakv、sp、prelt使我们无法理解的一些参数。在淘宝中我们可以通过参数名字password2得知密码的加密,可是在新浪微博中,参数名都似乎毫无意义,只有servertime是一个明显的时间戳。显然在参数名上做混淆还是有点阻碍的,那就是不得不把参数都分析一下,虽然我们可以凭直觉判断sp就是密码(最长的)。那我们接下来就看看su、nonce、rsakv、sp、prelt是如何加密的。

entry: weibo
gateway: 1
from: 
savestate: 0
qrcode_flag: false
useticket: 1
pagerefer: 
vsnf: 1
su: MTIzNDU2
service: miniblog
servertime: 1589088275
nonce: KCSD87
pwencode: rsa2
rsakv: 1330428213
sp: 6e2ef2ab923b2850a5f696edd9d97b37abfe6cc4227862a3a33435a6eb12334eb835af5478deadb64ccd0916fb6d2e6033a22a5bc569365a7eed4aead06996081e334f9f5dc5cda28658af893d66d615a63bd93ff73cec05d4c545b5ac0d7a26bf30047870b36f9789076bde74930d9fc5cc1d2fc760a016cf51dbf1a394acff
sr: 1536*864
encoding: UTF-8
prelt: 216
url: https://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack
returntype: META

我们首先直接搜索nonce,会出现以下符合项:

而笔者此时的nonce数值为KCSD87,显然最后一个才是我们需要的JS脚本,我们打开发现,servertime、nonce、pubkey、rsakv都是写死的,而且我们可以得到公钥,且直到这是一个RSA加密,这样就简单多了。运用排除法,剩下的su就是用户名,sp就是密码了。

 

我们接着搜索su,可以找到以下的符合项,在su一行下断点,按下F11。对照右边的Scope,我们发现它只是单纯地将我们的用户名(12345600)进行base64加密,原来如此,难怪找不到用户名呢!我们在附近也可以找到另一个关键sp!

 

接下来我们在798行sp处下断点,点击页面登录,发现791行的rsa加密和796行的hex_sha1加密都会执行,而且结果是一样的,那我们就选择rsa好了,毕竟我们得到了公钥。

 

好,现在我们已经分析完了大半,不过“行百步而半九十”,后边扣JS代码才繁琐呢,我们在791行下断点,F11进入其中,找到encrypt函数。

它的名字居然是bt!不是我们的encrypt,不过没事,我们发现它的参数签名分别是我们的servertime和nonce,显然就是我们需要的加密函数,只不过换了个名字罢了。我们接下来把和它相关的代码拷贝下来。

大概1000行加密代码左右,部分脚本如下:

......
me={
    "retcode": 0,
    "servertime": 1589088259,
    "pcid": "tc-9fb820facc9e56e321eea1c272edffc37c4a",
    "nonce": "KCSD87",
    "pubkey": "EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443",
    "rsakv": "1330428213",
    "is_openlock": 0,
    "showpin": 0,
    "exectime": 15
};

function getPwd(pwd) {
            var f = new sinaSSOEncoder.RSAKey;
                    f.setPublic("EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443", "10001");
            b = f.encrypt([me.servertime, me.nonce].join("\t") + "\n" + pwd)
            return b;
}

我们编写Python脚本来验证一下,看能不能获取到我们需要的数值。

import execjs

def getpwd(password):
    with open('wb.js', 'r', encoding='utf8')as f:
        content = f.read()
    jsdata = execjs.compile(content)
    pw = jsdata.call('getPwd', password)
    print('pw:', pw)
    return pw

if __name__ == '__main__':
    getpwd(123456)

在cmd运行,得到:

 

至此,新浪微博的登录加密算法已分析完毕,希望读者能有所得。

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
根据提供的引用内容,我无法直接回答您的问题。引用提到了DES加密算法,它是一种对称加密算法,需要使用相同的密钥进行加密和解密。引用提到了拼多多的API解密和JS逆向安全控制实现。然而,您的问题是关于加密算法JS逆向安全控制实现的,而不是关于DES加密算法或拼多多API解密的。 对于加密算法JS逆向安全控制实现的问题,我可以提供一些一般性的信息和建议: 1. JS逆向工程:JS逆向工程是指通过分析和破解JavaScript代码来获取其内部逻辑和实现细节。这可以帮助您理解加密算法的实现方式和安全控制措施。 2. 安全控制实现:在加密算法中,安全控制是指保护密钥和加密数据的措施。这包括密钥管理、访问控制、防止信息泄露等方面的措施。在实现加密算法时,需要考虑这些安全控制措施以确保数据的安全性。 3. 加密算法选择:选择适合您需求的加密算法是非常重要的。不同的加密算法具有不同的安全性和性能特点。您可以根据您的具体需求选择合适的加密算法。 4. 密钥管理:密钥管理是加密算法中的一个重要方面。确保密钥的安全性和合理的密钥分发、存储和更新策略是保护加密数据的关键。 5. 安全审计和漏洞修复:定期进行安全审计和漏洞修复是保持加密算法安全性的重要步骤。及时发现和修复潜在的安全漏洞可以防止攻击者利用这些漏洞来破解加密算法。 请注意,以上是一般性的信息和建议,具体的加密算法JS逆向安全控制实现需要根据具体情况进行详细分析和设计。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值