1,变量名混淆
文本增添属性的过程中有很多操作空间
原始代码:
s=['age','job']
function xx(){};xx.prototype[s[0]]=15
xx.prototype[s[1]]='teacher'a=new xx()
将属性名经过base64加密,并对函数名xx,,数组名s,经过混淆处理
c03xb_=['YWdl','am9i']
function c03xb(k){return atob(k)
}
function _c03xb(){};
// xx.prototype.age=16
_c03xb.prototype[c03xb(c03xb_[0])]=16
_c03xb.prototype[c03xb(c03xb_[1])]='teacher'
a=new _c03xb();
处理方式,在a处打上断点,鼠标放在属性名上,可以看出原来的值 。
2.字符串混淆
字符串混淆的方法, 通常情况下是取字母的阿斯克码,例如
'a'.charCodeAt()
// 结果为97
String.fromCharCode(97)
// 结果为'a'
将变量名age的字母分别用阿斯克来代替,改为数组97,103,101
c03xb_=[97,103,101]
function c03xb(k){a=[]k.forEach(function(value,index){a+=String.fromCharCode(value)})return a
}
function _c03xb(){};
// xx.prototype.age=16
_c03xb.prototype[c03xb(c03xb_)]=16a=new _c03xb();
处理方法也是一样的。
3.JSFUCK混淆
使用常见的六个字符构建
取JSFUCK混淆的内容
将整体内容复制到代码段——然后控制台注入hook——然后运行代码——打印a即可。
eval = function(a){debugger;}
应对方法:Hook eval即可
4.AAencode混淆
找出最后一个小括号,括起来的内容,删除并加上.toString()
Hook一下
Function.prototype.constructor = function(a){debugger;}
然后看一下a
想要获取内容
Function(a)()
5.JJ混淆
方法一:复制代码,去掉最后的(),改成.toString() 然后去浏览器控制台打印
方法二:
Function.prototype.constructor = function(a){debugger;}
Function(a)()
6.代码逻辑混淆
控制平坦流
原始代码:
function example(value){if(value>10){return '大于10'}else if (value<5){return '小于5';}else{return '介于5和10之间'}
}
console.log(example(7))
扁平化后
function example(value) {let state;while (true) {switch (state) {case 'done':return state.message;case 'greaterThan10':state = { message: '大于10' };break;case 'lessThan5':state = { message: '小于5' };break;case 'between5And10':state = { message: '介于5和10之间' };break;default:if (value > 10) {state = 'greaterThan10';} else if (value < 5) {state = 'lessThan5';} else {state = 'between5And10';}break;}}
}console.log(example(7)); // 将输出: 介于5和10之间
实在不行,直接让AI帮我们处理!
7.eval混淆
执行代码,全部挤在eval()里面
复制eval里面的自运行函数,在控制台打印
复制打印出来的值,在pycharm中进行格式化处理。