文章目录
- 1. 写在前面
- 2. 请求分析
- 3. 编写Hook
- 4. 其他案例
【作者主页】:吴秋霖
【作者介绍】:Python领域优质创作者、阿里云博客专家、华为云享专家。长期致力于Python与爬虫领域研究与开发工作!
【作者推荐】:对JS逆向感兴趣的朋友可以关注《爬虫JS逆向实战》,对分布式爬虫平台感兴趣的朋友可以关注《分布式爬虫平台搭建与开发实战》
还有未来会持续更新的验证码突防、APP逆向、Python领域等一系列文章
1. 写在前面
分析网站开发爬虫的时候,像头部信息参数加密与请求参数加密很常见,但是接口返回数据加密也不会少!作者过往的文章中数据加密的案例就不下三个,感兴趣的可以翻看作者早期的文章
那么好!本期作者也是找到了多个网站,均为响应数据加密。将针对此类场景做一个深度分析与讲解,并给出一个绝大部分场景下能够通杀的极简Hook方案,来辅助我们快速定位到解密入口
需要自行分析及学习的小伙伴可以向作者获取具体的网站集合(数据响应加密类网站)
2. 请求分析
首先,打开网站点击下一页,进行一个发包调试,请求信息如下所示:
接口响应JSON中的data字段可以看到是一段密文。这里大家需要知道的一点就是(尤其新手小白),但凡这种情况,尽管它的网络传输都是通过密文在传输,但前端是一定有相应解密算法的,最终我们看到的页面正常数据都是通过算法解密再渲染到HTML中呈现给用户浏览的
3. 编写Hook
既然在上面我们知道接口返回的是JSON格式的数据,那么我们在编写Hook的时候直接在这上面操作。因为它后端返回这串含加密数据的JSON,前端就需要获取data字段进行解密,在此之前会将它转换成对象格式
所以我们需要编写一段极简的Hook脚本,具体代码如下所示:
var data_parse = JSON.parse;
JSON.parse = function (params){debugger;console.log("request data:",params);return data_parse(params);
}
Hook脚本可以直接放到控制台运行,只要响应的密文数据是JSON格式,上述Hook方案就会立马断住,将分别拦截到加密前与解密后的数据,如下所示:
在上面成功Hook到了加密数据响应,这里继续执行往下走,成功拦截解密数据,如下所示:
这个时候,密文如何解密是我们需要关注的!需要分析一下堆栈调用,找到具体的解密入口。然后剩下的就是扣代码算法还原了!如下所示er就是解密方法:
这里需要注意的是,解密数据Hook到之后,跟栈从前去查看就行,自下而上为入栈加密到出栈解密
4. 其他案例
既然说这是一个通杀的解决思路与方案,当然不会只是说说而已!这里作者也是找了多个网站的案例,它们的特征均为接口响应数据加密
接下来同样使用上面的极简Hook拦截,下面我们看一个的是一个Gov相关网站,点击翻页发包,显示响应数据是一堆密文,如下所示:
这里我们使用Hook脚本进行拦截,如下所示:
如上Hook到加密数据,继续执行再次拿到解密数据,如下所示:
找解密入口,这里我们跟一下栈,来到解密调用的地方,如下:
下个断点看看,断住后我们直接进入到上图中的b方法内部,查看具体的解密逻辑。可以看到很明显的AES.decrypt解密代码,如下所示:
是不是就可以借助Hook辅助我们快速定位到数据的解密入口!接下来我们再看看其他的案例,本期作者不会讲到具体的加密算法还原、分析、甚至是扣代码。本文中的所有网站案例数据解密的还原难度还是很简单的,所有大家感兴趣可以自行研究!
下面我们来看看另一个网站,同样接口数据加密,如下所示:
可以看到接口响应数据是密文,Hook一下,如下所示:
最后我们再来看一个示例,这是一个图片网站,我们点击翻页查看接口加载,如下所示:
启动Hook,看一下是否可以拦截到加密数据,如下所示:
拦截到密文数据,继续执行一下,照常Hook解密数据,如下所示:
Hook到解密数据的时候我们就可以跟栈,去查看解密调用的入口,如下所示:
可以看到上图解密的时候,获取了JSON数据内的result字段,这个字段就是接口响应的加密JSON内的密文数据!
至此,针对网站接口响应数据加密的类似场景,以上的Hook方案或许能够成为你的好帮手!
好了,到这里又到了跟大家说再见的时候了。创作不易,帮忙点个赞再走吧。你的支持是我创作的动力,希望能带给大家更多优质的文章