浅谈js逆向之发展历史(转)(有用)
https://bbs.125.la/thread-14670632-1-1.html
不知不觉玩这个领域已经有点年头了,一直想推动这个领域发展,奈何靠某个人是很难实现的,所以我创办了编程喵的群,找了一些志同道合的伙伴一起推进js逆向领域的发展,并且开发配套的工具,录制了一些公开教程,偶尔也会直播公开课。这是浅谈js系列 只说一些个人的看法以及介绍一下这个领域的技术。
js攻防也就近几年发展的比较迅速,像08年-14年的时候 小网站大部分还都是静态为主,中型网站会掺杂少量的原生加密,大网站也只是在原生加密上做一些变种,混淆的代码不是没有,不过也都是一些变量的混淆。(常规加密算法md系列 aes系列 3des rsa 等等)
美好的事情总会破灭,后面随着前端技术的发展 h5的崛起,以及很多开发者对IE兼容的烦恼,产生了很多工具用来进行语法转换,浏览器兼容,而这些工具大部分都是AST的产物,随着一些前端安全工程师技术的进步,出现了例如 萨满 sojson 这种 语法级别的混淆,其特征在于常量的统一封装加密,语法的混淆,逻辑的混淆。这种类型的混淆后面被统一为ob混淆。
自从有了这种混淆器,各大厂商开始进行了一波技术更新,其中以淘宝这些大站做的最全,也就出现了以逻辑平坦流为逻辑混淆的技术,当然这些东西早在很久就被应用在 汇编代码的混淆了。
后来各个厂商发现光混淆好像不能解决实际的问题,因为大家都是用的AST做的混淆器,难免就会出现反混淆器,所以各个厂商又在反调试技术上下了功夫。
什么无限debugger, 历史记录轰炸,死循环,检测开发工具层出不穷,可把做逆向的头疼不已。
并且防守方也知道,光在浏览器上做反调试是远远不够的,因为随着攻击方的技术提升,可以利用的工具也就变多 如:fd本地替换 node调试 离线v8 等等。
防守方意识到也要检测离线环境,检测node特征,检测无头浏览器特征,检测开发者工具协议,检测浏览器环境 bom dom ,当然攻击方也不傻也可以很好的应对。
最近防守方似乎意识到他们的混淆器混淆的方式强度远远不够,jsvm技术开始兴起,那就要说说什么是jsvm了 其实就是把js的代码翻译成二进制的数据,然后自己实现了一个解释器用来解释这个二进制运行。其实jsvm也不是独一份,所谓技术的进步就是 借鉴,这可不是我说的 有问题问鹅厂,我本身是一个游戏开发架构师,看着游戏从pc到web到移动端,在web端的时候性能问题就产生了,asm.js wasm技术横空出世, 其提速效果是当时纯js的10倍以上,其原理就是把C++代码编译成汇编类似的语法,浏览器解释运行。
说了这么多 你还觉得js逆向简单的话- - 那么确实很简单,如果你觉得js逆向难的话 有的时候也是很无奈的,这里说的js逆向是说的纯本地js引擎能脱机运行的技术,别和我说拿一个浏览器控件或者调用起浏览器做一些模拟操作或者利用开发者远程协议进行一些操作的方式,这些方式不是不可以,但是脱离了js逆向的范畴。当然现在大部分公司会从成本和实现成本上考虑这种技术,但是对个人的技术成长没有帮助。
最后希望有更多的人可以关注这个领域的技术。