没有放修改后的完整代码,纯粹的学习,这网站不错,本来就是免费查询,还支持40个单号一起查。谁有更好方法找到_0x4f3f里内存暴破,欢迎指教啊!
调试
17track的快递查询接口,可以通过调试工具看到请求,但是直接通过POST工具是没有结果的,最后测试需要加上Last-Event-ID这个cookie
看了网页加载的js文件,最终只有一个加密的track.min.js,而且发现非常可疑的setCookie,还有Last-Event-ID字符。第一行是个数组,接下一共两个自执行的匿名函数。
(function(_0x2297ee, _0x5f41f3) {
......
}(_0x50c7, 0x9f));
......
(function() {
var _0x10f375
......
_0x4cec2b();
}());
对这两个函数下断点,clear storage刷新然后一步一步调试。这里只要调用了函数的我们都对函数下断点。当跟到_0x4f3f这个函数的时候,发现很多地方都调用了这个函数,对返回下断点发现是返回的字符串。就把断点取消了继续跟,不然手要按软。第二个自执行函数最后调用的_0x4cec2b,_0x4cec2b最后又调用_0x3966d3,当断到_0x3966d3的时候已经能看到请求信息了,_0x164a16就是post的json,_0x152eb7就是一个ajax请求
跟到_0x3966d3的时候,可以看到前两个参数是函数,最后是一个数字。继续一步一步走,注意_0x126b58 这个值是在变化的。
最后在这里找到了Last-Event-ID,拿去post试一试,成功。
分析代码
我们还原设置Last-Event-ID的代码。
document[_0x4f3f('0x67', 'x3Lg')] = _0x2ec18e[_0x4f3f('0x68', '^p2Z')](_0x316f08, '=') + _0x472ff2[_0x4f3f('0x4d', 'uFIh')]('') + _0x2ec18e[_0x4f3f('0x69', 'aeh^')] + _0x1720d7[_0x4f3f('0x6a', 'LaH7')]();
直接在控制台调用_0x4f3f函数得到
document["cookie"] = _0x2ec18e["GAOJi"]('Last-Event-ID', '=') + _0x472ff2["join"]('') + _0x2ec18e["FPaVy"] + _0x1720d7["toGMTString"]();
_0x472ff2["join"]('')//就是我们要的Last-Event-ID
_0x472ff2是重要变量,复制所有加密代码,格式化,放到新网页执行。哈哈哈,崩溃了。
看来是有检测代码。这里我不知道怎么才能下断点,只有一步一步故意写错代码,看是先崩溃还是先报错确定了检测代码位置。有大佬有好方法没?
_0x3184d0['prototype']['yzecjS'] = function() {
var _0x5e1a47 = new RegExp(this['IbesCh'] + this['kRbSMK']);
var _0x44235e = _0x5e1a47['test'](this['ZDEFCw']['toString']()) ? --this['LoqXko'][0x1] : --this['LoqXko'][0x0];//这里是一个正则匹配,把_0x44235e 设为-1就跳过了
return this['NUSOYG'](_0x44235e);
}
刷新执行,又报新的错误,这个错误直接显示了位置,下断点跟原网页对比
var _0xd2c455 = function(_0x570d92) {
var _0x6d545d = ~-0x4 >> 0x1 + 0xff % 0x0;
if (_0x570d92['\x69\x6e\x64\x65\x78\x4f\x66']((!![] + '')[0x3]) !== _0x6d545d) {
//这个判断改为不成立即可跳过
_0x10cf6b(_0x570d92);
}
};
到这里,继续,还是报错,这个错误简单明了缺少jquery,在网页加上。搜索_0x3966d3 找到调用它的地方。
_0x2ec18e[_0x4f3f('0x86', 'oD72')]($, document)[_0x4f3f('0x87', 'tG@(')](function(_0x2c3354, _0x28d1d7, _0x152eb7) {
if (_0x152eb7[_0x4f3f('0x88', 'Ho1%')][_0x4f3f('0x89', 'klod')](_0x4f3f('0x8a', 'L*ZS')) && _0x152eb7['data']) {
_0x567d6b = _0x152eb7[_0x4f3f('0x8b', 'oD72')];
var _0x164a16;
try {
_0x164a16 = JSON['parse'](_0x567d6b);
} catch (_0x198faf) {
if (_0x2ec18e[_0x4f3f('0x8c', 'bv*^')]