声明
本文中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
本文未经许可禁止转载,禁止任何形式的修改后进行二次传播,若有侵权,请联系作者删除!
温馨提示:本案例只提供参考,根据提示补全剩余代码即可~
逆向目标
逆向网站: aHR0cDovL3d3dy5zcG9saWN5LmNvbS8=
逆向位置:
分析
右键打开开发者工具,发现存在debugger,跟栈后发现是一个constructor构造器debugger。我们使用构造器过debugger的代码过掉这个debugger。
之后进行抓包,发现载荷中进行了加密。
点开启动器进行跟栈。
找到send方法,打上断点进行调试,发现此时参数已经进行了加密。我们点击跳过下一个函数调用继续向下执行。
发现transformResponse,我们进入函数内部发现此处已经返回后台数据,我们继续跳过下一个函数调用继续向下执行。进入到下图所示的函数内部。发现是一个混淆的响应拦截器。此时我们可以复制axiosInstance进行搜索,找到请求拦截器。
在请求拦截器内部,发现参数e是未经加密的数据,我们新建一个js文件,并把e.data的内容写入js文件中。接下来需要寻找参数e.data的加密位置。我们把整个函数扣下来放入新的js文件中。
我们发现return的值a中已经存在加密之后的数据,推测加密函数应该对a进行了加密,或者赋值。在扣下来的代码中进行搜索可以发现i这个位置。
重新打上断点,进入到i内部的encode函数,发现加密位置,将其扣下来。进入到Writer函数内部,发现其是38号模块。这里我们向上找找到加载器,并扣到js文件中,补齐环境。
部分代码如下:
commonjsGlobal = {}
var xxx;
!function (g) {
var r2, e2, i2;
// 模块太多读者自行获取
e2 = {},
i2 = function e(t) {
var n = e2[t];
return n || r2[t][0].call(n = e2[t] = {
exports: {}
}, e, n, n.exports),
n.exports
}(16),
i2.util.global.protobuf = i2,
module && module.exports && (module.exports = i2)
xxx = i2
}()
function PolicyInfoByTypeIdParam$encode(m) {
w = xxx.Writer.create()
// 代码过多读者根据前面文章内容自行获取
return w
}
data = {
// 读者根据需要自行获取载荷数据
}
运行结果如下:
温馨提示:本案例只提供参考,根据提示补全剩余代码即可~
再次声明本文中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!!!!
本文未经许可禁止转载,禁止任何形式的修改后进行二次传播,若有侵权,请联系作者删除!!!
如果你觉得此次内容对你有所帮助,麻烦给作者点个关注,点个赞并收藏一下,您的关注是我更新的动力。