【JS逆向】某霸翻译sign和content逆向

本文首发于公众号:天欣安全实验室

这个逆向的难度不算高,就是一些细节需要多多注意。

url:aHR0cHM6Ly93d3cuaWNpYmEuY29tL3RyYW5zbGF0ZQ==

抓包初步分析

请求包

首先我们输入 我爱你 抓包可以看到请求参数里面有一个sign值,这个大概率是加密的值,需要我们逆向分析,其余值经过测试并不是加密的参数值。

返回包

可以查看返回包并没有 我爱你 的英文 I love you 的任何明文,所以肯定返回包也被加密了,那我们也就是需要逆向的值有两个:sign和content

加密处定位

我们先通过全局搜索sign的赋值处,当然大家也可以设置XHR断点或者去看堆栈,这里比较幸运,只有两个赋值处,我们给这俩处都下断点后调试,发现只有一个断点处是有效的,我们只看那个有效的即可。

如上图可以明显的看出r经过了两步处理,在输入:我爱你 之后,通过对r值的生成处分别设置断点后调试可以得出:

第一步的r值为:d40b28a61bff3047

第二步的r值为:6WtAdrqblgxz2qusp/9vOdRriqVIAJSQ+xmfU0q7dIE=

(将第二步的r值经过encodeURIComponent()函数进行url转码之后就是请求中的sign值)

js中编码url两个函数的区别:

加密数据初步猜测

经过尝试,多次输入 我爱你 进行查询,两次的r值都是静态不变的,如果换一个词语进行翻译则r会发生改变,可以猜测他的值的生成逻辑大概率是通过 定值+需要翻译的字符 之后做的对称加密或是哈希函数处理。

:::color1
其实在这里我们可以大概猜一下:第一步是MD5,第二步是AES加密并且加密模式位ECB且填充方式大概率为PKCS#7

:::

这里着重说一下第二步的R值为什么大概率是AES,小天的推断依据如下:

  1. AES加密后的数据大概率会被base64编码(保证传输性)
  2. AES加密后的数据块儿每块大小为128比特位
  3. AES的加密模式只有ECB不需要iv(初始向量),所以会导致同一明文的加密结果固定
  4. AES最常使用的填充模式为PKCS#7

在这里重点说一下第二条依据的推断方式,说之前,这里先给大家说一下base64的一些相关知识:

  1. base64每4个字符代表3个原始字节
  2. 如果输入数据的字节数不是3的倍数,那么最后一批数据将被填充,以确保Base64编码的输出是4字符的倍数。
  3. 一个等号表示原始数据最后多了1个字节(即原始数据总字节数除以3余1)。两个等号表示原始数据最后多了2个字节(即原始数据总字节数除以3余2)。

第二步r值的结果为44个长度的base64编码且末尾有一个等号,原始字节也就是44/43-1=32字节,328=256比特位 ,而aes每个数据块儿必定是128位(16字节),256又恰好是128的两倍,所以推断大概率是AES加密后的数据。

当然,这是推测,推测的结果还是需要后续验证,我们继续往下看。

逆向分析

r的第一次加密逆向(sign)

第一次加密的代码:

r = u()("6key_web_new_fanyi".concat(s.LI).concat(t.q.replace(/(^\s*)|(\s*$)/g, ""))).toString().substring(0, 16)

我们将断点打在sign拼接的位置,然后我们对这个代码涉及到的变量进行分析。

s.LI是一个定值: 6dVjYLFyzfkFkk

t.q是我们输入的要翻译的字符:我爱你

然后在控制台输入:

u()("6key_web_new_fanyi".concat(s.LI).concat(t.q.replace(/(^\s*)|(\s*$)/g, ""))).toString()

可以看到是一个16进制的字符串

我们再后面接一个.length在控制台运行,可以知道通过u()函数加密之后得到的是32位长度的16进制字符串。

因为MD5哈希值是一般是128位,128位是16个字节,1个字节是两个长度的16进制字符。

所以32长度的16进制字符串,很大可能是一个MD5值,我们可以通过如下方法验证一下:

打开赛博烘焙师,选择MD5加密,输入123456可以看到加密得到的字符串为:

e10adc3949ba59abbe56e057f20f883e

在控制台利用网站的u()函数同样加密123456并输出为字符串形式。

可以很明显的看到这两个值一模一样。

很好,可以明确明白u()就是一个md5的原生加密函数,当然不放心的话大家一路单步执行跟进u()函数即可发现MD5的加密函数,如下:

如图所示可以看到MD5函数的名字和他对应的特征字符串(初始化常量):

1732584193, 4023233417, 2562383102, 271733878

r的第二次加密逆向

第二次的相关赋值语句为:

r = (0, _.$Q)(r)

这里(0, _. Q ) 其 实 就 是 相 当 于 . Q)其实就是相当于_. Q).</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值