出了对代码安全的考虑,我们在js中进行了混淆的操作。混淆相当于给代码加密,那么我们这时又有了调用的需求,不过很多人想着是先破解再使用。那么有没有可以调用的办法呢?这里我们先对混淆的原理进行了解,然后分析程序执行的原理,在其中找到混淆后的调用方法。
1.js混淆的原理
混淆主要涉及两种思路:
a.通过正则替换实现的混淆器;
b.通过语法树替换实现的混淆器。
第一种实现成本低,但是效果也一般,适合对混淆要求不高的场景。第二种实现成本较高,但是更灵活,而且更安全,更适合对抗场景。
2.js混淆调用方法
在程序的执行流程中,往往会间接调用函数,攻击者可以在调用某个函数时,不是直接调用,而是经常几次其他无功能函数的调用最终调用该函数,因此可以混淆控制流程。
在上面的例子中,有五个子程序。在这些子程序中有一个sub5。如果你通过跟踪子程序的调用可以发现子程序最终执行的是sun2。因此,调用任何一个函数都将调用sub2。因此,可以移除sub1,sub3,sun4,和sub5而不是影响程序的执行结果。
补充:JS代码保护若干技术难点
(1)前端环境的复杂。以安卓端为例,不同版本的安卓系统,对webview的对JS代码调用逻辑也不同,给加密功能的开发带来很大挑战。
(2)JS的标准在不停迭代。类似于python2,3的区别,JS也分成不同版本,保护方案如何能兼容不同的标准。
(3)单线程与异步机制。尽管可以勉强实现前端的多线程,但是绝大部分情况下,浏览器内核单线程执行JS代码,异步编程给安全开发人员提出了新的难题。
以上就是js混淆后的调用方法,只有对基础的混淆原理有所了解,才能找到调用的思路。学会的小伙伴可以开始动手试验一下啦。