js逆向--某瓜数据专家商品信息解密(脱敏版)

声明


本文章中所有内容仅供学习交流使用,不得用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。

若擅自使用本文讲解的技术而导致的任何意外,作者均不负责。文中若有侵权内容,请立即联系作者删除!

〇:友情提示


  1. 本文章已在微信公众号【逆向学习日记】发布,若在【优快云】中无法全部查看,可以直接点击【js逆向–某瓜数据专家商品信息解密(脱敏版)】查看。
  2. 在微信公众号【逆向学习日记】也可以阅读更多文章。
  3. 感谢关注微信公众号和阅读文章的朋友!

Ⅰ:目标


  1. 网址:aHR0cDovL3d3dy5kZW1vLmNuOjgwODAvYXBwLyMvcHJvbW90aW9uLXNlYXJjaC9pbmRleA==
  2. 接口:
    aHR0cDovL3d3dy5kZW1vLmNuOjgwODAvYXBpL3YzL2dvb2RzL3NlYXJjaC9saXN0P3BlcmlvZD03JnNvcnQ9MTA0JmtleXdvcmQ9Li4u
  3. 目标:响应体Data解密

Ⅱ:抓包分析

  1. 首先通过抓包分析接口,观察响应体数据,并观察其调用栈。在这里插入图片描述在这里插入图片描述

  2. 我们通过观察,发现响应头的Data是加密的,需要我们进行解密。再观察其调用栈发现,有很多chunk开头的文件,这一类文件基本都webpack打包的,我们可以进一步进入文件查看是否是webpack打包,今天我们就不进行这一步操作。通过仔细观察存在Promise.then,那么发其请求中就存在异步,那么就有可能存在使用拦截器解密,此时我们再r.request处调用栈打上断点,并且刷新页面。在这里插入图片描述

  3. 此时程序断在断点处,此时右边的本地作用域中e包含了请求拦截器【0、1、2、3】、请求【4、5(凑对用的)】、相应拦截器【5、6、7、8】,因为我们要解密响应体数据,那么解密函数可能在【6、8】函数中,此时我们需要再【6、8】函数打上断点,观察是否存在解密函数。此时取消之前的断点,并重新发送请求。在这里插入图片描述在这里插入图片描述在这里插入图片描述

  4. 可以看到断点停到其中一个断点处,并且本地作用域中e对象含有Data加密数据,观察整个函数发现代码很长,不容易分析是否在此处加密的,有2个办法,一个是一步一步的单步调试,另一个就是直接断点运行到return处,观察右边作用域的值。此时,我们使用第2种方式,return处打上断点,并释放断点到此处。【我在断点处添加的是条件断点 [ e.config.url.indexOf(“list”)>0 ] ,因为发现有多个接口走到此处,我们只关心当前接口的url】在这里插入图片描述

  5. 可以发现本地作用域中,我们的加密数据还是密文状态,可以猜想该拦截器没有起到解密的作用,那么解密函数可能在另一个拦截器中,此时我们直接释放断点到另一处断点。在这里插入图片描述

  6. 可以看到断点停止第2个拦截器中,并且作用域中存在加密数据Data,观察整个函数,发现函数对数据进行判断并处理,此时我们需要进行单步调试,此时可以看第一段代码就有函数v对e对象进行处理,可能存在解密的操作,此时可以跟进去,也可以直接单步调试观察作用域,此时我们单步调试。在这里插入图片描述

  7. 可以发现e对象中的Data数据变成明文了,此时可以确定v函数就是解密函数,并且重新发起请求让断点停止第2个拦截器处。【前面的断点可以取消了】在这里插入图片描述

  8. 此时我们使用单步进入的方式进入v函数中。在这里插入图片描述

  9. 此时可以看到该函数混淆,我们可以我们可以整个函数复刻在本地js中,并且补上t函数,但是此时这样也有些麻烦,此时我们这里进行手扣代码。将代码运行到return处,让t被赋值。并在将调用t函数的地方替换成明文。见下图在这里插入图片描述

  10. 此时可以看到v函数中关键就是p函数对明文解密的。此时我们直接进入p函数。在这里插入图片描述

  11. 此时还是一样的,我们将代码运行到a被赋值后。并在将调用a函数的地方替换成明文。见下图在这里插入图片描述

  12. 看到整个可以知道它是DES解密,并且整个样式是第三方模块的加密,此时我们可以把c.a搞出来,但是这样又会牵扯出很多东西,此时我们也使用第三方模块【crypto-js】,并修改见下图,并且运行p函数在这里插入图片描述

  13. 此时发现u没有定义,其实说到底就是u.a.ungzip没定义,此时我们需要去找 u.a.ungzip 的函数定义。在这里插入图片描述

  14. 通过观察它是在webpack的一个模块中,当然对于整个函数,我们依然可以使用手扣代码来实现,但是我也测试过,手扣的复杂程度很难,此时在这里我们使用使用webpack的加载器把整个模块导出来进行调用,此时我们需要找到他的加载器,我们直接在var r 处打上断点刷新网页。在这里插入图片描述

  15. 可以看到程序断在我们断点处,根据对webpack的打包原理,我们知道n函数对应的函数体就是加载器函数,我们直接进入该函数。在这里插入图片描述

  16. 很明显这就是加载器函数,此时我们把加载器函数复刻在本地js中,当然nodejs中没有window,那么就要让window=globalThis;并且打印加载器在加载过程中加载了哪些模块,并在导出加载器函数,并测试加载我们的模块。在这里插入图片描述在这里插入图片描述

  17. 我们可以看到加载了717e模块,但是我们没有,那么就要去补充加载的函数。最终如下:在这里插入图片描述在这里插入图片描述在这里插入图片描述

  18. 此时我们只需要将x对象导出去,并且在最开始的js中导入并且调用ungzip函数即可并运行,如图:在这里插入图片描述在这里插入图片描述在这里插入图片描述

  19. 可以看到最终Data函数被解密出来变成明文,也说明我们的算法是没问题的。

Ⅲ:总结


到此为止,我们的Data数据就解密成功,在本案例中,最后的ungzip函数十分的复杂,我就在这里使用了将整个模块导出来直接调用,所以在之后的实践中,我们要适当的选择适当的方法去解决问题。需要具体调试,微信公众号【逆向学习日记】回复【某瓜数据】获取地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值