关于某加解密网站的逆向实践

前言

前几日一微信群里,有群友说某在线AI网站 aHR0cHM6Ly9haS5jZ3Byb21wdC5uZXQvZHJhdw== 无法打开控制台进行调试。来了好奇心进行尝试,果真如此。一打开控制台,页面就会跳转,导致network里面的资源无法正常查看。一番研究后,发现是使用了disable-devtool开源工具来做的。研究其源码是发现使用到了md5加密,遂搜寻在线解密网站。

于是,便遇到了这篇文章要讲的主角。昨天花费了一天将其彻底逆向,今天记录下来以飨有缘读者。

访问地址

aHR0cHM6Ly93d3cuc29qc29uLmNvbS9lbmNyeXB0X21kNS5odG1s

逆向目标

获取其md5解密接口请求头Sojsonhost Sojsondata的加密实现,并通过postman请求成功返回。
Alt text

逆向过程

打开控制台。映入眼帘的果然是匿名debugger,代码还是加密压缩过的。

Alt text

chrome source 直接开启本地替换。

Alt text

那么,vscode 启动!,文件打开后格式化。

Alt text

1300行,还行。sojson.v4,对代码会做反调试,包括无限循环debugger,堆栈溢出。动不动风扇就启动了,我这18款的老年mbp身子骨遭罪了。

好好好,这么流氓是吧。把这个script标签内的代码抽离到本地一个js文件,再引用过来。接下来,就是跟这个js文件好好耍耍。

翻译官上线。把所有变量,按照自己的理解,批量替换成有含义的名称。数字从16进制恢复到10进制。字符串从ascii、unicode恢复正常显示。然后对整体代码做优化。就像给一位很离谱的同事代码做优化。

先声明一个大的数组coreArray,存储了转换后的业务属性。
然后是一个自执行匿名函数,这个函数将coreArray的前147位拼接到最后。并加了反格式化调试,引起页面崩溃。
好好好,这么流氓是吧。直接在页面控制台执行相关数组操作,获取结果替换coreArray,并注释或删掉此自执行匿名函数。

接下来,是一个函数。主要是对数组元素做格式化转换,并缓存转换结果。并加了反格式化调试,引起页面崩溃。
好好好,这么流氓是吧。注释掉format.once相关代码,即可。

接下来,是两个函数。没有实际业务功能,主要检测代码格式化,函数无限循环调用,堆栈溢出。
好好好,这么流氓是吧。注释掉// _0x28f610();即可。

接下来,是两个自执行函数,主要还是代码下毒,并初始化core的。
好好好,这么流氓是吧。注释掉// _0x197c83('0');即可。

接下来,是个if语句块,判断域名的,不是当前域名,就无限刷新页面。
好好好,这么流氓是吧。注释掉所有语句即可。

接下来,是个setInterval计时器,每4秒执行一次core函数。不知道干嘛,肯定不干好事。
好好好,这么流氓是吧。注释掉内部执行语句即可。

接下来,就是最重要的时刻了,使用layui框架的jquery监听两个页面按钮事件,是我们要找的。
好好好,这么流氓是吧。直接翻译过来。拿来吧你。

Alt text
分析一下,so是jquery,sf是封装的jquery extend。那么en是啥呢。Sojsonhost
好好好,这么流氓是吧。直接排查到在sojson.core.2.0.js

chrome source 直接开启本地替换,再格式化。一番分析,通过ajax请求的启动器,定位到请求处,打断点,发起请求。可以看到某变量属性au_hots到值就是Sojsonhost。定位到此处
Alt text

postman启动,导入curl,修改header参数,send,成功。
至此,已经可以舒服了。

但是,这个网站这么流氓,我们必须要把它内裤扒开。
sojson.security.m.js是其加密源码,一番操作后,转换为格式化后代码。分析发现,SOSecurity为其全局函数,en使用的rc4加密,key为BAQADIw9BH0KeVWy3GCDSEvbyybst4644+D4GK3idt7z0tPXQlt5pBoOmF72W81fdChZHqFJhRR57SIo6NWvdrooeggo6N8SbE30XH9mxI0ZTihk+7hFXhTB76dsnYx3L3suKQGCAa3n2dMirPjwf1mpH5kk/YPU6hU9vbL7LpNS5Qe2MCQgBKQiBCDANG4AAUQABEQD3bISGqSCG0AMfGIM的反转。

相关本地代码,提到了github list上了,方便各位有缘读者观看。
aHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vZGluZ2NhbmcvYmFiNjczZThjOTY4NTEwNmQ3NWRhZmYzYmQzNWRjNjA=