汽车之家分析

汽车之家详情配置逆向

详情链接地址: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)

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

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值