作者声明:文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除!
一、加密定位
直接全局搜索bella,在可疑的地方下断,很容易就能断到这个位置。
跟进bella这个方法,发现是混淆代码,在return处下断,发现走try里的return。
继续跟进这个方法在方法内所有return处下断,很容易就来到了真正加密的位置。
二、扣代码
把该函数内和return变量有关的先扣下来
function get_bella(){
var _0x24fe7b = _0x318499(_0x481ca8);
var _0x33dbda = (0x0,
_0x5b06ff[_0x5a69('0x8a')])();
var _0x1cf816 = _0x161da4[_0x5a69('0x8a')][_0x5a69('0x9a')](_0x33dbda, {});
var _0x4051b6 = (0x0,
_0x38cd63[_0x5a69('0x8a')])(JSON[_0x5a69('0x70')](_0x1cf816), _0x3d0fe0[_0x5a69('0x8a')]);
var _0x2fa5d6 = (0x0,
_0xd98ca5[_0x5a69('0x8a')])();
var _0x15c03b = _0x24fe7b['bParam'] + _0x4051b6 + _0x2fa5d6 + JSON[_0x5a69('0x70')](_0x24fe7b[_0x5a69('0x688')]);
var _0x5e754e = _0x5625ac[_0x5a69('0x8a')][_0x5a69('0x111')](_0x15c03b);
var _0x15b51a = window['june_v'] + '##' + _0x5e754e + '##' + _0x4051b6 + '##' + _0x2fa5d6 + '##' + _0x24fe7b[_0x5a69('0x688')];
}
console.log(get_bella());
因为是动态js,刷新重新下断,把我们所扣的代码都下上断,开始调试。
2.1 第一个变量
调用一个函数,传入的是明文数据,就是请求体的数据,对其处理变成键值拼接成一个键,所有键合成一个列表成一个键。直接改写,或者把这个方法扣下来。我们采用扣这个方法。因为比较好扣,只需要扣下这种ob混淆的大数组,偏移自执行函数和调用函数就可以了。而且针对ob混淆,这些一般都是要扣下来的
2.2 第二个变量
输出发现生成的一个大数组,刷新两次发现只有piccolo和shirley这两个是变化的,这个方法没有传变量,跟进这个方法又发现取了环境变量的东西,扣的话肯定要补环境的,补环境还是比较头疼的,我们先写死,看后面的情况,如果也要补环境就补,不补的话就找piccolo和shirley这两个生成的地方。
2.3 第三个变量
这个变量发现就是把上一个变量简单的变成来键值的对象
那就简单了,扣这个函数试试,如果简单就扣下来,麻烦的话就重写。发现补了这个方法后就直接出了结果。
2.4 第四个变量
调用一个函数,传入两个参数,第一个参数是上一步生成的,第二个参数刷新几次发现是个定值。就剩扣这个函数了。补了两个函数和一个location里href的环境就通过了
2.5 第五个变量
是调用一个函数,没有传参数,跟进这个函数发现;randon字眼,那就是随机值了,控制台运行几次确实时变化的,看来可以写死了。不想写死就扣下来也很简单。
2.6 第六个变量
这个变量没有要扣的,都是上几步生成的。
2.7 第七个变量
是调用一个函数,传入上步生成的变量,进入这个函数,发现是HmacSHA1摘要算法,那就先直接引库,然后验证是否是标准算法。这个算法需要有key,key就是函数上一行生成额,扣下来
把传入参数写成和服务器一样的,验证发现结果和服务器一样,说明是标准算法,我们写死没有问题。
2.8 第八个变量
终于到了最终生成的值语句了,就是把上几步生成的变量加载一起,其中第一个window['june_v']是这个jis包开始直接赋值的,
别高兴,我们在扣第二个变量可是写死的,其中piccolo和shirley这个变量可是变化。
三、 piccolo和shirley变量
3.1 piccolo
发现其是调用一个没有传参的函数。
跟进这个函数发现是走的else分支。
直接扣下来,补两个函数发现就完成了。但是要注意,里面取来时间戳,还有个random随机值,这两个都是变化的,影响其他变量的验证。
3.2 shirley
这个发现是取的window里的属性shirley。
那就直接hookwindow属性,最终发现是一个请求页面返回的
那就直接用python请求,然后正则匹配出来吧。
至此,代码扣完!
整体来说这个加密还是比较简单的,关键点是找准加密位置,能改写就改写,能引库就引库,代码简单就扣代码。千万别硬钢!