😀 逆向Accept-Enckey
网站:https://webapi.cninfo.com.cn/#/marketDataDate
📝 主旨内容
定位加密位置
Accpt-Enckey参数详解
我们抓包查看了好多包,只有这个包看起来比较符合要求。我们也看到这里的参数 accept-enckey。
在这里我们看得出来我们需要解决这个参数,才能正常请求这个网站。那么我们就需要好好分析这个参数在哪里、如何构建喝生成的。
我们搜索一下这个参数 accept-enckey 发现总共有118个地方有这个字符串,16个文件有包含这些参数。
这里注意到基本上每一个都有这个链接。那么我换个思路,可以搜索链接的一部分,来确定到底是哪个文件,那个位置的。
可以看到确实是可以的,搜索到了这个具体位置。
headers: {
"Accept-EncKey": indexcode.getResCode()
}
可以看到 indexcode.getResCode() 得到的参数。我们打个断点
看一下是可以生成得到结果的,我们跟上去看一下。
这里就是最后生成结果的位置,接下来我们要来分析他的生成逻辑。
分析算法
我们需要注意算法是如何生成的,如何传递参数,如何实现完整逻辑。
可以看到这要是一个OB混淆,但是是比较简单,可以看到window对象都是明写的。
'getResCode': function() {
var _0x90ae75 = _0x446e1d
, _0x1e077e = _0x1cee98[_0x90ae75(0x1b0)][_0x90ae75(0x4de)](_0x1cee98[_0x90ae75(0x5cc)][_0x90ae75(0x143)][_0x90ae75(0x53b)](Math[_0x90ae75(0x35d)](_0x28b1b3[_0x90ae75(0x40c)](new Date()[_0x90ae75(0x74c)](), 0x1a02 * -0x1 + 0x867 * 0x4 + -0x2b * 0x16))), _0x1cee98[_0x90ae75(0x5cc)][_0x90ae75(0x143)][_0x90ae75(0x53b)](localStorage[_0x90ae75(0x713)](_0x28b1b3[_0x90ae75(0x2d2)]) || _0x28b1b3[_0x90ae75(0x337)]), {
'iv': _0x1cee98[_0x90ae75(0x5cc)][_0x90ae75(0x143)][_0x90ae75(0x53b)](_0x28b1b3[_0x90ae75(0x337)]),
'mode': _0x1cee98[_0x90ae75(0x3c2)][_0x90ae75(0x49f)],
'padding': _0x1cee98[_0x90ae75(0x1fd)][_0x90ae75(0x6b1)]
});
我们可以看到这段代码其实一看就是AES算法的CBC模式的算法。
iv值
我们把整个文件复制到编辑器中,运行JS代码。
可以看到缺少Window对象。补上在继续运行。要看到缺少对象。
可以看到缺少这个对象的函数,我们把他补上。
补上了这些函数,就可以看到别的错误了。
我们看到要缺少了对象,这里其实也可以把这些代码删掉(如果没用的情况)这样就可以少补一些环境。
我把这块删除了,就可以了。
这里我们知道aes还需要补上对应的这个aes库。
导入这个库,然后就可以了。我在运行
然后我们在复制到python去请求,可以看到得到正常结果。
🤗 总结归纳
教你如何处理OB混淆,分析如何处理算法和补环境。