Commit 1d229191 authored by wang's avatar wang

收集环境

parent 341ce935
...@@ -86,9 +86,6 @@ const renameFunc = ...@@ -86,9 +86,6 @@ const renameFunc =
allNewNames.clear(); allNewNames.clear();
function getBinding(scope, name, func) { function getBinding(scope, name, func) {
let binding = scope.getBinding(name); let binding = scope.getBinding(name);
// console.log(`scope.get(${name}).length = ${binding.references}`) // console.log(`scope.get(${name}).length = ${binding.references}`)
...@@ -149,16 +146,21 @@ for (let i = 0; i < 1; i++) { ...@@ -149,16 +146,21 @@ for (let i = 0; i < 1; i++) {
// if (name !== 'nv') return; // if (name !== 'nv') return;
let binding = path.parentPath.scope.getBinding(name); let binding = path.parentPath.scope.getBinding(name);
if (!binding)return; if (!binding) return;
console.log(`scope.get(${name}).length = ${binding.references}`) console.log(`scope.get(${name}).length = ${binding.references}`)
if (binding.references > 0) { if (binding.references > 0) {
if (name === 'iD') {
debugger
}
let code1, code2, funcName; let code1, code2, funcName;
for (const referencePath of binding.referencePaths) { for (const referencePath of binding.referencePaths) {
// console.log(code2); // console.log(referencePath.parentPath.toString());
// console.log('111',referencePath.parentPath.parent.type) // console.log('111',referencePath.parentPath.parent.type)
if (types.isUnaryExpression(referencePath.parentPath.parent)) { if (types.isUnaryExpression(referencePath.parentPath.parent)) {
code1 = generator(referencePath.parentPath.parent).code; code1 = generator(referencePath.parentPath.parent).code;
// console.groupCollapsed(['改变顺序', code1]) // console.groupCollapsed(['改变顺序', code1])
} else if (types.isCallExpression(referencePath.parent) && !types.isVariableDeclarator(referencePath.parentPath.parent)) {
code1 = '!' + referencePath.parentPath.toString()
} else if (types.isVariableDeclarator(referencePath.parentPath.parent)) { } else if (types.isVariableDeclarator(referencePath.parentPath.parent)) {
code2 = generator(referencePath.parentPath.parentPath.parentPath.parentPath.parent).code; code2 = generator(referencePath.parentPath.parentPath.parentPath.parentPath.parent).code;
funcName = referencePath.parentPath.parentPath.parentPath.parentPath.parent.id.name funcName = referencePath.parentPath.parentPath.parentPath.parentPath.parent.id.name
...@@ -181,51 +183,201 @@ for (let i = 0; i < 1; i++) { ...@@ -181,51 +183,201 @@ for (let i = 0; i < 1; i++) {
// 找到Tp 的引用地方 // 找到Tp 的引用地方
for (const referencePath of binding2.referencePaths) { for (const referencePath of binding2.referencePaths) {
console.log('referencePath', generator(referencePath.parent).code) // console.log('referencePath', generator(referencePath.parent).code)
// if (types.isBlockStatement(referencePath.parentPath.parentPath.parent) ) { // if (types.isBlockStatement(referencePath.parentPath.parentPath.parent) ) {
if (!types.isUnaryExpression(referencePath.parentPath.parentPath.parentPath.parentPath.parentPath.parentPath.parent)) { if (!types.isUnaryExpression(referencePath.parentPath.parentPath.parentPath.parentPath.parentPath.parentPath.parent)) {
// 找到引用点 排除掉 修改变量顺序的引用 // 找到引用点 排除掉 修改变量顺序的引用
console.log(generator(referencePath.parent).code, referencePath.parent.type) // console.log(generator(referencePath.parent).code, referencePath.parent.type)
if (types.isCallExpression(referencePath.parent)) {
let {arguments} = referencePath.parent
if (arguments.length !== 1) continue
let res = globalFuncs[funcName](arguments[0].value)
// console.log(funcName,inName,arguments[0].value,res)
referencePath.parentPath.replaceWith(types.valueToNode(res))
} else {
if (!referencePath.parent.id) continue;
// 继续找引用
let inName = referencePath.parent.id.name;
let binding3 = referencePath.scope.getBinding(inName);
if (!binding3) continue;
console.log('find', funcName, inName, binding3.references)
for (const inReferencePath of binding3.referencePaths) {
console.log('code ', generator(inReferencePath.parent).code, inReferencePath.parent.type)
if (types.isCallExpression(inReferencePath.parent)) {
let {arguments} = inReferencePath.parent
if (arguments.length !== 1) continue
let res = globalFuncs[funcName](arguments[0].value)
console.log('444', funcName, inName, arguments[0].value, res)
if (res === 'getTime') {
let {code} = generator(ast, opts = {jsescOption: {"minimal": true}});
fs.writeFile('./tmp.js', code, (err) => {
});
}
console.log('before', res, generator(inReferencePath.parent).code)
inReferencePath.parentPath.replaceWith(types.valueToNode(res))
console.log('afterr', res, generator(inReferencePath.parent).code)
inReferencePath.skip()
} else if (types.isVariableDeclarator(inReferencePath.parent)) {
// 如果是继续引用 直接再找
let inName2 = inReferencePath.parent.id.name;
restoreValue(inName2, inReferencePath.parentPath.scope, funcName)
}
}
} if (types.isReturnStatement(referencePath.parentPath.parentPath)) {
let nId = referencePath.parentPath.parentPath.parentPath.parent.id.name;
let nBinding = referencePath.parentPath.parentPath.parentPath.parentPath.scope.getBinding(nId);
let nFuncName = referencePath.parentPath.parentPath.parentPath.parent.id.name;
let code2 = resCode + '\n' + referencePath.parentPath.parentPath.parentPath.parentPath.toString();
code2 += `globalFuncs['${nFuncName}'] = ${nFuncName}`
if (!globalFuncs[nFuncName]) {
eval(code2)
}
console.log('nId', nId)
if (nBinding && nBinding.referencePaths) {
for (let j = 0; j < nBinding.referencePaths.length; j++) {
let nn = nBinding.referencePaths[j]
console.log(nId, nn.parentPath.toString())
let args = nn.parent.arguments.map(e => {
if (types.isNumericLiteral(e)) {
return e.value
} else if (types.isUnaryExpression(e) && types.isNumericLiteral(e.argument)) {
switch (e.operator) {
case '-':
return -e.argument.value
case '+':
return e.argument.value
default:
return ''
}
}
return ''
}).filter(e => typeof e === 'number')
if (args.length !== 2) {
// debugger;
// 再次引用
if (types.isReturnStatement(nn.parentPath.parentPath)) {
let nFuncName2 = nn.parentPath.parentPath.parentPath.parent.id.name
console.log(nFuncName2)
code2 = nn.parentPath.parentPath.parentPath.parentPath.toString() +
`globalFuncs['${nFuncName2}'] = ${nFuncName2}`
eval(code2)
let binding2 = nn.parentPath.parentPath.parentPath.parentPath.scope.getBinding(nFuncName2)
if (binding2 && binding2.referencePaths) {
for (let j = 0; j < binding2.referencePaths.length; j++) {
let nn = binding2.referencePaths[j]
console.log(nId, nn.parentPath.toString())
let args = nn.parent.arguments.map(e => {
if (types.isNumericLiteral(e)) {
return e.value
} else if (types.isUnaryExpression(e) && types.isNumericLiteral(e.argument)) {
switch (e.operator) {
case '-':
return -e.argument.value
case '+':
return e.argument.value
default:
return ''
}
}
return ''
}).filter(e => typeof e === 'number')
if (args.length !== 2) {
// debugger;
// 再次引用
if (types.isReturnStatement(nn.parentPath.parentPath)) {
let nFuncName2 = nn.parentPath.parentPath.parentPath.parent.id.name
console.log(nFuncName2)
code2 = code2 + '\n' + nn.parentPath.parentPath.parentPath.parentPath.toString() +
`globalFuncs['${nFuncName2}'] = ${nFuncName2}`
eval(code2)
let binding2 = nn.parentPath.parentPath.parentPath.parentPath.scope.getBinding(nFuncName2)
if (binding2 && binding2.referencePaths) {
for (let j = 0; j < binding2.referencePaths.length; j++) {
let nn = binding2.referencePaths[j]
console.log(nId, nn.parentPath.toString())
let args = nn.parent.arguments.map(e => {
if (types.isNumericLiteral(e)) {
return e.value
} else if (types.isUnaryExpression(e) && types.isNumericLiteral(e.argument)) {
switch (e.operator) {
case '-':
return -e.argument.value
case '+':
return e.argument.value
default:
return ''
}
}
return ''
}).filter(e => typeof e === 'number')
if (args.length !== 2) {
debugger;
// 再次引用
if (types.isReturnStatement(nn.parentPath.parentPath)) {
let nFuncName2 = nn.parentPath.parentPath.parentPath.parent.id.name
console.log(nFuncName2)
code2 = code2 + '\n' + nn.parentPath.parentPath.parentPath.parentPath.toString() +
`globalFuncs['${nFuncName2}'] = ${nFuncName2}`
let binding2 = nn.parentPath.parentPath.parentPath.parentPath.scope.getBinding(nFuncName2)
debugger
}
continue
}
if (nn.parentPath.parentPath.toString().includes('parseInt')) {
continue
}
let res = globalFuncs[nFuncName2](...args)
// console.log(nn.parentPath.toString(), res)
if (nn.parentPath.toString() === '$C_tWK(354, 348)') {
debugger;
}
nn.parentPath.replaceInline(types.valueToNode(res))
}
}
debugger
}
continue
}
if (nn.parentPath.parentPath.toString().includes('parseInt')) {
continue
}
let res = globalFuncs[nFuncName2](...args)
// console.log(nn.parentPath.toString(), res)
if (nn.parentPath.toString() === '$C_tWK(354, 348)') {
debugger;
}
nn.parentPath.replaceInline(types.valueToNode(res))
}
}
// debugger
}
continue
}
if (nn.parentPath.parentPath.toString().includes('parseInt')) {
continue
}
let res = globalFuncs[nFuncName](...args)
// console.log(nn.parentPath.toString(), res)
if (nn.parentPath.toString() === '$C_tWK(354, 348)') {
debugger;
}
nn.parentPath.replaceInline(types.valueToNode(res))
}
}
}
// if (types.isCallExpression(referencePath.parent)) {
// let {arguments} = referencePath.parent
// if (arguments.length !== 2) continue
// let res = globalFuncs[funcName](arguments[0].value)
// // console.log(funcName,inName,arguments[0].value,res)
// referencePath.parentPath.replaceWith(types.valueToNode(res))
// } else {
// if (!referencePath.parent.id) continue;
// // 继续找引用
// let inName = referencePath.parent.id.name;
// let binding3 = referencePath.scope.getBinding(inName);
// if (!binding3) continue;
// console.log('find', funcName, inName, binding3.references)
// for (const inReferencePath of binding3.referencePaths) {
// console.log('code ', generator(inReferencePath.parent).code, inReferencePath.parent.type)
// if (types.isCallExpression(inReferencePath.parent)) {
// let {arguments} = inReferencePath.parent
// if (arguments.length !== 1) continue
// let res = globalFuncs[funcName](arguments[0].value)
// console.log('444', funcName, inName, arguments[0].value, res)
// if (res === 'getTime') {
//
// let {code} = generator(ast, opts = {jsescOption: {"minimal": true}});
// fs.writeFile('./tmp.js', code, (err) => {
// });
// }
// console.log('before', res, generator(inReferencePath.parent).code)
// inReferencePath.parentPath.replaceWith(types.valueToNode(res))
// console.log('afterr', res, generator(inReferencePath.parent).code)
// inReferencePath.skip()
// } else if (types.isVariableDeclarator(inReferencePath.parent)) {
// // 如果是继续引用 直接再找
// let inName2 = inReferencePath.parent.id.name;
//
// restoreValue(inName2, inReferencePath.parentPath.scope, funcName)
// }
// }
//
// }
} }
...@@ -241,9 +393,6 @@ for (let i = 0; i < 1; i++) { ...@@ -241,9 +393,6 @@ for (let i = 0; i < 1; i++) {
} }
// 字符串还原铭文 // 字符串还原铭文
var o = {}; var o = {};
var a = function () { var a = function () {
...@@ -278,12 +427,12 @@ function i(n) { ...@@ -278,12 +427,12 @@ function i(n) {
u = o[n]; u = o[n];
} else { } else {
for (var c = a(n), u = "", f = 0; f < c["length"]; ++f) { for (var c = a(n), u = "", f = 0; f < c["length"]; ++f) {
var s = "fcDQb7d"["charCodeAt"](f % 7); var s = "sONiPGm"["charCodeAt"](f % 7);
u += String["fromCharCode"](s ^ c["charCodeAt"](f)); u += String["fromCharCode"](s ^ c["charCodeAt"](f));
} }
o[n] = u; o[n] = u;
} }
if (u === 'PX12573')debugger; if (u === 'PX12573') debugger;
return u; return u;
} }
...@@ -360,13 +509,15 @@ function U(t) { ...@@ -360,13 +509,15 @@ function U(t) {
return null; return null;
} }
}(t); }(t);
} }
var J = function () { var J = function () {
try { try {
return atob; return atob;
} catch (t) {} } catch (t) {
}(); }
}();
function f(t) { function f(t) {
f = "function" == typeof Symbol && "symbol" == typeof Symbol["iterator"] ? function (t) { f = "function" == typeof Symbol && "symbol" == typeof Symbol["iterator"] ? function (t) {
return typeof t; return typeof t;
...@@ -374,7 +525,7 @@ function f(t) { ...@@ -374,7 +525,7 @@ function f(t) {
return t && "function" == typeof Symbol && t["constructor"] === Symbol && t !== Symbol["prototype"] ? "symbol" : typeof t; return t && "function" == typeof Symbol && t["constructor"] === Symbol && t !== Symbol["prototype"] ? "symbol" : typeof t;
}; };
return f(t); return f(t);
} }
traverse(ast, { traverse(ast, {
...@@ -394,7 +545,7 @@ traverse(ast, { ...@@ -394,7 +545,7 @@ traverse(ast, {
try { try {
// if (!types.isNumericLiteral(arguments[0]))return; // if (!types.isNumericLiteral(arguments[0]))return;
let res = i(arguments[0].value); let res = i(arguments[0].value);
if(arguments[0].value === 'JDd9VWMFbA')debugger if (arguments[0].value === 'JDd9VWMFbA') debugger
if (res === 'PX12573') debugger; if (res === 'PX12573') debugger;
p.parentPath.replaceWith(types.valueToNode((res))) p.parentPath.replaceWith(types.valueToNode((res)))
console.log(arguments[0].value, res) console.log(arguments[0].value, res)
...@@ -423,17 +574,17 @@ traverse(ast, { ...@@ -423,17 +574,17 @@ traverse(ast, {
} }
}) })
traverse(ast, { traverse(ast, {
CallExpression(path){ CallExpression(path) {
let {node} = path; let {node} = path;
let {callee, arguments} = node; let {callee, arguments} = node;
if(!types.isIdentifier(callee))return; if (!types.isIdentifier(callee)) return;
if (callee.name !== 'C')return; if (callee.name !== 'C') return;
if (arguments.length !== 1)return; if (arguments.length !== 1) return;
try{ try {
let res = U(arguments[0].value) let res = U(arguments[0].value)
console.log(arguments[0].value, res) console.log(arguments[0].value, res)
path.replaceWith(types.valueToNode(res)) path.replaceWith(types.valueToNode(res))
}catch (e){ } catch (e) {
} }
...@@ -444,7 +595,6 @@ traverse(ast, { ...@@ -444,7 +595,6 @@ traverse(ast, {
console.timeEnd("处理完毕,耗时"); console.timeEnd("处理完毕,耗时");
let {code} = generator(ast, opts = {jsescOption: {"minimal": true}}); let {code} = generator(ast, opts = {jsescOption: {"minimal": true}});
fs.writeFile(decodeFile, code, (err) => { fs.writeFile(decodeFile, code, (err) => {
......
This source diff could not be displayed because it is too large. You can view the blob instead.
This source diff could not be displayed because it is too large. You can view the blob instead.
...@@ -22660,3 +22660,7 @@ let res2 = { ...@@ -22660,3 +22660,7 @@ let res2 = {
"city": "Bellevue", "postCode": res.zipcode, "areaCode": "+1", "mobile": parseInt(6185440258 + Math.random()*6185440), "city": "Bellevue", "postCode": res.zipcode, "areaCode": "+1", "mobile": parseInt(6185440258 + Math.random()*6185440),
} }
console.log(JSON.stringify(res2)) console.log(JSON.stringify(res2))
$C_sYA(-132, -129)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment