AST对抗某网站的Js抽取型混淆

  • Post author:
  • Post category:其他


因为网站比较敏感, 所以具体网站就不说了, 直接说逻辑部分

为了降低数据提取的错误率, 所以使用了python的slimit库对js代码进行提取处理

对网站源码的JavaScript进行分析后, 发现在其中一个script标签内的js代码是利用抽取混淆的, 并用flashvars开头的变量存储

在这里插入图片描述

首先用python将该js代码进行提取

response = requests.get(url=url, proxies=proxies)
script = filter(lambda x: 'flashvars' in x, response.html.xpath('//script//text()')).__next__()

将该部分代码格式化后可以看到键名为mediaDefinitions的值是数组, 数组内存储着videoUrl,

在这里插入图片描述

在这里可以看到, 链接是被抽取的进行拼接后即可还原真实地址

在这里插入图片描述

下面会使用到python的slimit库的ast进行还原

# 将js代码转成结构树
tree = Parser().parse(script)

通过smlit的Parser类的parse方法, 对js代码转换为ast结构树

获取到结构树后, 需要自定义类, 并继承ASTVisitor, 自定义访问者遍历节点对节点进行抽取

下面代码我先对mediaDefinitions和qualityItems对象进行抽取还原

在这里插入图片描述

class VarStatement_Visitor(ASTVisitor):

    # 自定义访问者,重写VarStatement节点访问逻辑
    def visit_VarStatement(self, node):
        Identifier, Object = node.children()[0].children()
        # 获取flashvars的节点
        if 'flashvars' in Identifier.value:
            for i in Object.properties:
                left, right = i.children()
                # mediaDefinitions数组
                if left.value == '"mediaDefinitions"':
                    # 还原字典
                    for item in right.items:
                        media_data = dict()
                        for medias in item.properties:
                            media_left, media_right = medias.children()
                            if isinstance(media_right, ast.Array):
                                data_list = [i.value for i in media_right.items]
                                media_data[media_left.value[1:-1]] = data_list
                            else:
                                if media_left.value == '"defaultQuality"' or media_left.value == '"remote"':
                                    media_data[media_left.value[1:-1]] = media_right.value
                                else:
                                    media_data[media_left.value[1:-1]] = media_right.value[1:-1]
                        flashvars.append(media_data)<



版权声明:本文为qq_43181451原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。