码上爬平台第十四题逆向分析

网址: aHR0cHM6Ly93d3cubWFzaGFuZ3BhLmNvbS9wcm9ibGVtLWRldGFpbC8xNC8=

1、抓包找到对应接口,点击查看启动器,点击启动器进入分析


这里可以看到是对params参数进行了加密

直接找到启动器中的loadPage进入分析

2、点击$.ajax()函数

在$.ajax的位置发现发现加密参数,那么应该是对ajax进行了重写,我们直接打上断点步入函数进行调试

3、断点到send发包的位置


这里一直跟到了send发包的位置还是没有发现加密参数

我们将鼠标悬停在send函数上发现这个send函数是可以点击进入调试的,我们可以随便找一个用ajax发送请求的网站来对比一下就可以发现如果是原生的ajax请求send是一个bultin函数,而这里的send是一个function,说明这里对ajax进行了重写,我们直接点击send函数进入调试

4、分析send函数


这里可以看到open函数并非一个bultin函数,而是一个function,我们直接跟进open函数进入调试

进入open函数之后很快就找到了加密的位置,接下来就是着重分析这个x函数

5、分析x函数

观察整体代码可以发现是一个类似于ob的混淆,我们可以通过AST进行反混淆

6、反混淆思路
  1. 先处理十六进制数据
  2. 处理完十六进制数据之后可以发现大量的计算操作,直接进行常量折叠
  3. 字面量还原。其实这里一个类ob混淆,解密函数和自执行函数,我们可以先把解密函数__sk_Q及解密函数依赖的函数__sk_z和自执行函数先扣取到本地进行字面量还原。混淆代码对解密函数进行了多次的重复赋值,我们可以先将解密函数名__sk_Q存进数组中,通过绑定的方式找到赋值语句,判断赋值语句右节点的变量名称是否在数组中,如果在的话通过左边节点的变量名称的引用位置的父节点找到需要还原的代码(如a(398)),我们已经将解密的代码拿到了本地,我们获取到参数后直接调用__sk_Q(398)得到实际字面量之后替换节点即可,最后再将左节点的变量名称添加到数组中,这样就可以完美解决解密函数重复赋值的问题。