易久批x-sign参数逆向分析
本篇文章仅用于交流与学习,严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除。
感谢关注!您的关注和点赞就是我的动力
1.逆向目标
aHR0cHM6Ly93d3cueWlqaXVwaS5jb20vaW5kZXguaHRtbCMvaW5kZXgvbGlzdD9zZWFyY2hLZXk9JUU1JThGJUFGJUU1JThGJUEzJUU1JThGJUFGJUU0JUI5JTkw
主要分析这里的x-sign参数
2.逆向分析
打上断点跟栈分析,
这里目标参数还未生成,执行这里的异步之后参数就生成了,说明x-sign参数就是再异步中生成的
先进异步中的第一个方法
到这里目标参数还未生成,在方法return的位置上打上断点
代码停在这里时,sign参数还没有生成
执行了这里的rr方法后参数生成了,现在进入方法内
进入后发现k参数就是我们要找的sign
主要的逻辑代码,手动解一下混淆,加密逻辑基本就清晰了
for (var i = [], a = "0123456789abcdefghijklmnopqrstuvwxyz", c = 0; c < 36; c++) i[c] = a[r(416)](Math["floor"](16 * Math[r(378)]()), 1); i[14] = "4", i[19] = a[r(416)](3 & i[19] | 8, 1), i[8] = i[13] = i[18] = i[23] = "_"; var u = i[r(410)]("") , s = (new Date)[r(386)]() / 1e3 , l = parseFloat(localStorage["getItem"]("local_init_time") || s) , d = parseFloat(localStorage["getItem"]("server_init_time") || s) , f = d + (s - l); f = (f + "")[r(389)](".")[0], t[r(401)] = t[r(401)] || {}; var p = JSON["stringify"](t["data"]) , m = e[r(414)](p) , h = t["method"] == r(400) ? "POST" : r(390) , v = e[r(411)](h, t["url"], f, u, m) , y = localStorage[r(395)](r(383)) || "" , g = y || f; t[r(408)]["token"] = y || "", (t[r(404)] || t[r(397)][r(398)]("/himalaya-ApiService-UA2")) && (g = f, t[r(408)]["token"] = ""); var b = e["a_h"](g, v) , k = b[r(379)]();这里主要说一下生成b的方法e["a_h"],进入之后发现是wasm加载的方法,感兴趣的话可以自己去抠一下wasm,我扣完代码发现这里其实是使用的标准的HmacSHA1算法,
其实从请求头中也可以大概猜出来,扣完之后,动态传参就可以拿到数据了
