akamai3反混淆
最近有朋友说akm3有些站已经正式上了,代码混淆跟以前差很多,简单看一下反混淆:
网站:
akm js:
https://www.bestbuy.com/3lfAizpUjK1lwZYhWQ/b5auDtrSp5rhYa/ZHE1PQ/bVwZ/GWYkOy4
混淆分析
点进去看了一下,貌似和之前的混淆方法没差多少(akm2反混淆参考:https://1997.pro/archives/1712635397041)
只是把之前的LL.xx()改成了LL()[XX(XX)]()的形式,混淆流程是变麻烦了,但是用之前文章的方法,实际上跟没变没什么区别。
这里反混淆搞了一半,突然发现js变了,大概十多分钟js变一次,当时愣了一下,以后算法变动态了,固定一份后替换后还是能跑通(试了下加购物车和付款正常,应该算是跑通了),先直接固定一份反混淆了。
提取运行的函数
固定后发现一共有三个解密字符串的函数:
分别是bD、s2、hN(动态js,每份都不一样)
先把符合s2()[XX(XX)]特征的都匹配出来:
获得代码块与原字符串映射
获得需要解混淆的部分后,先去浏览器控制台找原js中出sensor_data的地方,断下来:
为什么要断到这里呢?因为与传统的ob混淆不同,akm的字符串解密过程是动态的,中间用复杂的控制流控制着一些字符串的生成以及数组索引的值。如果在中间随便找个位置打断点,那断点位置之后的流程中的解密函数还没有生成出来,就无法调用拿到解混淆的字符串。
至于怎么找这个位置,调过akm2的应该很好找,这里分享一个我自己用的技巧,搜索 &= , 一般有两个位置,在这两个位置打上断点:
断到的位置一般就是最终加密的位置,进入它的上一个栈:
上一个栈就是传入参数的位置了,这里可以看到老版本的环境数组已经没了,新版本变成了json格式环境,直接断到最后位置:
然后控制台运行以下代码:
成功获取字符串映射:
AST替换字符串到原js
最后一步就是把这些字符串替换到原js中了,需要替换以下三种:
第一种,bD()[xx(xx)]()
第二种,bD()[xx(xx)].call(xx,xx,xx)
第三种,bD()[xx(xx)].apply(xx,xx,xx)
ast替换进去:
最终效果: