声明
本文章中所有内容仅供学习交流使用,不得用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关。
若擅自使用本文讲解的技术而导致的任何意外,作者均不负责。文中若有侵权内容,请立即联系作者删除!
〇:友情提示
- 本文章已在微信公众号【逆向学习日记】发布,若在【优快云】中无法全部查看,可以直接点击【某翻译平台–sign和请求体解密逆向分析(脱敏版)】查看。
- 在微信公众号【逆向学习日记】也可以阅读更多文章。
- 感谢关注微信公众号和阅读文章的朋友!
Ⅰ:目标
- 网址:aHR0cHM6Ly93d3cuZGVtby5jb20vdHJhbnNsYXRl
- 接口:aHR0cHM6Ly9pZmFueWkuZGVtby5jb20vaW5kZXgucGhwP2M9dHJhbnMmbT1meSZjbGllbnQ9NiZhdXRoX3VzZXI9a2V5X3dlYl9uZXdfZmFueWkmc2lnbj0uLi4=
- sign加密 content解密
Ⅱ:抓包分析
-
首先通过观察接口请求的参数以及响应体数据,我们发现请求参数sign和响应体的content是加密了,这就需要我们进行分析加解密的算法逻辑。
-
我们本次尝试使用通过 url 关键字定位,我们直接搜索 /index.php 。
-
通过观察,很明显第一个js中包含的不像我们的请求接口 url ,那么我们直接看第二次 js,直接点击进去,在对应的位置打上断点,并重新请求。
-
可以发现断点断在此处,其中 r 就是sign的值,我们就要看 r 的生成过程,向上看可以发现 r 的生成过程,我们直接修改复刻在本地js文件中并运行。
-
发现 m() 的函数未定义,此时需要看 m() 的逻辑,并补上。 直接在m() 处打上断点,并重新发送请求。
-
直接在控制输入 m() 看他的函数体,并定位到位置打上断点,并释放断点。
-
此时我们观察他的上下代码,可以看到他是webpack打包的,此时可以我们直接看他的加载器以及加载的模块,但是在这里,我们直接单步一直的跟,直到在reset的方法中有 this._doRest 方法。该方法有很明显的MD5字眼,我们有理由怀疑是MD5算法,在这里我们直接先当作MD5处理,复刻在本地js中。
-
接着再跑本地js代码,发现报错,但是观察浏览器的值就是固定的,从右边的调用栈就可以发现,当然也可以追踪他的算法,就是浏览器加载的时候生成的,我们把固定值替换,再跑代码。
-
可以看到浏览器和我们的目前生成的 r 的值是一样吗,但是继续报错,此时我们再继续补上缺少的代码。并执行js代码
-
可以看到本地生成的值和浏览器的值是一样的。此时sign的加密算法就搞定了。
-
此时我们现在就要看响应体解密算法。通过观察代码发现,请求接口后面跟着的是then关键字,这就说明可能是异步,其中第一个函数的参数就是响应体。我们打上断点并释放到此处。
-
发现 e 就包含我们的加密结果。我们直接看谁处理了 e 就行。可以看到是 x.B6 函数处理,我们直接看他的函数体,并断点进入。
-
可以看到类似 AES 解密的样子,直接复刻本地js 先进行解密。
-
可以看到解密成功,算法是AES解密无误
-
当然解密在这个网址中也有投机的办法,观察他的控制台,他居然把添加了埋点,并且把明文输出,这是我们就可以定位他所在js文件的地方。
-
这也可以追踪到加解密的算法,前面的sign算法可以通过webpack方式解决。
Ⅲ:总结
本次逆向过程还算比较顺利,在以后的逆向过程中,可以观察是否有投机的办法,这也是很快定位的。需要具体调试网页,公众号【逆向学习日记】回复【某翻译】获取地址。