js 코드 혼동 방지ast 사용
const parser = require("@babel/parser");
const traverse = require("@babel/traverse").default;
const t = require("@babel/types");
const generator = require("@babel/generator").default;
let origin_code = `
function _0x506bbd(v){
const a= !![]
console.log(a);
return v.length
}
console.log(_0x506bbd('\x69\x6e\x64\u0435\x78\x4f\x66'));
`
let ast = parser.parse(origin_code);
pre_ast = ast.program.body.slice(0, 1)
const gen = generator(ast, {
// ( )
compact: true
})
eval(gen.code)
function toSource(_ast) {
let {code} = generator(_ast, {
//
compact: false,
jsescOption: {
//
minimal: true,
}
});
return code.replace(/!!\[\]/g, 'true').replace(/!\[\]/g, 'false')
}
function getvalue(path) {
const node = path.node
if (t.isStringLiteral(node)) {
if (node && node.exact) {
delete path.node.exact
}
} else if (t.isCallExpression(node)) {
const {callee} = path.node;
if (t.isMemberExpression(callee) &&
callee.object.name === "console" &&
callee.property.name === "log") {
node.arguments.map(item => {
if (t.isCallExpression(item)) {
let _value = item.arguments
let _key = item.callee.name
const func = eval(_key)
let new_value = func(..._value.map(v => v.value))
let value_type = Object.prototype.toString.call(new_value)
let new_node;
if (value_type === "[object Number]") {
new_node = t.NumericLiteral(new_value)
} else if (value_type === "[object String]") {
new_node = t.stringLiteral(new_value)
}
path.node.arguments[0] = new_node
}
})
}
}
}
function traverse_ast(ast, opts) {
traverse(ast, opts);
return ast
}
let step1_ast = traverse_ast(ast, {StringLiteral: getvalue})
let step2_ast = traverse_ast(step1_ast, {CallExpression: getvalue})
let new_code = toSource(step2_ast)
console.log("before: =============")
console.log(origin_code)
console.log("after: =============")
console.log(new_code)
대상 결과:
true
7
true
before: =============
function _0x506bbd(v){
const a= !![]
console.log(a);
return v.length
}
console.log(_0x506bbd('indеxOf'));
after: =============
function _0x506bbd(v) {
const a = true;
console.log(a);
return v.length;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.