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}`)
...@@ -114,7 +111,7 @@ function restoreValue(inName, scope, funcName) { ...@@ -114,7 +111,7 @@ function restoreValue(inName, scope, funcName) {
let res = globalFuncs[funcName](arguments[0].value) let res = globalFuncs[funcName](arguments[0].value)
// console.log(funcName,inName,arguments[0].value,res) // console.log(funcName,inName,arguments[0].value,res)
inReferencePath.parentPath.replaceWith(types.valueToNode(res)) inReferencePath.parentPath.replaceWith(types.valueToNode(res))
console.log(generator(inReferencePath.parent).code, inReferencePath.parent.type, res) console.log(generator(inReferencePath.parent).code, inReferencePath.parent.type, res)
} else if (types.isVariableDeclarator(inReferencePath.parent)) { } else if (types.isVariableDeclarator(inReferencePath.parent)) {
// 如果是继续引用 直接再找 // 如果是继续引用 直接再找
...@@ -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 (types.isReturnStatement(referencePath.parentPath.parentPath)) {
if (arguments.length !== 1) continue let nId = referencePath.parentPath.parentPath.parentPath.parent.id.name;
let res = globalFuncs[funcName](arguments[0].value) let nBinding = referencePath.parentPath.parentPath.parentPath.parentPath.scope.getBinding(nId);
// console.log(funcName,inName,arguments[0].value,res) let nFuncName = referencePath.parentPath.parentPath.parentPath.parent.id.name;
referencePath.parentPath.replaceWith(types.valueToNode(res))
} else { let code2 = resCode + '\n' + referencePath.parentPath.parentPath.parentPath.parentPath.toString();
if (!referencePath.parent.id) continue; code2 += `globalFuncs['${nFuncName}'] = ${nFuncName}`
// 继续找引用 if (!globalFuncs[nFuncName]) {
let inName = referencePath.parent.id.name; eval(code2)
let binding3 = referencePath.scope.getBinding(inName);
if (!binding3) continue; }
console.log('find', funcName, inName, binding3.references) console.log('nId', nId)
for (const inReferencePath of binding3.referencePaths) { if (nBinding && nBinding.referencePaths) {
console.log('code ', generator(inReferencePath.parent).code, inReferencePath.parent.type) for (let j = 0; j < nBinding.referencePaths.length; j++) {
if (types.isCallExpression(inReferencePath.parent)) { let nn = nBinding.referencePaths[j]
let {arguments} = inReferencePath.parent console.log(nId, nn.parentPath.toString())
if (arguments.length !== 1) continue let args = nn.parent.arguments.map(e => {
let res = globalFuncs[funcName](arguments[0].value) if (types.isNumericLiteral(e)) {
console.log('444', funcName, inName, arguments[0].value, res) return e.value
if (res === 'getTime') { } else if (types.isUnaryExpression(e) && types.isNumericLiteral(e.argument)) {
switch (e.operator) {
let {code} = generator(ast, opts = {jsescOption: {"minimal": true}}); case '-':
fs.writeFile('./tmp.js', code, (err) => { 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;
} }
console.log('before', res, generator(inReferencePath.parent).code) nn.parentPath.replaceInline(types.valueToNode(res))
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.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;
} }
...@@ -334,47 +483,49 @@ function i(n) { ...@@ -334,47 +483,49 @@ function i(n) {
function U(t) { function U(t) {
return f(J) === "function" ? J(t) : function (t) { return f(J) === "function" ? J(t) : function (t) {
var e; var e;
var n; var n;
var r; var r;
var a; var a;
var o = []; var o = [];
var i = 0; var i = 0;
var c = t["length"]; var c = t["length"];
try { try {
if (/[^+/=0-9A-Za-z]/["test"](t) || /=/["test"](t) && (/=[^=]/["test"](t) || /={3}/["test"](t))) { if (/[^+/=0-9A-Za-z]/["test"](t) || /=/["test"](t) && (/=[^=]/["test"](t) || /={3}/["test"](t))) {
return null; return null;
} }
for (c % 4 > 0 && (c = (t += v["Array"](4 - c % 4 + 1)["join"]("="))["length"]); i < c;) { for (c % 4 > 0 && (c = (t += v["Array"](4 - c % 4 + 1)["join"]("="))["length"]); i < c;) {
n = []; n = [];
for (a = i; i < a + 4;) { for (a = i; i < a + 4;) {
n["push"]("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="["indexOf"](t["charAt"](i++))); n["push"]("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="["indexOf"](t["charAt"](i++)));
} }
r = [((e = (n[0] << 18) + (n[1] << 12) + ((63 & n[2]) << 6) + (63 & n[3])) & 255 << 16) >> 16, 64 === n[2] ? -1 : (65280 & e) >> 8, 64 === n[3] ? -1 : 255 & e]; r = [((e = (n[0] << 18) + (n[1] << 12) + ((63 & n[2]) << 6) + (63 & n[3])) & 255 << 16) >> 16, 64 === n[2] ? -1 : (65280 & e) >> 8, 64 === n[3] ? -1 : 255 & e];
for (a = 0; a < 3; ++a) { for (a = 0; a < 3; ++a) {
(r[a] >= 0 || 0 === a) && o["push"](String["fromCharCode"](r[a])); (r[a] >= 0 || 0 === a) && o["push"](String["fromCharCode"](r[a]));
} }
}
return o["join"]("");
} catch (t) {
return null;
} }
return o["join"]("");
} catch (t) {
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;
} : function (t) { } : function (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.
...@@ -22659,4 +22659,8 @@ let res2 = { ...@@ -22659,4 +22659,8 @@ let res2 = {
"address": res.address, "country": "US", "state": "WA", "address": res.address, "country": "US", "state": "WA",
"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))
\ No newline at end of file
$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