破解東航的seriesid
- 2020 年 7 月 30 日
- 筆記
在查詢東航航班的時候,請求數據中有個seriesid
調試js分析程式碼的過程就略過了,下面是整合的生成seriesid 的js程式碼
<script> function get_n(e, t) { for (var n = [], r = 0; r < 256; ++r) n[r] = (r + 256).toString(16).substr(1); return n } /////////////////////////////////////////////////////////////////////// function a(e, t) { var r = t || 0, o = get_n(); return [o[e[r++]], o[e[r++]], o[e[r++]], o[e[r++]], "-", o[e[r++]], o[e[r++]], "-", o[e[r++]], o[e[r++]], "-", o[e[r++]], o[e[r++]], "-", o[e[r++]], o[e[r++]], o[e[r++]], o[e[r++]], o[e[r++]], o[e[r++]]].join("") } /////////////////////////////////////////////////////////////////// var n = "undefined" != typeof crypto && crypto.getRandomValues && crypto.getRandomValues.bind(crypto) || "undefined" != typeof msCrypto && "function" == typeof msCrypto.getRandomValues && msCrypto.getRandomValues.bind(msCrypto); var r = new Uint8Array(16); function i() { return n(r), r } ///////////////////////////////////////////////////////////////// var o; var s = 0, u = 0; function rrr(e, t, n) { var l = t && n || 0, c = t || [], f = (e = e || {}).node || r, d = void 0 !== e.clockseq ? e.clockseq : o; if (null == f || null == d) { var p = i(); null == f && (f = r = [1 | p[0], p[1], p[2], p[3], p[4], p[5]]), null == d && (d = o = 16383 & (p[6] << 8 | p[7])) } var h = void 0 !== e.msecs ? e.msecs : (new Date).getTime(), m = void 0 !== e.nsecs ? e.nsecs : u + 1, y = h - s + (m - u) / 1e4; if (y < 0 && void 0 === e.clockseq && (d = d + 1 & 16383), (y < 0 || h > s) && void 0 === e.nsecs && (m = 0), m >= 1e4) throw new Error("uuid.v1(): Can't create more than 10M uuids/sec"); s = h, u = m, o = d; var v = (1e4 * (268435455 & (h += 122192928e5)) + m) % 4294967296; c[l++] = v >>> 24 & 255, c[l++] = v >>> 16 & 255, c[l++] = v >>> 8 & 255, c[l++] = 255 & v; var g = h / 4294967296 * 1e4 & 268435455; c[l++] = g >>> 8 & 255, c[l++] = 255 & g, c[l++] = g >>> 24 & 15 | 16, c[l++] = g >>> 16 & 255, c[l++] = d >>> 8 | 128, c[l++] = 255 & d; for (var b = 0; b < 6; ++b) c[l + b] = f[b]; return t || a(c) } //////////////////////////////////////////////// function test() { return rrr().replace(/-/g, "") } res = test() console.log(res) </script>
但是有個坑,我在使用鬼鬼js調試工具的時候,一直報’Uint8Array’ 未定義,但是我在瀏覽器console面板上定義 new Uint8Array(16) 的時候,是不報錯的
於是我使用vscode和js在線調試工具試了一下,正常運行,搞不清楚是什麼原因,但是最終確實是拿到seriesid的值了