
马上爬试题练习7-9题
马上爬7-9题
7-9题
7、中等题1
同理抓包分析,得出加密值在headers和url中都有,分别为M、Ts、x

直接打上xhr断点

向上找堆栈,发现此处很像,断点


此处就是加密点
加密函数分析
值O: O = window['eeee'](W['QCqSI'](yK(0x2eb, 'nti]'), M))
根据32的长度大致判断为MD5加密

固定值分别为xialuo和时间戳,用MD5加密测试一下,一致


值M为时间戳
最后分析x的值W['uSzcs'](encodeURIComponent, dd['a'][yp(0x231, '3@lG')](W[yp(0x197, '@Q0o')](O, W['KjfHo'])))

W[yp(0x197, '@Q0o')]实际为拼接函数

yp(0x231, '3@lG')为SHA256,大致分析为SHA256加密


一致。此处忽略了一个解密函数,此函数和第六题的AES解密一致可以直接用。如果你需要找到解密点的话,从发送请求完成开始,一直向下执行

断点后一直往下走

可以看到解密函数

再次进去可以看到和第六题解密函数一致


8、中等题2
抓包分析

加密点为headers和cookie
T应该是base64,测试为时间戳base64加密

接下来分析cookie中加密值的生成,直接hook cookie找到cookie的赋值点


cookie赋值为_0x56df28['\x47\x51\x5a\x65\x44'](_0x56df28['\x49\x6c\x43\x47\x79'](_0x56df28['\x47\x51\x5a\x65\x44'](xms, _0x56df28['\x56\x51\x55\x70\x5a'](OOOoO, Sms + _0x1167c7)), Ras), u)
实际上就为_0x56df28['\x56\x51\x55\x70\x5a'](OOOoO, Sms + _0x1167c7)
Sms值为xoxoxoxo
_0x1167c7值为时间戳
查看_0x56df28['\x56\x51\x55\x70\x5a']函数得知,加密函数最后为OOOoO(Sms + _0x1167c7)


直接进入此函数,扣代码,然后缺啥补啥
扣代码的步骤不展示了,基本没有难点,注意一个地方就行

补完_0x4958ae,a0_0x4366后还是此值还是有问题


但是这个值是固定的,判断应该是在某个地方进行了修改,全局搜索,刚开始就进行了偏移

扣完函数后浏览器对比一致


回到第一次断点的位置,分析第三个值headers[‘m’]
_0x56df28['\x4b\x54\x52\x5a\x6c'](OOOoOo, _0x56df28[_0xe8dc6(0x2a4)](_0x56df28['\x47\x7a\x66\x41\x58'](_0x1575b7, _0x1167c7), _0x416a83[Has][gas]), _0x1575b7)
_0x1575b7值为oooooo
_0x1167c7值为时间戳
_0x416a83[Has][gas]值为 页码
_0x56df28[_0xe8dc6(0x2a4)]函数为相加函数
函数实际为:OOOoOo(("oooooo" + 时间戳 + page), "oooooo")

扣完执行:

一致

9、中等题3
同理抓包,加密点在请求参数上

tt为base64加密的时间戳
通过堆栈断点的方法确定加密点


此时已经有了值,说明,加密点在之前

从开始单步执行,找到加密点

混淆过的代码,可以看到执行流程和结果

当然,也能直接hook m的生成
1 | (function () { |
hook后同样找到m的生成位置

恢复case的执行流程
1 | var f = (new Date)[r(2244)](); |
实际有用的代码是这些,简单来说就是f为时间戳,tt为base64(时间戳),m=c(‘9527’ + 时间戳)
最重要的是c函数,好像是一个HmacSHA1加密



比对一致
直接在js中实现
1 | const CryptoJS = require('crypto-js'); |

结果一致

更多内容也在公众号更新:码字的秃猴






