{{format('0')}} {{format('302')}} {{format('1718')}}

【AST 混淆】六、代码逐行 ASCII码 混淆 [ 编程杂谈 ]

大数据男孩 文章 正文

想做一个技术博客,奈何实力不够
分享

明妃

{{nature("2022-08-14 17:23:20")}}更新

思路

这种加密与 逐行加密区别不大,只是去掉字符串加密函数,改用 charCodeAt 将字符串转到 ASCII 码,把 解密函数换成 String.fromCharCode ,最后使用 eval 执行

// 代码逐行 ASCII码 混淆
traverse(ast, {
    FunctionExpression(path) {
        let blockStatement = path.node.body
        let statement = blockStatement.body.map((v) => {
            if (type.isReturnStatement(v)) {
                return v; // 返回节点处理
            }
            v.leadingComments && v.leadingComments[0].value.replace(' ', '') == 'encryptAscii' && delete v.leadingComments; // 删 加密标识注释 的兼容处理
            // 判断是否是注释行
            if (!(v.trailingComments && v.trailingComments[0].value.replace(' ', '') == 'encryptAscii')) {
                return v
            }

            delete v.trailingComments; // 删除注释
            // 遍历 生成 eval(String.fromCharCode()) 这种节点
            let code = generator(v).code;
            let codeAscaii = [].map.call(code, (v) => {
                return type.numericLiteral(v.charCodeAt(0))
            });
            // 生成节点
            return type.expressionStatement(
                expression = type.callExpression(
                    callee = type.identifier('eval'),
                    _arguments = [type.callExpression(
                        callee = type.memberExpression(
                            object = type.identifier(name = 'String'),
                            property = type.identifier(name = 'fromCharCode')),
                        _arguments = codeAscaii)])
            )
        })
        path.get('body').replaceWith(type.blockStatement(statement)) // 替换
    }
})

[mark]()

评论 0
0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}
TOP 2
Spark 2.0 单机模式与集群模式 安装

{{nature('2020-01-02 16:47:07')}} {{format('12520')}}人已阅读

TOP 3
Office 2016 Pro Plus 激活

{{nature('2019-12-11 20:43:10')}} {{format('9408')}}人已阅读

TOP 4
Linux上 MySQL 开启远程登陆的两种方法

{{nature('2019-12-26 17:20:52')}} {{format('7402')}}人已阅读

TOP 5
Linux 安装 MySQL 5.7

{{nature('2019-12-26 16:03:55')}} {{format('4878')}}人已阅读

目录

标签云

AST基础 AST混淆

一言

# {{hitokoto.data.from || '来自'}} #
{{hitokoto.data.hitokoto || '内容'}}
作者:{{hitokoto.data.from_who || '作者'}}
自定义UI
配色方案

侧边栏