网页抓取解密(简单的js逆向:该页面只有code参数进行了加密 )
优采云 发布时间: 2022-01-31 13:07网页抓取解密(简单的js逆向:该页面只有code参数进行了加密
)
简单的js逆向:
只有本页的code参数加密,比较适合刚学js逆向的同学
解决方法:抓取数据加载界面 老办法,直接按F12打开开发者工具(这里使用chrome)。清除原创数据信息。点击市值列表。点击查看今日收益。点击进入加载的连接。
寻找参数加密方法
1.这里多次重复加载页面,发现有两个变量1:timestamp,2:code。可以看出,一个是13位的时间戳,另一个是前端的加密参数。
2.老方法ctrl+shift+f,搜索code,一般加密入口是第一个,我们点击格式化,然后继续搜索code参数。
3.我找到了55,别急着慢慢找,嘿嘿,好像是这个,连其他参数都显示出来了
4. 下断点,重新加载页面,可以看到code参数是由o生成的,生成方式为r()(e + “9527” + e.substr(0, 6)),那么这个e是什么,当然不难看出是时间戳,然后我们要找到r()方法,只要找到这个方法,然后代码解密可以解决的。
5.选择r(),然后点击进入这个函数,可能会卡住,耐心等待。
6.加载后可以看到生成的方法,那我们用python写是不可能的,所以扣掉他的js代码。
7.我知道你很懒,我帮你剪掉,但是直接用不行,需要稍微改一下。
function s(t, e) {
t.constructor == String ? t = e && "binary" === e.encoding ? stringToBytes(t) : i_stringToBytes(t) : o(t) ? t = Array.prototype.slice.call(t, 0) : Array.isArray(t) || (t = t.toString());
for (var r = bytesToWords(t), u = 8 * t.length, f = 1732584193, c = -271733879, l = -1732584194, h = 271733878, d = 0; d 24) | 4278255360 & (r[d] > 8);
r[u >>> 5] |= 128 > 9 0,
c = c + g >>> 0,
l = l + _ >>> 0,
h = h + w >>> 0
}
return endian([f, c, l, h])
}
function _ff(t, e, r, n, i, o, a) {
var s = t + (e & r | ~e & n) + (i >>> 0) + a;
return (s > 32 - o) + e
}
function _gg(t, e, r, n, i, o, a) {
var s = t + (e & n | r & ~n) + (i >>> 0) + a;
return (s > 32 - o) + e
}
function _hh(t, e, r, n, i, o, a) {
var s = t + (e ^ r ^ n) + (i >>> 0) + a;
return (s > 32 - o) + e
}
function _ii(t, e, r, n, i, o, a) {
var s = t + (r ^ (e | ~n)) + (i >>> 0) + a;
return (s > 32 - o) + e
}
function rotl(t, e) {
return t > 32 - e
}
function endian(t) {
if (t.constructor == Number)
return 16711935 & rotl(t, 8) | 4278255360 & rotl(t, 24);
for (var e = 0; e > 5] |= t[r] >> 24 - r % 32 & 255);
return e
}
function bytesToString(t) {
for (var e = [], r = 0; r > 4).toString(16)),
e.push((15 & t[r]).toString(16));
return e.join("")
}
function outcode(t, e) {
var r = wordsToBytes(s(t, e));
return e && e.asBytes ? r : e && e.asString ? bytesToString(r) : bytesToHex(r)
}
function get_code() {
var e = Date.now().toString(), o = outcode(e + "9527" + e.substr(0, 6));
return [e,o];
}
console.log(get_code())
8.执行一下看看效果,好像还可以,至于怎么获取数据,我有一点,明白了!