【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)) // 替换
}
})
[]()
{{nature('2020-01-02 16:47:07')}} {{format('12641')}}人已阅读
{{nature('2019-12-11 20:43:10')}} {{format('9527')}}人已阅读
{{nature('2019-12-26 17:20:52')}} {{format('7573')}}人已阅读
{{nature('2019-12-26 16:03:55')}} {{format('5017')}}人已阅读
目录
标签云
一言
评论 0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}