声明
本文章中所有内容仅供学习交流使用,不得用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。
若擅自使用本文讲解的技术而导致的任何意外,作者均不负责。文中若有侵权内容,请立即联系作者删除!
〇:友情提示
- 本文章已在微信公众号【逆向学习日记】发布,若在【优快云】中无法全部查看,可以直接点击【js逆向–某瓜数据专家商品信息解密(脱敏版)】查看。
- 在微信公众号【逆向学习日记】也可以阅读更多文章。
- 感谢关注微信公众号和阅读文章的朋友!
Ⅰ:目标
- 网址:aHR0cHM6Ly9zdHUuZGVtby5jbi9wcm9ibGVtLWRldGFpbC82Lw==
- 目标:正确答案/最终总数
Ⅱ:抓包分析
-
首先我们通过抓包分析,观察请求头,请求参数,响应体以及调用栈。
-
可以看到请求头的S、Tt是需要指定如何得到的,以及响应体如何解密成明文的,我们直接根据调用栈分析,在loadPage处打上断点,触发请求。
-
首先我们看请求头,可以看到hhh对象就包含我们需要的值,观察右边的作用域发现hhh只在全局作用域中,那么我们可以直接搜索hhh或者window.hhh。
-
通过搜索得到,hhh中的tt就是时间戳,而s是通过window.xxoo处理得到的,并传入"sssssbbbbb"+时间戳 参数。此时我们需要知道xxoo的函数逻辑。此时断点打在xxoo上,重新发送请求。
-
程序停止断点处,此时我们直接单步调试【这里面代码很复杂,我们直接单步调试,只看关键步骤】。
-
到了这里,我们发现有4组很特别的数字,我们直接转成16进制。
-
这很明显是MD5和SHA1的魔数字,但是SHA1的魔数字是5个,这里只有4个,那么大概率是MD5,因为我们不知道是不是标准的MD5,此时,我们需要测试xxoo是不是标准的MD5,此时重新发送请求,使window.xxoo被初始化,方可调用。
-
通过测试,可以肯定xxoo就是标准的MD5函数,此时,我们需要看响应体的解密逻辑。我们通过代码发现他是fetch对象【异步】发送的,那么就知道它返回的是一个Promise对象,并且是链式调用,可以知道第一个then 也返回的Promise对象,如果没有报错那么就会到第二个then中,报错就走catch,此时我们在2处打上断点,并释放之前的断点。
-
可以看到走到了第二个then里面,此时我们需要看xxxoooo函数是什么,直接单步调试。
-
可以看到这很明显是AES的CBC模式加密,此时我们只需要再次验证即可。
-
此时响应体的解密算法搞定,只需要写代码算出最终的值即可通过。
-
最终的代码,各位自行实现。
Ⅲ:总结
目前而言,本题还是很简单的,对于大佬来说不值一提,写这类文章主要是想给入行逆向工程师的阅读的,希望大佬些阅读之后,不要介意哈。需要具体调试,公众号【逆向学习日记】回复【某上爬topic6】获取地址。