目标网址:aHR0cHM6Ly93d3cuaXNodW1laS5jb20vdHJpYWwvY2FwdGNoYS5odG1s
观前提示:
本文章仅供学习交流,切勿用于非法通途,如有侵犯贵司请及时联系删除
0x1 某美滑块
玩过的朋友们都知道 某美的滑块在算法上基本都没怎么更新 但是在参数名上更新的比较频繁
在140左右的版本中 受混淆的帮助 可以很好的匹配出对应的参数名
(function(a1,a2,a3){ xxx(a1); xxx(a2); xxx(a3); }('a1','a2','a3'))
因为出现的位置也相对固定 所以 只需要找到一个固定值 便可以通过数组偏移找到我们所需的参数名和对应的key值
直到发文为止 目前版本已经来到了155 加密也变成了类似于ob的类型
因为部分字段被混淆 所以单纯的正则并不能很好的匹配出所需要的参数名和key
此时 AST的用处就来了
0x2 v佬打包的babel库
实现免安装 直接用!
v佬的github:https://github.com/cilame/v_jstools
蔡老板的使用示例:https://github.com/Tsaiboss/decodeObfuscator
0x3 动态更新对抗
拿到某美的js代码 通过观察感觉和ob没啥区别 就变了一点
总体来说 只需要还原 _0x1d76f7(****)
和object混淆部分即可
大家应该都会吧 不会的自己找蔡老板进修一下
值得一提的是 object部分有套娃 可能需要还原2次
还原好的结果就是
对比一下还原前
还原到这个地步 就已经可以达到取值的目的了
先找到我们要取值的地方
第一处
第二处
现在用正则匹配出我们需要的参数名和key就简单很多
但是这里 我还是选择使用AST来匹配
只需要进行简单的判断即可
"CallExpression"(path){ var {arguments}=path.node; if(arguments.length!=3)return; if(!types.isLiteral(arguments[1]) || !types.isCallExpression(arguments[2]))return; var key=arguments[1].value; var {callee,arguments}=arguments[2]; if(!types.isMemberExpression(callee))return; if(!types.isThisExpression(callee.object))return; if(callee.property.value!='getEncryptContent')return; var key_value=arguments[1].value; .... } }
"AssignmentExpression"(path){ var {left,right}=path.node; var {callee,arguments}=right; if(!types.isMemberExpression(callee))return; var {object,property}=callee; if(!types.isThisExpression(object))return; if(property.value!='getEncryptContent')return; if(arguments.length!=2)return; var key_value=arguments[1].value; var {property}=left; var key=property.value; .... }
取出值保存下来后 因为逻辑顺序不会变 所以取出来的顺序也不会变
后续使用只需要在固定的位置填入对应位置的值就可以了
0x4 实战效果
一下子就省心很多 再也不用每次更新都去手动更新了
得益于v佬的免安装babel 不用每次换电脑都安装一次babel了
感谢各位大佬观看
共同进步 共同学习
如有错误 还请大佬们指出
[完]