admin 管理员组

文章数量: 893635

汽车之家分析

汽车之家详情配置逆向

详情链接地址:aHR0cHM6Ly9jYXIuYXV0b2hvbWUuY29tLmNuL2NvbmZpZy9zcGVjLzQ4ODEwLmh0bWwjcHZhcmVhaWQ9MzQ1NDU2

一.点击nerwork进入html页面


发现js进行过混淆处理,在这里可通过解混淆工具进行js代码还原,
由于混淆力度不大,在这里直接进行分析。

  • 通过搜索发现,进行了css样式处理
  • 进行任意class属性全局搜索hs_kw16_configzu未搜索到,这里猜测通过字符串进行拼接处理.
  • 通过单独一部分字符进行搜索.

  • 这里通过查看$GetClassName$函数名,可得知这里进行class name属性名的获取,然后我们此页面搜索哪里调用过$GetClassName$,搜到

    总共搜索到12个结果,通过分析是通过3个script生成同样此方法的调用
  • 在此处我们打上断点。

    可以发现这里出现indexitem这两个变量,其中item为一段中文字

    通过查看配置表发现相互对应,那么可以猜测字体加密是通过这里进行加密的,在这里发现已经生成了转换后的字符,我们可以通过堆栈往上进行分析,


    可发现通过此处进行生成,通过分析之前获取class 属性名

    由3部分组成,在此可以得出index就是,加密<span class='hs_kw32_baikeks'>中的数字,通过生成位置进行分析,可以找到

    在这里进行映射处理,我们进入此函数方法,可以查看得到

    ruleDict就是我们所要得到字体进行处理后映射的值,通过此页面搜索

    得到最开始初始值位置,往后进行一系列的赋值操作,生成长的字符串。
    好了,分析到这里我们就知道生成的关键位置在
  • 通过分析发现,每次请求后的css样式是发生动态变化的,因此进行固定生成方式是不行的。
  • 在此可以通过两种方式进行处理
  •   1.一种是通过正则进行匹配和处理。
    
  •   2.另一种是通过补环境方式进行。
    

这里我选择通过补环境方式进行处理。

  1. 首先我们先对3次对config,option,bag进行处理的script进行匹配.
    • 我通过此xpath规则进行匹配
//script[not(@*)]/text()[contains(.,'.hs_kw')]

2.对这三段js块进行环境的生成

HTMLStyleElement = function HTMLStyleElement() {
}
CSSStyleSheet = function CSSStyleSheet() {
}CSSStyleSheet.prototype.insertRule = function insertRule() {var rulecalss = '::before { content:'cursor = arguments[0].split(rulecalss)[0]font_str = arguments[0].split(rulecalss)[1]jsonp = {}//<span class='hs_kw35_configvE'></span>cursor_str = cursor.replace(".", "")key_str = "<span class='" + cursor_str + "'>" + "</span>"jsonp[key_str] = font_str.replace("}", "").replace('"', "").replace("\"", "").trim()result.push(jsonp)
};
HTMLStyleElement.prototype.sheet = new CSSStyleSheet();
document = {'querySelectorAll': function () {return []},'createElement': function () {return new HTMLStyleElement()}
};
HTMLHeadElement = function HTMLHeadElement() {}
HTMLHeadElement.prototype.appendChild = function appendChild() {
}
document.head = new HTMLHeadElement;
window = global;function get_font_map(script_js) {result = []eval(script_js)return result
}

在此处,insertRule函数就是最终字体映射生成的位置,在此函数中为了后续方便字符映射,做了一部分转换操作.

3.这里封上最关键字体生成代码。

        result = []scripts_js = response.xpath("//script[not(@*)]/text()[contains(.,'.hs_kw')]").getall()script_path = 'xxxscrapt_js生成位置'with open(script_path, 'r', encoding='utf-8') as fp:JsData = fp.read()for script_eval in scripts_js:data = execjs.compile(JsData).call("get_font_map", script_eval)result.extend(data)

如有疑惑可进行私信询问。

本文标签: 汽车之家分析