摘要:JS逆向是一个积累的过程,就例如此次所演示的例子,如果你就SHA256的经验,那么对于这个问题,分分钟几行代码就能解决,反之,可能被里面的代码逻辑带着团团转。
首先,先来看看问题。
我们的任务就是获取到相关投诉信息,页面一直往下滑动,就会出现更多的相关信息,最多展示100投诉信息。
进行一个简单的抓包,可以看到相关信息。
不断向下翻页,发现每一页的signature参数不同,这就是此次我们爬取任务所需要的关键点。
F12,search,signature,找到signature的位置。
定位到关键点,在其上次寻找相关联线索。 所代码逻辑看,所需参数都是根据已知相关JS代码生成,观点在于s这个方法,调试跟进s这个方法。
由图,可看出根据上面先关JS代码生成t,在经过init,finalize,来个方法最后生成所需的signature值。
难点,在于方法逻辑容易搞混,反复跟进,注意其中相关参数的生成逻辑,最后,可得出结果。
跟进过程中,看到此关键点,就清楚的猜出这应该是SHA256方法。
手动扣出相关参数,经过测试可以访问。
附上Python直接掉用SHA256实例:out1 = hashlib.sha256(string).hexdigest(),string是上面相关JS代码生成的t参数,但是值得注意的是最终的signature,需要与ts、rs,保持一致,否则访问不超过。
手动扣出来的JS代码,部分参数写死,调用方法abc(页数):
function getresult(c) {
for (var t = c,
r = 32,
n = [], i = 0; i < r; i++) {
var a = t[i >>> 2] >>> 24 - i % 4 * 8 & 255;
n.push((a >>> 4).toString(16)),
n.push((15 & a).toString(16))
}
return n.join("")
}
function abc(page) {
var un = (new Date).getTime(),
d = function(e, t, r) {
var n = "",
i = t,
a = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"