关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
1.实战地址
https://newassets.hcaptcha.com/c/bc8c0a8/hsw.js
将上面静态的js保存下来。
2.通用框架处理
使用通用反混淆模板_预处理版本对上面的js进行美化处理。分析后发现是个 ob混淆:
2.还原点分析
使用星球里 1113 版本的 ob混淆一键还原脚本处理,发现仅还原了一点点字符串:
打开结果文件后,再分析看看为啥,发现函数名被重复赋值了:
而且,有很多函数的实参并非字面量,如:
这种需要使用星球里的这个 object对象的还原 插件可以将这里的 i 进行还原:
https://t.zsxq.com/14fNaCvuN
为了避免误伤,我把 isBaseLiteral 这个函数设置的更严格了:
function isBaseLiteral(node) {if (types.isNumericLiteral(node)) {//null可能有坑return true;}if (types.isUnaryExpression(node) && ["+", "-"].includes(node.operator)) {return isBaseLiteral(node.argument);}return false;
}
另外还有这种变量定义的赋值:
使用星球的 变量定义为字面量时的还原 插件:
https://t.zsxq.com/14tgMrOIv
以及这种赋值语句的赋值:
使用星球的 赋值语句right节点为字面量时的还原 插件:
https://t.zsxq.com/14rVn4nPd
接下来就是函数名赋值给多个变量的处理了,这里因为误杀其他的语句,我给单独处理了,大家可以参考我在作业上的处理。
3.ob混淆一键处理
使用星球里 1113 版本的 ob混淆一键还原脚本处理,还原了很多字符串:
再次搜索 函数名,发现还有调用的地方:
这说明第二步没有处理干净。直接手动处理吧。把类似n和y的值直接复制进去就行了。
然后再用一键还原就好了。
完整代码请自行下载:
https://t.zsxq.com/14zASGhX0
PS:还原后替换,有2个坑,一个是会像谷歌验证码一样校验文件hash;二是第一次使用ob混淆还原的时候,移位函数不能处理。
今天的文章就分享到这里,后续分享更多的技巧,敬请期待。
欢迎加入知识星球,学习更多AST和爬虫技巧。