近日闲来无事,找了一个ob混淆的案例用作js逆向学习的练手操作内容。
于是去哪网的酒店搜索列表进入了我的视线。

首先全局搜索这个Bella 参数,直接映入眼帘的就是这两个文件,简单瞅一眼。就发现了下面的这个qlogj文件存在ob混淆,没啥说的,干他。

因为这边最近在学习ast,所以就直接使用node语言的babel框架做该jst的解析了。
因为某些不可明状的原因,我就不贴代码了。 只是简单说一下,我这边的逆向步骤吧。
首先,为了方便美观,需要将混淆代码中的16进制字符串/数字进行10进制的转换。
如下图:


其次因为是ob混淆的缘故会将代码中的所有的函数当作变量在对象中使用,且会将变量字符串提出变为一个数组/列表。且进行字符串加密/乱序操作。 所以第一步的操作就是归位字符串,将调用的地方使用babel进行ast操作。 使字符串还原为本身。 如图所示__0x1e89函数就是对字符串进行解密的函数,会根据下标去在字符串列表中进行字符串操作。所以在这边进行字符串的还原操作。


第三步呢,在上述操作完成之后,查看代码就会发现说ob混淆中会注入很多无意义的代码,如下图:

如图所示,该代码块中因为是字符串比较的原因,这边if跟else之间就肯定会产生一个无意义的代码块的。所以,这边使用babel完成无意义的代码模块的删除操作。
最后的结果就是:

以上就是我简单执行后的效果,当然了,这边还有蛮多可以进行再次逆向的地方,比如函数花指令,参数花指令一类的,可以进行一定的逆行操作,以便于代码审核观察。 最后配合chrome+debug调试,即可轻易找出

网友评论