思路
这种加密与
逐行加密
区别不大,只是去掉
了字符串加密函数
,改用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)) // 替换 } })
版权声明:《 【AST 混淆】六、代码逐行 ASCII码 混淆 》为明妃原创文章,转载请注明出处!
最后编辑:2022-4-17 13:04:32