本帖最后由 18113529297 于 2021-10-25 15:44 编辑
目标:aHR0cHM6Ly9tbXp6dHQuY29tLw==
遇到debugger:
对于这个站点有两种方法:- 在dubugger处打个短点, 右键编辑改为false
- 注入js:
[JavaScript] 纯文本查看 复制代码 var _con = Function.prototype.constructor;
Function.prototype.constructor = function(val){
if(val = "debugger"){
return 0;
}
return _con(val);
}
这样debugger就没有了
接着对获取图片的url进行分析
分析过程:- 查看之前的请求的url都返回值,有没有
- 查看网页源代码发现
发现都没有这相关的内容那就可能是js生成的了, 直接跟栈:
点进去, 下个短断, 然后在点击下一张图, 让网站断在这里
然后跟栈, 找到定位点
头部_0x49be5e就存在我们需要的信息, 继续跟, 找到它生成的位置或者加密方法
最后跟到这里, 查看整个函数体, 一个平坦流, 然后在每个_0x106295所在都case下断
然后跟值:
第一个断点: 大致看出这个创建了这个对象, 然后又对一系列赋值
第二个断点: 就是创建用于存放图片的数组
第三个断点:
这里就进行赋值操作了, 把整个代码都翻译成我们看得懂的
这样大致就看得懂了, forEach, 整个代码块就是把_0x34dc1d里的内容遍历赋值给images数组, _0x34dc1d就是我们需要找到内容了, 直接看它赋值处
发现在第一个断点这里, 把它翻译一下就是这个样子[JavaScript] 纯文本查看 复制代码 _0x51a6be["auFiA"](decrypt, _0x2a3ba0)["split"](',')
//decrypt是一个函数
然后寻找函数所在位置_0x51a6be["auFiA"]:点击跳转到函数位置
看到这里, 基本上就能构造出来它的整个流程了:
总的来说就是decrypt(_0x2a3ba0);继续查找decrypt函数位置
看不懂, 没关系, 把它的翻译成我们看得懂的
[JavaScript] 纯文本查看 复制代码 function decrypt(_0x486268) {
var _0x4e1e01 = _0x5765
, _0x2d0d51 = {};
_0x2d0d51["WvNOs"] = "0809020607" + "070303",
_0x2d0d51["XfCDz"] = function(_0x53680c, _0x56563e) {
return _0x53680c % _0x56563e;
},
_0x2d0d51["sppdK"] = "oeir",
_0x2d0d51["pTmCH"] = function(_0x5c2378, _0x5788d3) {
return _0x5c2378 + _0x5788d3;
};
;
var _0x559c2e = _0x2d0d51,
_0x94c48 = _0x559c2e["WvNOs"],
_0x202045 = _0x559c2e["XfCDz"](id, -0xa * 0x3ac + 0x1 * 0x1fe9 + 0x4d1) ? "oeir" :"dafx";
return HexStr = CryptoJS["enc"]["Hex"]["parse"](_0x486268),
Base64Str = CryptoJS["enc"]["Base64"]["stringify"](HexStr),
key = CryptoJS["MD5"](CryptoJS["enc"]["Utf8"]["parse"](_0x559c2e["pTmCH"](id, _0x202045)))["toString"]()["substr"](0xfff + 0xf2 + -0x6f * 0x27, -0x1 * 0x255f + 0x1f44 + 0x62b),
key = CryptoJS["enc"]["Utf8"]["parse"](key),
decrypt = CryptoJS["AES"]['decrypt'](Base64Str, key, {
'iv': CryptoJS["enc"]["Utf8"]["parse"](_0x94c48),
'mode': CryptoJS["mode"]["CBC"],
'padding': CryptoJS["pad"]["Pkcs7"]
}),
decrypt["toString"](CryptoJS["enc"]["Utf8"]);
}
这个就很明显了, 直接扣代码进行调试传入缺少参数:- 由于我们前面已经吧一些固定值写好, _0x4e1e01就不需要了
- id就是url后的id数字
使用nodejs运行
接下来就最后的传入参数的值了参数值由它生产
看到这个参数:
这种就有点像html对应的html都结果树了,而且里面的data,不就是我们最后传入参数值嘛, 直接去看看网页源代码
果不其然。换个页面再试一下。
成功!
|