什么是响应结果加密
我们在爬虫过程中,抓包之后,针对内容关键词搜索无法定位到数据接口,并在响应的接口内发现有编码/不可读的长字符串等,我们可以判定其为响应结果加密。
如何针对将响应结果还原为可读的数据
- 如果响应结果有特殊关键词,优先搜索特殊关键词
- 如果没有特殊关键词,搜索关键词JSON.parse
两者结合js断点调试与控制台输出的方式,还原函数与依赖,完成逆向js代码的构建。
案例分析
关键词搜索 encrypt_data
断点定位调试
继续调试,还原js代码
将代码复制到编辑器,命名为xx.js
将yc.decode改个名字,直接换成yc,便于代码阅读。
还原yc.decode函数
如下图所示,先在return所在的一行最左侧打一个断点,然后再yc.decode中间的灰色部分点击一下,也断一次。
刷新网页,查看断点效果,大概如下面所示。【页面中断】
鼠标放在yc.decode中间,看到有函数的定义位置,点进去。【进入到一个d函数,该函数就是yc.decode函数】
直接复制该函数的全部内容到编辑器,并运行,补充依赖。【执行过后报错,u没定义】
浏览器在u位置断点,并在控制台输出u的值。【u为一个字符串,值为/[\t\n\f\r ]/g】
补充u值到yc函数内,再次运行。【再次报错,i没定义,使用上面同样的方法,在i位置断点,并使用控制台输出i的值为字符串ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/】
将i补充到函数内。【yc函数运行没问题了,接下来是找出ide函数】
关闭yc函数的断点,在ide函数位置打上断点,结果如下:
还原ide与ude函数
将鼠标移到ide关键字附近,进入ide函数定义位置。【ide函数很长,将函数定义位置直接全部复制到编辑器内】
再次运行编辑器内的代码,补充ide函数内的依赖【发现ude(e)函数没有定义】
使用上面的方法,在浏览器m = ude(e)位置打断点,进入ude函数的定义位置,并将ude函数完整定义复制到编辑器内。
最后执行代码,输出了响应的json数据,逆向成功。
案例总结
这里我们发现响应结果的encrypt_data字段加密,我们使用浏览器搜索与断点调试的方法将js代码扣下来,还原了解密过程。中间函数有依赖需要补充,我们也是通过断点调试和控制台输出的方法补充依赖。
主要的逆向流程如下:
- 使用关键字搜索encrypt_data,定位到加密文件
- 使用加密文件的来源面板搜索关键字encrypt_data定位到解密函数位置
- 使用断点调试与控制台输出结合的方式还原yc.decode函数【并补充依赖】
- 使用断点调试与控制台输出结合的方式还原ide函数与ude函数 并补充依赖】
- 输出结果