前言
Cloudflare分析第一天:简单的算法反混淆
由上篇for (j = "10|8|5|9|1|4|0|2|3|6|7"["split"]('|')
可以看到循环的循序
case '6':
o = (n = {},
n["msg"] = f,
n.cc = g,
hF["VNwzz"](JSON["stringify"](n))["replace"]('+', "%2b"));
continue;
case '7':
m["send"](i["TglBA"](i["iEKkH"]('v_', fy["_cf_chl_opt"]["cRay"]) + '=', o));
continue;
提交之前先把数据转为字符串,再进行加密之后send
为了防止代码进入错误分支(第一天的分析中,只是为了定位加密的位置,调试出来的数据肯定是错误的),之后hook json来输出加密前的JSON数据
Hook代码:
JSON_=JSON.stringify;
JSON.stringify=function(data) {
console.log(JSON_(data));
return JSON_(data);
}
输出如图:
加密算法应该就是hF["VNwzz"]
算法暂且不提,提交之后返还如图:
明显也是加密过的,既然返回,既然有后续,那么可以断定肯定可以解密的,找一下解密函数的位置.
从send往下跟(下面JS代码非第一篇中的JS代码了,是实时调试的代码,因为每次刷新JS内容都不一样,所以你们显示的代码跟我贴出来的不会相同,但是会类似)
i[jj(473)] = function(jm, l, m, n, o, s, u, v, w) {
if (jm = jj,
l = {},
l["VWkdu"] = "unspun",
m = l,
n = "600010",
i["readyState"] != 4)
return;
(o = this["getResponseHeader"]("content-type"),
f["MMxvO"](o, f["SFsFE"])) && (s = JSON["parse"](i["responseText"]),
s["err"] && (n = s["err"]));
if (u = f["fzhiJ"](hj, n),
u && f["fzhiJ"](hk, u),
i["status"] === 400) {
if ("QwWqw" === "QwWqw")
return void fy["fUJhKx5"]();
else
e(f, function(B, jn) {
jn = jm,
B[jn(