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_)]=16
a=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中进行格式化处理。