声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢!

项目场景:

最近看了中国新说唱,Giao哥在节目中出了一首很火的歌:画画的baby,也是搏得了厂牌主理人Gai的一笑,随后这首歌便出现了在网易云的热歌中,便去网易云上听了听,突然心血来潮,我好像还没有爬过网易云的歌,heihei,开撸(耳机里听着画画的baby~)。

解决方案:

1.直接搜歌名画画的baby,点一个进去,点击播放,看看哪个请求是加载了歌曲链接。


2.可以看到有俩个加密参数params和encSecKey,老方法ctrl+shift+f搜一下params吧,然后点一个进去,继续搜params。

3.很轻松,一搜就出来两个,主要生成方式就是下面的代码,四个参数,bqN0x([“流泪”, “强”])和 bqN0x([“爱心”, “女孩”, “惊恐”, “大笑”])看起来像两个常量,到时候直接扣他的值就行,废话不多说,直接下断点调试下。
var bVZ8R = window.asrsea(JSON.stringify(i0x), bqN0x(["流泪", "强"]), bqN0x(Wx5C.md), bqN0x(["爱心", "女孩", "惊恐", "大笑"]));
4.这里有个小问题嗷,就是这个window.asrsea会执行多次,我们要找对那个对的,怎么找呢,就是我们之前得到的有参数的那个连接 v1?csrf_token= 这个,每次执行后看看xhr那里的请求是不是这个,如果是就可以扣他加密参数了。


经过多次调试,果然bqN0x([“流泪”, “强”])和 bqN0x([“爱心”, “女孩”, “惊恐”, “大笑”])是常量,而且发现bqN0x(Wx5C.md)也是常量,具体的值给你们扣下来了,那么还有一个参数JSON.stringify(i0x),可以从上面的图看出这个ids,就是我们请求的歌曲id(https://music.163.com/#/song?id=1474342935)。

bqN0x(["流泪", "强"]) = '010001'
bqN0x(Wx5C.md) = '00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7'
bqN0x(["爱心", "女孩", "惊恐", "大笑"]) = '0CoJUm6Qyw8W8jud'

JSON.stringify(i0x)也帮你们扣下来了。

JSON.stringify(i0x) = {"ids":"[1474342935]","level":"standard","encodeType":"aac","csrf_token":""}
5.那么到此为,window.asrsea的四个参数我们都知道了,接下来就要扣他的方法,打个断点进去瞅瞅他的方法,就是下面的代码块,。
    function d(d, e, f, g) {var h = {}, i = a(16);return h.encText = b(d, g),h.encText = b(h.encText, i),h.encSecKey = c(i, e, f),h}
6.也是老办法了,把这个方法用到的函数都给他扣下来,知道你们懒,我帮你们扣好了
var CryptoJS = require('crypto-js');function RSAKeyPair(a, b, c) {this.e = biFromHex(a),this.d = biFromHex(b),this.m = biFromHex(c),this.chunkSize = 2 * biHighIndex(this.m),this.radix = 16,this.barrett = new BarrettMu(this.m)
}
function twoDigit(a) {return (10 > a ? "0" : "") + String(a)
}
function encryptedString(a, b) {for (var f, g, h, i, j, k, l, c = new Array, d = b.length, e = 0; d > e; )c[e] = b.charCodeAt(e),e++;for (; 0 != c.length % a.chunkSize; )c[e++] = 0;for (f = c.length,g = "",e = 0; f > e; e += a.chunkSize) {for (j = new BigInt,h = 0,i = e; i < e + a.chunkSize; ++h)j.digits[h] = c[i++],j.digits[h] += c[i++] << 8;k = a.barrett.powMod(j, a.e),l = 16 == a.radix ? biToHex(k) : biToString(k, a.radix),g += l + " "}return g.substring(0, g.length - 1)
}
function decryptedString(a, b) {var e, f, g, h, c = b.split(" "), d = "";for (e = 0; e < c.length; ++e)for (h = 16 == a.radix ? biFromHex(c[e]) : biFromString(c[e], a.radix),g = a.barrett.powMod(h, a.d),f = 0; f <= biHighIndex(g); ++f)d += String.fromCharCode(255 & g.digits[f], g.digits[f] >> 8);return 0 == d.charCodeAt(d.length - 1) && (d = d.substring(0, d.length - 1)),d
}
function setMaxDigits(a) {maxDigits = a,ZERO_ARRAY = new Array(maxDigits);for (var b = 0; b < ZERO_ARRAY.length; b++)ZERO_ARRAY[b] = 0;bigZero = new BigInt,bigOne = new BigInt,bigOne.digits[0] = 1
}
function BigInt(a) {this.digits = "boolean" == typeof a && 1 == a ? null : ZERO_ARRAY.slice(0),this.isNeg = !1
}
function biFromDecimal(a) {for (var d, e, f, b = "-" == a.charAt(0), c = b ? 1 : 0; c < a.length && "0" == a.charAt(c); )++c;if (c == a.length)d = new BigInt;else {for (e = a.length - c,f = e % dpl10,0 == f && (f = dpl10),d = biFromNumber(Number(a.substr(c, f))),c += f; c < a.length; )d = biAdd(biMultiply(d, lr10), biFromNumber(Number(a.substr(c, dpl10)))),c += dpl10;d.isNeg = b}return d
}
function biCopy(a) {var b = new BigInt(!0);return b.digits = a.digits.slice(0),b.isNeg = a.isNeg,b
}
function biFromNumber(a) {var c, b = new BigInt;for (b.isNeg = 0 > a,a = Math.abs(a),c = 0; a > 0; )b.digits[c++] = a & maxDigitVal,a >>= biRadixBits;return b
}
function reverseStr(a) {var c, b = "";for (c = a.length - 1; c > -1; --c)b += a.charAt(c);return b
}
function biToString(a, b) {var d, e, c = new BigInt;for (c.digits[0] = b,d = biDivideModulo(a, c),e = hexatrigesimalToChar[d[1].digits[0]]; 1 == biCompare(d[0], bigZero); )d = biDivideModulo(d[0], c),digit = d[1].digits[0],e += hexatrigesimalToChar[d[1].digits[0]];return (a.isNeg ? "-" : "") + reverseStr(e)
}
function biToDecimal(a) {var c, d, b = new BigInt;for (b.digits[0] = 10,c = biDivideModulo(a, b),d = String(c[1].digits[0]); 1 == biCompare(c[0], bigZero); )c = biDivideModulo(c[0], b),d += String(c[1].digits[0]);return (a.isNeg ? "-" : "") + reverseStr(d)
}
function digitToHex(a) {var b = 15, c = "";for (i = 0; 4 > i; ++i)c += hexToChar[a & b],a >>>= 4;return reverseStr(c)
}
function biToHex(a) {var d, b = "";for (biHighIndex(a),d = biHighIndex(a); d > -1; --d)b += digitToHex(a.digits[d]);return b
}
function charToHex(a) {var h, b = 48, c = b + 9, d = 97, e = d + 25, f = 65, g = 90;return h = a >= b && c >= a ? a - b : a >= f && g >= a ? 10 + a - f : a >= d && e >= a ? 10 + a - d : 0
}
function hexToDigit(a) {var d, b = 0, c = Math.min(a.length, 4);for (d = 0; c > d; ++d)b <<= 4,b |= charToHex(a.charCodeAt(d));return b
}
function biFromHex(a) {var d, e, b = new BigInt, c = a.length;for (d = c,e = 0; d > 0; d -= 4,++e)b.digits[e] = hexToDigit(a.substr(Math.max(d - 4, 0), Math.min(d, 4)));return b
}
function biFromString(a, b) {var g, h, i, j, c = "-" == a.charAt(0), d = c ? 1 : 0, e = new BigInt, f = new BigInt;for (f.digits[0] = 1,g = a.length - 1; g >= d; g--)h = a.charCodeAt(g),i = charToHex(h),j = biMultiplyDigit(f, i),e = biAdd(e, j),f = biMultiplyDigit(f, b);return e.isNeg = c,e
}
function biDump(a) {return (a.isNeg ? "-" : "") + a.digits.join(" ")
}
function biAdd(a, b) {var c, d, e, f;if (a.isNeg != b.isNeg)b.isNeg = !b.isNeg,c = biSubtract(a, b),b.isNeg = !b.isNeg;else {for (c = new BigInt,d = 0,f = 0; f < a.digits.length; ++f)e = a.digits[f] + b.digits[f] + d,c.digits[f] = 65535 & e,d = Number(e >= biRadix);c.isNeg = a.isNeg}return c
}
function biSubtract(a, b) {var c, d, e, f;if (a.isNeg != b.isNeg)b.isNeg = !b.isNeg,c = biAdd(a, b),b.isNeg = !b.isNeg;else {for (c = new BigInt,e = 0,f = 0; f < a.digits.length; ++f)d = a.digits[f] - b.digits[f] + e,c.digits[f] = 65535 & d,c.digits[f] < 0 && (c.digits[f] += biRadix),e = 0 - Number(0 > d);if (-1 == e) {for (e = 0,f = 0; f < a.digits.length; ++f)d = 0 - c.digits[f] + e,c.digits[f] = 65535 & d,c.digits[f] < 0 && (c.digits[f] += biRadix),e = 0 - Number(0 > d);c.isNeg = !a.isNeg} elsec.isNeg = a.isNeg}return c
}
function biHighIndex(a) {for (var b = a.digits.length - 1; b > 0 && 0 == a.digits[b]; )--b;return b
}
function biNumBits(a) {var e, b = biHighIndex(a), c = a.digits[b], d = (b + 1) * bitsPerDigit;for (e = d; e > d - bitsPerDigit && 0 == (32768 & c); --e)c <<= 1;return e
}
function biMultiply(a, b) {var d, h, i, k, c = new BigInt, e = biHighIndex(a), f = biHighIndex(b);for (k = 0; f >= k; ++k) {for (d = 0,i = k,j = 0; e >= j; ++j,++i)h = c.digits[i] + a.digits[j] * b.digits[k] + d,c.digits[i] = h & maxDigitVal,d = h >>> biRadixBits;c.digits[k + e + 1] = d}return c.isNeg = a.isNeg != b.isNeg,c
}
function biMultiplyDigit(a, b) {var c, d, e, f;for (result = new BigInt,c = biHighIndex(a),d = 0,f = 0; c >= f; ++f)e = result.digits[f] + a.digits[f] * b + d,result.digits[f] = e & maxDigitVal,d = e >>> biRadixBits;return result.digits[1 + c] = d,result
}
function arrayCopy(a, b, c, d, e) {var g, h, f = Math.min(b + e, a.length);for (g = b,h = d; f > g; ++g,++h)c[h] = a[g]
}
function biShiftLeft(a, b) {var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;for (arrayCopy(a.digits, 0, d.digits, c, d.digits.length - c),e = b % bitsPerDigit,f = bitsPerDigit - e,g = d.digits.length - 1,h = g - 1; g > 0; --g,--h)d.digits[g] = d.digits[g] << e & maxDigitVal | (d.digits[h] & highBitMasks[e]) >>> f;return d.digits[0] = d.digits[g] << e & maxDigitVal,d.isNeg = a.isNeg,d
}
function biShiftRight(a, b) {var e, f, g, h, c = Math.floor(b / bitsPerDigit), d = new BigInt;for (arrayCopy(a.digits, c, d.digits, 0, a.digits.length - c),e = b % bitsPerDigit,f = bitsPerDigit - e,g = 0,h = g + 1; g < d.digits.length - 1; ++g,++h)d.digits[g] = d.digits[g] >>> e | (d.digits[h] & lowBitMasks[e]) << f;return d.digits[d.digits.length - 1] >>>= e,d.isNeg = a.isNeg,d
}
function biMultiplyByRadixPower(a, b) {var c = new BigInt;return arrayCopy(a.digits, 0, c.digits, b, c.digits.length - b),c
}
function biDivideByRadixPower(a, b) {var c = new BigInt;return arrayCopy(a.digits, b, c.digits, 0, c.digits.length - b),c
}
function biModuloByRadixPower(a, b) {var c = new BigInt;return arrayCopy(a.digits, 0, c.digits, 0, b),c
}
function biCompare(a, b) {if (a.isNeg != b.isNeg)return 1 - 2 * Number(a.isNeg);for (var c = a.digits.length - 1; c >= 0; --c)if (a.digits[c] != b.digits[c])return a.isNeg ? 1 - 2 * Number(a.digits[c] > b.digits[c]) : 1 - 2 * Number(a.digits[c] < b.digits[c]);return 0
}
function biDivideModulo(a, b) {var f, g, h, i, j, k, l, m, n, o, p, q, r, s, c = biNumBits(a), d = biNumBits(b), e = b.isNeg;if (d > c)return a.isNeg ? (f = biCopy(bigOne),f.isNeg = !b.isNeg,a.isNeg = !1,b.isNeg = !1,g = biSubtract(b, a),a.isNeg = !0,b.isNeg = e) : (f = new BigInt,g = biCopy(a)),new Array(f,g);for (f = new BigInt,g = a,h = Math.ceil(d / bitsPerDigit) - 1,i = 0; b.digits[h] < biHalfRadix; )b = biShiftLeft(b, 1),++i,++d,h = Math.ceil(d / bitsPerDigit) - 1;for (g = biShiftLeft(g, i),c += i,j = Math.ceil(c / bitsPerDigit) - 1,k = biMultiplyByRadixPower(b, j - h); -1 != biCompare(g, k); )++f.digits[j - h],g = biSubtract(g, k);for (l = j; l > h; --l) {for (m = l >= g.digits.length ? 0 : g.digits[l],n = l - 1 >= g.digits.length ? 0 : g.digits[l - 1],o = l - 2 >= g.digits.length ? 0 : g.digits[l - 2],p = h >= b.digits.length ? 0 : b.digits[h],q = h - 1 >= b.digits.length ? 0 : b.digits[h - 1],f.digits[l - h - 1] = m == p ? maxDigitVal : Math.floor((m * biRadix + n) / p),r = f.digits[l - h - 1] * (p * biRadix + q),s = m * biRadixSquared + (n * biRadix + o); r > s; )--f.digits[l - h - 1],r = f.digits[l - h - 1] * (p * biRadix | q),s = m * biRadix * biRadix + (n * biRadix + o);k = biMultiplyByRadixPower(b, l - h - 1),g = biSubtract(g, biMultiplyDigit(k, f.digits[l - h - 1])),g.isNeg && (g = biAdd(g, k),--f.digits[l - h - 1])}return g = biShiftRight(g, i),f.isNeg = a.isNeg != e,a.isNeg && (f = e ? biAdd(f, bigOne) : biSubtract(f, bigOne),b = biShiftRight(b, i),g = biSubtract(b, g)),0 == g.digits[0] && 0 == biHighIndex(g) && (g.isNeg = !1),new Array(f,g)
}
function biDivide(a, b) {return biDivideModulo(a, b)[0]
}
function biModulo(a, b) {return biDivideModulo(a, b)[1]
}
function biMultiplyMod(a, b, c) {return biModulo(biMultiply(a, b), c)
}
function biPow(a, b) {for (var c = bigOne, d = a; ; ) {if (0 != (1 & b) && (c = biMultiply(c, d)),b >>= 1,0 == b)break;d = biMultiply(d, d)}return c
}
function biPowMod(a, b, c) {for (var d = bigOne, e = a, f = b; ; ) {if (0 != (1 & f.digits[0]) && (d = biMultiplyMod(d, e, c)),f = biShiftRight(f, 1),0 == f.digits[0] && 0 == biHighIndex(f))break;e = biMultiplyMod(e, e, c)}return d
}
function BarrettMu(a) {this.modulus = biCopy(a),this.k = biHighIndex(this.modulus) + 1;var b = new BigInt;b.digits[2 * this.k] = 1,this.mu = biDivide(b, this.modulus),this.bkplus1 = new BigInt,this.bkplus1.digits[this.k + 1] = 1,this.modulo = BarrettMu_modulo,this.multiplyMod = BarrettMu_multiplyMod,this.powMod = BarrettMu_powMod
}
function BarrettMu_modulo(a) {var i, b = biDivideByRadixPower(a, this.k - 1), c = biMultiply(b, this.mu), d = biDivideByRadixPower(c, this.k + 1), e = biModuloByRadixPower(a, this.k + 1), f = biMultiply(d, this.modulus), g = biModuloByRadixPower(f, this.k + 1), h = biSubtract(e, g);for (h.isNeg && (h = biAdd(h, this.bkplus1)),i = biCompare(h, this.modulus) >= 0; i; )h = biSubtract(h, this.modulus),i = biCompare(h, this.modulus) >= 0;return h
}
function BarrettMu_multiplyMod(a, b) {var c = biMultiply(a, b);return this.modulo(c)
}
function BarrettMu_powMod(a, b) {var d, e, c = new BigInt;for (c.digits[0] = 1,d = a,e = b; ; ) {if (0 != (1 & e.digits[0]) && (c = this.multiplyMod(c, d)),e = biShiftRight(e, 1),0 == e.digits[0] && 0 == biHighIndex(e))break;d = this.multiplyMod(d, d)}return c
}
var maxDigits, ZERO_ARRAY, bigZero, bigOne, dpl10, lr10, hexatrigesimalToChar, hexToChar, highBitMasks, lowBitMasks, biRadixBase = 2, biRadixBits = 16, bitsPerDigit = biRadixBits, biRadix = 65536, biHalfRadix = biRadix >>> 1, biRadixSquared = biRadix * biRadix, maxDigitVal = biRadix - 1, maxInteger = 9999999999999998;
setMaxDigits(20),
dpl10 = 15,
lr10 = biFromNumber(1e15),
hexatrigesimalToChar = new Array("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"),
hexToChar = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f"),
highBitMasks = new Array(0,32768,49152,57344,61440,63488,64512,65024,65280,65408,65472,65504,65520,65528,65532,65534,65535),
lowBitMasks = new Array(0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535);function a(a) {var d, e, b = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", c = "";for (d = 0; a > d; d += 1)e = Math.random() * b.length,e = Math.floor(e),c += b.charAt(e);return c
}function b(a, b) {var c = CryptoJS.enc.Utf8.parse(b), d = CryptoJS.enc.Utf8.parse("0102030405060708"), e = CryptoJS.enc.Utf8.parse(a), f = CryptoJS.AES.encrypt(e, c, {iv: d,mode: CryptoJS.mode.CBC});return f.toString()
}function c(a, b, c) {var d, e;return setMaxDigits(131),d = new RSAKeyPair(b, "", c),e = encryptedString(d, a)
}function d(d, e, f, g) {var h = {}, i = a(16);return h.encText = b(d, g),h.encText = b(h.encText, i),h.encSecKey = c(i, e, f),h
}function e(a, b, d, e) {var f = {};return f.encText = c(a + e, b, d),f
}console.log(d('{"ids":"[1474342935]","level":"standard","encodeType":"aac","csrf_token":""}',"010001","00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7","0CoJUm6Qyw8W8jud"))

还好,也就500行不到,这个要导一个包crypto-js,就是前端常用的CryptoJS加密库,好了运行一下

{encText: 'qK68Bxksw4t5nrGsr4F87ll7LRD6fBwVGTwboDLLgCi9Q0ZA4xAaY3ykWYP8gjGms6jJG9/ofip1SEj1NZnl5kFUQJzoHQ7L2UiNFn6aBLyrJrir1N6cR+ERlpsMzaNEMUSE7+dMa0LHiZLZikI+KQ==',encSecKey: '216b24bc85908b17c74d234394b7680f5fa8271edc76072c6739fee8782157f1a1236c758bfc6d77c65ffe9f58d0b0ad58e412fca6414d2d9bf8650b378397e353f67edfe42f4a4279731b6554c4034fb499af4c0ac90e596cf95aaf1baef56e003dc1660225d12d0c186bc
e0cfb39a71814e543f38555d6556d788071baec3d'
}
7.目测没问题,在用参数去请求下,这里的encText就是参数params,encSecKey就是参数encSecKey,没问题了,请求这个链接(如果失效了并不是不可用,因为链接是动态的过几天就会失效)就能一起下载画画的baby了!


ps:各位觉得有帮助的可以给博主点个赞哦!有问题的直接下方评论秒回!

网易云加密参数params和encSecKey破解--js逆向相关推荐

  1. 网易云加密--Android安卓移动应用程序加密加壳保护方案防破解防逆向分析防游戏外挂

    网易云加密--Android安卓移动应用程序加密加壳保护方案防破解防逆向分析防游戏外挂 一.服务简介 网易云加密为网易公司旗下产品,致力于为移动应用程序提供专业保护方案,让加固变得更简单,一键搞定.目 ...

  2. js逆向网易云加密记录

    JS 逆向网易云加密[记录] 场景需求: 想要使网易云 音乐单曲播放次数增加,需要使用网易云接口来搞定,但是发现它的请求参数是加密了的,所以就需要来看看它是怎么加密的,从而模仿它发请求 具体操作 随便 ...

  3. 网易云加密邀您免费使用啦

    活动内容 为回馈广大云加密新老用户,特此推出年末推广活动~! 自活动日起,凡关注云加密官方微信公众号并回复关键字"网易云加密" 或者关注云加密官方微博,并私信关键字"网易 ...

  4. 对网易云音乐参数(params,encSecKey)的分析

    我们如果对网易云音乐进行爬虫的话,我们会发现,提交的参数是(params,encSecKey),然而这两个参数是一串很长的东西 我们要对网易云进行爬虫,那么就一定要将这两个参数弄明白,然后才可以进行爬 ...

  5. 超全的 爬虫+反爬虫+加密数据破解+JS逆向 干货教程,建议收藏!

    在当下这个,由互联网行业所引领的大数据时代,如果想要在越来越内卷的职场中,取得优势升职加薪,其重中之重就是要掌握数据分析技能. 对于企业的决策者来说,商业环境瞬息万变,要做出正确且果断的决策,必须提前 ...

  6. 2021.03.27_网易云登录params、encSecKey参数详解

    文章目录 前言 一.抓包分析 二.参数解析 1.加密定位 2.参数分析 总结 前言 最近半个月项目问题,比较忙了,没有及时更新.今天JaJa弟来水一波某音乐的加密参数params.encSecKey, ...

  7. python爬虫之逆向破解_js逆向爬虫实战(2)--新快之加密参数破解

    爬虫js逆向系列 我会把做爬虫过程中,遇到的所有js逆向的问题分类展示出来,以现象,解决思路,以及代码实现.我觉得做技术分享,不仅仅是要记录问题,解决办法,更重要的是要提供解决问题的思路.怎么突破的, ...

  8. 爬取网易云某歌曲所有评论,并输出词云图

    声明:本文只作学习研究,禁止用于非法用途,否则后果自负,如有侵权,请告知删除,谢谢! 项目场景: 我上一篇文章写了网易云参数的解密,这次我们来爬取画画的baby的全部评论. 解决方案: 1.先来看看评 ...

  9. 【7】实战:爬取网易云音乐歌曲对应id并剔除无版权歌曲

    目录 1. 在https://music.163.com/search中搜索林俊杰可得到下图结果: 2. 我们查看源代码,并对照浏览器渲染后的代码,可以发现歌曲是后续加载的: 3. 查看XHR与JS文 ...

最新文章

  1. socket.io的基本使用
  2. 超百家金融机构争相出席,只因飞贷宣布输出全球领先的移动信贷整体技术
  3. 0069 如何在Intellij IDEA中查看Spring MVC项目的所有请求与处理方法的映射列表
  4. poj 2531(dfs)
  5. SQLAPI报错:API client not set
  6. html手册_前端学习感悟——HTML
  7. x86保护模式 任务状态段和控制门
  8. python爬虫实例100例-Python 练习实例1
  9. DOM学习之获取元素及事件基础(附实例、源码)
  10. chrome(谷歌浏览器)固定到任务栏,点击之后出现两个图标-原因及解决办法
  11. package.json配置简介
  12. win10内置ubuntu, 启动时提示“指定的网络名不再可用”无法启动解决办法
  13. 百度2014校园招聘-研发工程师笔试题(济南站)
  14. Windows在后台自动启动cmd命令
  15. Java彩信接口开发经验及具体开发实现
  16. C++中加速cin与cout神器
  17. 华为手机自带浏览器不支持 ES6 语法
  18. php 复制文件夹并压缩到最小_【实用】PHP实现下载与压缩文件的一些方法的封装与整理...
  19. Timer延时任务和ScheduledThreadPool执行延时任务
  20. 【源代码】Python制作的赛车小游戏,逆行飙车

热门文章

  1. iOS高级分享 — 谈谈 IOS 13
  2. 养老机构管理系统的设计与实现
  3. Git分支的意义和使用方法
  4. 计算机英语翻译 unit 6
  5. 七段数码管数字时钟实时显示显示(年月日时分秒)
  6. 研究生二年级下学期工作计划安排
  7. Agilent/安捷伦3458A八位半万用表
  8. 0064-【测序行业】-2018基因检测行业研究报告丨鲸准研究院
  9. 计算机应用 建模,第十八届“江泽涵杯”数学建模与计算机应用竞赛通知 - 团委学术科创部(XSKC)版 - 北大未名BBS...
  10. 广州移动烽火HG680-LC_S905L3_安卓9.0_线刷固件包