这次文章是补之前文章提到的eval加密 – 漫画柜
之前文章简单介绍了常见的JS混淆
查看请求
打开控制台,随意点击一本漫画,进入到正文页面,查看请求:
可以很容易看到这里有个md5的参数值是加密的。
定位加密位置
这里有两种定位方法:
第一种面向老手,先翻一遍请求,网页源码可以迅速定位。
第二种就是按照之前的文章提到的分析流程,我们分析一遍,虽然麻烦点会走弯路但是适合新手:
没有看过的朋友可以点击下面的文章链接回顾一下:
先搜索一下关键字,这里加密的参数是md5,所以试试下面这几种搜索关键词:1
2
3
4
5md5:
md5 :
md5=
md5 =
md5
搜索结果如下:
通过关键字搜索没有得到想要的结果,按照之前文章提到的流程到这里就卡住了。
不过我们看到上面请求里还有另一参数cid,既然都是请求参数,那么md5这个参数可能是和他一起提交的,我们可以试试搜索cid关键词试试。
搜索cid这个参数结果如下:
果然有点东西,我们点进第一个文件,搜索下有多少和cid这个参数相关搜索项,检索之后有18项相关,通过分析代码,很快我们定位到下图的代码,打上断点重新加载看看是否能进入我们的断点位置:
果然成功进入断点了,但是好像并没有我们想要得md5参数,这个时候好像又卡住了。
不过很快我们通过查看左侧堆栈信息找到了md5参数的位置:
这里vm的代码又是通过下面这段代码生成的:
这开头,不就是熟悉的eval加密吗。
到这里就定位到解密的地方了,但是这段eval代码又是在哪呢?
发现左侧有.html的标识,搜索是搜不到了,我们就看看这个页面的源代码吧,发现右键是进入下一页漫画,所以通过控制台的Doc选项卡看看,通过格式化代码我们找到了上面的eval代码。
1 | window["\x65\x76\x61\x6c"](function(p, a, c, k, e, d) { |
解密过程
我们来捋一捋整个过程,首先网站加载页面,执行了这段eval,解密了参数里的一堆密文,之后根据参数请求具体内容,那我们逆向只要拿到页面的代码,用execjs执行这段代码不就能拿到md5值直接请求了吗。
但是把这段代码直接复制到eval解密里好像并没有用,我感觉应该和末尾的加密参数有关,经过测试这段参数虽然长得和Base64很像但并不是base64加密,我又卡住了,所以我求助了大佬。
经过 @ 悦来客栈的老板 的提点我尝试了下果然是这段是这段代码有问题:
经过解密运行的结果就是我们在vm中看到的结果了:
到这里就简单了,请求网页的代码,使用正则替换代码里的密文,使用execjs执行这段代码就可以得到md5值,再使用这个md5值就可以请求了。
结束总结
这次的解密文章写的比较啰嗦,虽然整个加密比较简单,但是自己在这整个过程也踩了不少坑,走了不少弯路。
JS逆向是细致活,需要大胆假设,小心求证,耐心调试,同时在逆向过程中卡住了需要求助的时候也不要不好意思。把自己思考的结果、遇到的问题描述清楚附上小小的红包和大佬聊聊,会有意想不到的惊喜。
共勉~