斗鱼视频sign签名逆向分析

本篇文章将带大家逐步定位sign生成的地方,如想学习相关知识

推荐b站的志远一二期逆向课程。

志远一期逆向课程

关键词f0dabea01b3730,  f0dabea01b3731,  f0dabea01b3732,f0dabea01b373

直接搜索就能够定位到。

        之前突然无意间发现斗鱼舞蹈区,女主播热舞真的灰常多,看的真的是热血,年轻人就应该激情热血些没毛病吧,然后就想着把这些视频都给用爬虫下载下来,然后疯狂抓包,一顿操作下来,发现需要验证sign签名,哎,没办法只能暂时放弃。最近放假的时间,闲着无聊没事干就去斗鱼找找舞蹈视频看看,结果一发现!舞蹈区没了!!! (后来百度才得知,几个月前舞蹈区就应为 “擦边” 开始整改)结果整改整改,改着改着整个视频区就不见了,这让我们这些年轻人该怎么燃起激情!!

246473896e4b3a526b27a653b8d105ce.jpeg

 1. 使用浏览器抓包分析

        直接f12抓包分析,通常视频采用的都是m3u8形式,一个片段一个片段的通过组合形成一个完整的视频,有两个文件返回了我们的m3u8,一个getStreamUrl  一个playlist.m3u8,其实我们只用抓getStreamUrl这个就行,以为这个接口只要提交正确就会给我返回一个对应m3u8文件的url,视频的每个片段内容都存在其中。

e08c9352094a4bb6aa028144b65833d8.png

0f59fc8dd18e4deb8e564829efa8f627.png         我们看到,getStreamUrl提交了五个参数,其中tt,sign,vid分别对应我们的时间戳,签名,视频的编号id,v不确定是什么(但是是固定不变的),did为我们的设备号。vid我们可以在视频的首页拿到,我们只需要找出加密sign的函数,加载出sign就可以了,通常绝大部分的网站sign签名都是对设备号,时间戳还有一些特定的参数(如getStreamUrl中的v)进行排序拼接,然后通过md5加密计算出来的值。

直接全局搜索.md5试试能不能直接定位到加密处。

d89f65b9790340ee8e47f701aafbb054.png

2. 跟栈找出加密位置

         搜出来一堆,直接搜索这个方式不行,那我们就只能跟栈打断点一步一步跟到加密处了,换到我们的initator这,然后点下面最后一次调用的地方跟进去,点进去不要动,会发现他自动跟到一个send发送的地方,在send处下一个断点。

d7477f9b54394c2e933784df4569c078.png7359bf3736cf4013b341ee53b8515383.png

 看一下他发送的 r 是啥东西

715e4f8accfd47a1beae8d25bb6ca820.png

         能够发现啊,我们的sign就在其中,我们接着往上一个调用他的栈跟,跟到了一个return new Promise的地方,发现是传过来的e里面带有我们的sign,而且这个方法里也没有重新定义我们的e,接着往上跟。2114d623f1c147a8b59ef53cb357a50e.png

         跟到了(e.adapter || defaults_1.adapter)(e).then((function(t)所在的这个方法里头,到这我们如果再继续跟栈会发现,前面的栈都为异步加载的了,很难确定是先调用了哪个栈,并且这个还有一个then,看到then我们第一时间就应该想到异步,then会异步调用很多个方法,如果加密是在then里面,我们只能在此处下断点,单步跟进去了,我们现在这个方法的头部下断,看看是不是在then处生成的e

1de1dec143f243ad8517c0d07dd6a9d5.png

f278c120a47f431e8aee830371140c36.png

                刷新网页,重新断到我们下断的位置

        发现没有经过then,我们的e中就已经有sign了,在data当中,我们再向上跟栈。c1ab0bbc662944629d8785f1b609a9c1.png

b9baa3a6fea14fa9a729ebc43f24c77c.png

        跟到了一个 n = n.then(t.shift(), t.shift()) ,我们在头部继续下断点,发现传进来的e还是有data,说明并不是在此处进行的加密。继续跟栈,发现我们跟到了一个大方法里,向上翻并没有e传入,下断分析

ab13675716ab4dd48202eb69883d0741.png

         刷新网页,断在此处,把return括起来看一下,发现并没有data,说明data是在这个return处和上一个断点之间生成的,到这里已经很接近了,仔细分析分析

        直接在bind$1这个方法里,四行全部下断点,一个一个断点跟。

        第一步,e为空442fdfa5c8134847a4240c112befe685.png

第二步,e为空 5c506b892a584993913595ed7f96cba5.png

 第三步,发现e还是为空

这就奇怪了,明明跟到了这个地方,却没有产生data?不要慌,我们仔细看看

e.apply里面传递了两个参数,其中的n就有我们想要的datac110f7b1db2146ea98ba3f1b36c08e9c.png

        这时候我们只需要网上看,n是在哪产生的,注意看上一行 n[r] = arguments[r] 所以我们n中的data是从arguments中来的,看看arguments是从哪来的,继续跟到上一个栈看看。

87b5cd423c1f4082b348ed9f48e08f8b.png

         最后是在上一个方法栈里头的 var p = window[l](a, o, s);处,p中就包含了我们想要的sign,下面的t = "".concat(p, "&vid=").concat(r)不用管,只是在后面拼接了一个视频的vid。不难看出p是由window[l]里面的三个参数 a,o,s加密产生的,这里大家自行去看看就好了,a是固定值,可以定死,o是设备号,s为时间戳,我们括住window[l]看看他是怎么加密的,把加密方法扣出来就行,最后是跟到了这里,大家自行格式化代码就能拿到加密的方法啦。

87956f0613eb4cf7be4a9267431eaf8e.png

         附上抠出来的js代码

const CryptoJS = require('crypto-js');
var f0dabea01b373 = [0x81d4a166, 0xec61a48b, 0x4c60ceea, 0xa0f150e6, 0x23f490ca, 0x5d084831, 0xa1540ed9, 0x5a0d7591, 0xfdc00648, 0x2817436f, 0xdd46e2c, 0xdedd07d5, 0x6a9e8385, 0x1a881d1e, 0x532ff64f, 0xa34e5eda, 0x8a02502a, 0xac29abe, 0x7b2cbe7f, 0x86ae0f7e, 0x905c86a9, 0x5b5f28a9, 0xd2e11bb4, 0x4efc8c67, 0xd619be7b, 0x24561d5c, 0x66c6e7c7, 0x1eaf1294, 0x3fbdafa3, 0xd7a100ac, 0x71105a7f, 0xf2dc8c81, 0x2f18f8b4, 0x1b5c532a, 0x5087767b, 0xc011b22e, 0x66275332, 0xbd26aea0, 0xad08f852, 0x4d23ee9, 0xc198862d, 0xb241fc69, 0x98e63e9, 0x7beb2a80, 0xf3999c79, 0x33a61cfa, 0x684bf583, 0xd1634ecb, 0x7d79472e, 0x3f77dfe3, 0x72b42254, 0xbf6d8eae, 0x7ee331ea, 0xbbf6eb30, 0xb0af747b, 0x4b35caba, 0xd07ae7dc, 0xe30a2373, 0x7b09a6db, 0x17e95781, 0xfdc65836, 0xafee63c2, 0xecd0f307, 0xc57f6996, 0x61a2c77b, 0x51b383fa, 0x6bee04fc, 0x86003cb, 0xd8a6bad8, 0x75466f7c, 0x9777f68d, 0xad2b3e20, 0x1ddb138b, 0xfdf3b700, 0xcf6b592e, 0x72782d2d, 0x10390638, 0x61efb7e5, 0x4e8a9331, 0x275fc048, 0x2468e610, 0xf7775e24, 0xb344e3f0, 0x3a69762d, 0x578a98f4, 0xe8b0cda1, 0x9eb959d6, 0x9066afab, 0xae3ab29, 0xed60e14f, 0x838a20f9, 0x1c19f5a4, 0x59c589b2, 0x2a4c1206, 0x34fc1908, 0xea4453e0, 0x23f3cb99, 0xf30a6d5d, 0xbb6137c8, 0x9e8be60c, 0xfccc88ee, 0x2e638b97, 0xc90c074c, 0x16a06985, 0x5f4b5a62, 0xb16ba41e, 0x3fedfd15, 0x5499d64c, 0xdc5ba1c3, 0x3ff00259, 0x763fc2dc, 0x60304fb9, 0x1ace7bd4, 0xbd9fc6fe, 0xa0f710eb, 0x99ab7446, 0xdd51c9e, 0x815a52b2, 0x89e17f4b, 0x6ef4705b, 0x6e67ea62, 0x25161f5f, 0xc2a1ab97, 0xf4962828, 0xa76780fc, 0xc39f9c2c, 0xc6f2e301, 0xf82f84fa, 0x41fe9783, 0x7b987c55, 0x9bd39932, 0x4138ad09, 0xac62e7f8, 0xbdc833d4, 0xc102abb8, 0x32c14ec, 0x80f0a458, 0x459be174, 0x8c65d6, 0x7a2d4226, 0x8bc7b524, 0xfddae27e, 0xb86b5e42, 0x1d4509d1, 0xff78ae1c, 0x87d1cb5e, 0x4ece7ea8, 0xb8d687ae, 0x7623e0e, 0xcae1464d, 0xe1ecf679, 0x75293809, 0xdb56b159, 0xbfd87161, 0xccf0b0ed, 0x16b9f1c, 0x383c125c, 0xa3520ee8, 0xd8eee954, 0x7010b92c, 0x1eb2c24e, 0x8c081519, 0xc4c58ff, 0x5ccfac39, 0xc5bd8dd, 0x38b92ee2, 0x5b6ece23, 0x6d967c4f, 0xbad875ba, 0x98ba38a6, 0xcdbe181a, 0xdc3cf29, 0x8f308d5c, 0xe2cd14c0, 0xac5e4957, 0x9d1e4834, 0xee561bbb, 0xd0ee399a, 0x7a4611bb, 0xffa07b93, 0xc5f9de4b, 0xd9c40e71, 0xb07fd8d5, 0xdc83b10f, 0x14dd3b89, 0x13a1a77e, 0x6a2b19cb, 0x66466164, 0xf7be3c84, 0xc071afbd, 0xf6754c13, 0x47dc9f85, 0x889fa22a, 0x642a6c4, 0xd5d4452c, 0x25666bef, 0x50c15328, 0x64e7fef3, 0x6ad7320c, 0xfd508ed1, 0x5c2775f4, 0x4b516411, 0x62414ff3, 0x9459a9ec, 0xa1c8bfb1, 0xa1b38080, 0xabe4189a, 0xd8b09819, 0xe34f8560, 0x1811b416, 0x9f682b80, 0xad1aefde, 0x1234cc49, 0xc68f97d1, 0x4d7ab0de, 0x48315577, 0x43e7004, 0x1739e225, 0x542eadc0, 0x2838adff, 0x58899584, 0xa4e781bd, 0x33f459fd, 0xfaf66ec7, 0x3d72c544, 0xe4c3b147, 0xc6f5c192, 0x45bf6dc2, 0xdf9e6ac1, 0xf2f5960b, 0x69969f54, 0xd37b9abf, 0xf3db9b48, 0x712586ba, 0xfd539f36, 0x2a55b898, 0xe2bc5ed0, 0xad1b0fac, 0x3641f4e5, 0x9a1fbf50, 0xa30c5cc7, 0x673f27b5, 0xc3124e63, 0xfdeabc27, 0x34fc9f5c, 0x226bcab0, 0x388d69d2, 0xf0237fa2, 0x6f825b5d, 0x51e44029, 0xfb9afb4b, 0x5c21f39, 0x3f0f6775, 0xc0677e67, 0xa23fa183, 0x4acb3238, 0x61541d3e, 0x589e9758, 0x634bba8, 0x204fd2da, 0x52d2b6ac, 0x362e45f6, 0xfea3dfbb, 0xd586681f, 0x7c3d87af, 0x296786db, 0xb6e64881, 0x86d3c261, 0x33965be8, 0x4bb48aca, 0x39a421a0, 0x2e778d14, 0x879bbfc7, 0x7149e97b, 0xc8a78ac, 0x79eeb774, 0x65a5448, 0x69a44581, 0x3d1b141b, 0x394bb943, 0x41e92598, 0x2d1c5ba2, 0xc55214eb, 0xb072b34f, 0xa816ae5e, 0x330c05b0, 0xc99d76f8, 0xff9a67d, 0x6753bea6, 0x4f7e4a30, 0xe7f5c1f3, 0xbd8254e5, 0x759160c9, 0x5c62b8b5, 0xd840d3c7, 0xed64d081, 0xfab0a12e, 0x5739f8c7, 0x62927624, 0xe1abff9, 0x204583f7, 0x61d4a97c, 0x9410ccab, 0xced9522f, 0x8ee33ae7, 0x9e307139, 0xd3a497eb, 0xc9eb5831, 0x28b67a98, 0x6502e010, 0x1113611a, 0x4f1333d5, 0x3b8ace3f, 0xbeac7f, 0x255132dc, 0x81b44392, 0x99749faa, 0xb5022c18, 0x238054a5, 0x9921b00e, 0x3a13e523, 0x99124258, 0xf0585cca, 0x42daa518, 0xff675c47, 0x195995a0, 0xb2a6db2f, 0x11872c6, 0xe8d01a1c, 0xf9149fcc, 0xd4a2e89b, 0x619fee6f, 0x76273d31, 0x1262677b, 0x96ebcbe8, 0xf93fac85, 0x3360408b, 0x9bd62e40, 0x646d369b, 0x486ec9f6, 0x42692771, 0xff762b47, 0xa71bb70f, 0x89773ba6, 0x3ee5a4c8, 0x904aa587, 0x44bf8e6b, 0x4b446471, 0x1367bf26, 0x3a0b04d3, 0x96b389f9, 0xe8191e, 0xb3ad9c96, 0x42bc77e6, 0x5e4584d9, 0x41452627, 0xcd8c8fca, 0x9f5d556e, 0x7f9b17dc, 0x47b99a68, 0xf2b83bdf, 0x67488fbd, 0x728f8161, 0xc1ac8953, 0xbddd675d, 0x665fc923, 0x9143be86, 0x7b749da9, 0x6d10576, 0x3b3080e6, 0x901f0ac6, 0x59dfa360, 0x4ce2de24, 0xe22861b9, 0xeeadab6, 0xc06c5342, 0x3c3d13af, 0x2d83b8bc, 0x5eef0f56, 0x16f4484d, 0x650e1784, 0xefe68a71, 0x88d4cbd2, 0x9a9e5e0c, 0x57dc8a99, 0x8b446e39, 0x1a52a2a2, 0xc2917245, 0x2f65878b, 0xbe635043, 0x5c7ab3e8, 0x231658db, 0xbf07b625, 0xfcb9ab0c, 0xc1262941, 0xc4a558ab, 0x2d99c757, 0xea34f58f, 0xf22fe7cb, 0x65c50804, 0x21851dbf, 0x30cc96f4, 0xc8a6303a, 0xdddccdd, 0x7de47373, 0xe06a31ff, 0x5ea7a970, 0x87582f0d, 0xa13e5f99, 0x51465b21, 0x2227cebe, 0x5dafc59f, 0x5c62df, 0xc3d59ce1, 0x133114d1, 0xdeb3dab6, 0x21e604ec, 0x3f9a847f, 0x6c093570, 0xfee8c6fe];
function ub98484234(f0dabea01b3730, f0dabea01b3731, f0dabea01b3732) {
	var rk = [38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29, 32, 35, 11, 33, 20, 10, 38, 28, 29];
	var k2 = [0x5d632278, 0x4c47a956];
	var lk = [0x5d632278, 0x4c47a956];
	var v = f0dabea01b373.slice(0);
	var k = [0xbd7375f8, 0xdfcfb71b, 0x3f7fed8e, 0xf7bb9631];
	for (var O = 0; O < 420; O++) {
		v[O] ^= 0x16d08b7c;
	}
	v[1] = (v[1] >>> (lk[1] % 16)) | (v[1] << (32 - (lk[1] % 16)));
	v[0] = (v[0] >>> (lk[0] % 16)) | (v[0] << (32 - (lk[0] % 16)));
	v[3] ^= lk[1];
	v[2] ^= lk[0];
	v[5] += lk[1];
	v[4] = (v[4] << (lk[0] % 16)) | (v[4] >>> (32 - (lk[0] % 16)));
	v[7] ^= lk[1];
	v[6] = (v[6] << (lk[0] % 16)) | (v[6] >>> (32 - (lk[0] % 16)));
	v[9] -= lk[1];
	v[8] = (v[8] << (lk[0] % 16)) | (v[8] >>> (32 - (lk[0] % 16)));
	v[11] += lk[1];
	v[10] += lk[0];
	v[13] = (v[13] >>> (lk[1] % 16)) | (v[13] << (32 - (lk[1] % 16)));
	v[12] += lk[0];
	v[15] ^= lk[1];
	v[14] ^= lk[0];
	v[17] -= lk[1];
	v[16] -= lk[0];
	v[19] = (v[19] >>> (lk[1] % 16)) | (v[19] << (32 - (lk[1] % 16)));
	v[18] = (v[18] >>> (lk[0] % 16)) | (v[18] << (32 - (lk[0] % 16)));
	v[21] ^= lk[1];
	v[20] ^= lk[0];
	v[23] += lk[1];
	v[22] = (v[22] << (lk[0] % 16)) | (v[22] >>> (32 - (lk[0] % 16)));
	v[25] ^= lk[1];
	v[24] = (v[24] << (lk[0] % 16)) | (v[24] >>> (32 - (lk[0] % 16)));
	v[27] -= lk[1];
	v[26] = (v[26] << (lk[0] % 16)) | (v[26] >>> (32 - (lk[0] % 16)));
	v[29] += lk[1];
	v[28] += lk[0];
	v[31] = (v[31] >>> (lk[1] % 16)) | (v[31] << (32 - (lk[1] % 16)));
	v[30] += lk[0];
	v[33] ^= lk[1];
	v[32] ^= lk[0];
	v[35] -= lk[1];
	v[34] -= lk[0];
	v[37] = (v[37] >>> (lk[1] % 16)) | (v[37] << (32 - (lk[1] % 16)));
	v[36] = (v[36] >>> (lk[0] % 16)) | (v[36] << (32 - (lk[0] % 16)));
	v[39] ^= lk[1];
	v[38] ^= lk[0];
	v[41] += lk[1];
	v[40] = (v[40] << (lk[0] % 16)) | (v[40] >>> (32 - (lk[0] % 16)));
	v[43] ^= lk[1];
	v[42] = (v[42] << (lk[0] % 16)) | (v[42] >>> (32 - (lk[0] % 16)));
	v[45] -= lk[1];
	v[44] = (v[44] << (lk[0] % 16)) | (v[44] >>> (32 - (lk[0] % 16)));
	v[47] += lk[1];
	v[46] += lk[0];
	v[49] = (v[49] >>> (lk[1] % 16)) | (v[49] << (32 - (lk[1] % 16)));
	v[48] += lk[0];
	v[51] ^= lk[1];
	v[50] ^= lk[0];
	v[53] -= lk[1];
	v[52] -= lk[0];
	v[55] = (v[55] >>> (lk[1] % 16)) | (v[55] << (32 - (lk[1] % 16)));
	v[54] = (v[54] >>> (lk[0] % 16)) | (v[54] << (32 - (lk[0] % 16)));
	v[57] ^= lk[1];
	v[56] ^= lk[0];
	v[59] += lk[1];
	v[58] = (v[58] << (lk[0] % 16)) | (v[58] >>> (32 - (lk[0] % 16)));
	v[61] ^= lk[1];
	v[60] = (v[60] << (lk[0] % 16)) | (v[60] >>> (32 - (lk[0] % 16)));
	v[63] -= lk[1];
	v[62] = (v[62] << (lk[0] % 16)) | (v[62] >>> (32 - (lk[0] % 16)));
	v[65] += lk[1];
	v[64] += lk[0];
	v[67] = (v[67] >>> (lk[1] % 16)) | (v[67] << (32 - (lk[1] % 16)));
	v[66] += lk[0];
	v[69] ^= lk[1];
	v[68] ^= lk[0];
	v[71] -= lk[1];
	v[70] -= lk[0];
	v[73] = (v[73] >>> (lk[1] % 16)) | (v[73] << (32 - (lk[1] % 16)));
	v[72] = (v[72] >>> (lk[0] % 16)) | (v[72] << (32 - (lk[0] % 16)));
	v[75] ^= lk[1];
	v[74] ^= lk[0];
	v[77] += lk[1];
	v[76] = (v[76] << (lk[0] % 16)) | (v[76] >>> (32 - (lk[0] % 16)));
	v[79] ^= lk[1];
	v[78] = (v[78] << (lk[0] % 16)) | (v[78] >>> (32 - (lk[0] % 16)));
	v[81] -= lk[1];
	v[80] = (v[80] << (lk[0] % 16)) | (v[80] >>> (32 - (lk[0] % 16)));
	v[83] += lk[1];
	v[82] += lk[0];
	v[85] = (v[85] >>> (lk[1] % 16)) | (v[85] << (32 - (lk[1] % 16)));
	v[84] += lk[0];
	v[87] ^= lk[1];
	v[86] ^= lk[0];
	v[89] -= lk[1];
	v[88] -= lk[0];
	v[91] = (v[91] >>> (lk[1] % 16)) | (v[91] << (32 - (lk[1] % 16)));
	v[90] = (v[90] >>> (lk[0] % 16)) | (v[90] << (32 - (lk[0] % 16)));
	v[93] ^= lk[1];
	v[92] ^= lk[0];
	v[95] += lk[1];
	v[94] = (v[94] << (lk[0] % 16)) | (v[94] >>> (32 - (lk[0] % 16)));
	v[97] ^= lk[1];
	v[96] = (v[96] << (lk[0] % 16)) | (v[96] >>> (32 - (lk[0] % 16)));
	v[99] -= lk[1];
	v[98] = (v[98] << (lk[0] % 16)) | (v[98] >>> (32 - (lk[0] % 16)));
	v[101] += lk[1];
	v[100] += lk[0];
	v[103] = (v[103] >>> (lk[1] % 16)) | (v[103] << (32 - (lk[1] % 16)));
	v[102] += lk[0];
	v[105] ^= lk[1];
	v[104] ^= lk[0];
	v[107] -= lk[1];
	v[106] -= lk[0];
	v[109] = (v[109] >>> (lk[1] % 16)) | (v[109] << (32 - (lk[1] % 16)));
	v[108] = (v[108] >>> (lk[0] % 16)) | (v[108] << (32 - (lk[0] % 16)));
	v[111] ^= lk[1];
	v[110] ^= lk[0];
	v[113] += lk[1];
	v[112] = (v[112] << (lk[0] % 16)) | (v[112] >>> (32 - (lk[0] % 16)));
	v[115] ^= lk[1];
	v[114] = (v[114] << (lk[0] % 16)) | (v[114] >>> (32 - (lk[0] % 16)));
	v[117] -= lk[1];
	v[116] = (v[116] << (lk[0] % 16)) | (v[116] >>> (32 - (lk[0] % 16)));
	v[119] += lk[1];
	v[118] += lk[0];
	v[121] = (v[121] >>> (lk[1] % 16)) | (v[121] << (32 - (lk[1] % 16)));
	v[120] += lk[0];
	v[123] ^= lk[1];
	v[122] ^= lk[0];
	v[125] -= lk[1];
	v[124] -= lk[0];
	v[127] = (v[127] >>> (lk[1] % 16)) | (v[127] << (32 - (lk[1] % 16)));
	v[126] = (v[126] >>> (lk[0] % 16)) | (v[126] << (32 - (lk[0] % 16)));
	v[129] ^= lk[1];
	v[128] ^= lk[0];
	v[131] += lk[1];
	v[130] = (v[130] << (lk[0] % 16)) | (v[130] >>> (32 - (lk[0] % 16)));
	v[133] ^= lk[1];
	v[132] = (v[132] << (lk[0] % 16)) | (v[132] >>> (32 - (lk[0] % 16)));
	v[135] -= lk[1];
	v[134] = (v[134] << (lk[0] % 16)) | (v[134] >>> (32 - (lk[0] % 16)));
	v[137] += lk[1];
	v[136] += lk[0];
	v[139] = (v[139] >>> (lk[1] % 16)) | (v[139] << (32 - (lk[1] % 16)));
	v[138] += lk[0];
	v[141] ^= lk[1];
	v[140] ^= lk[0];
	v[143] -= lk[1];
	v[142] -= lk[0];
	v[145] = (v[145] >>> (lk[1] % 16)) | (v[145] << (32 - (lk[1] % 16)));
	v[144] = (v[144] >>> (lk[0] % 16)) | (v[144] << (32 - (lk[0] % 16)));
	v[147] ^= lk[1];
	v[146] ^= lk[0];
	v[149] += lk[1];
	v[148] = (v[148] << (lk[0] % 16)) | (v[148] >>> (32 - (lk[0] % 16)));
	v[151] ^= lk[1];
	v[150] = (v[150] << (lk[0] % 16)) | (v[150] >>> (32 - (lk[0] % 16)));
	v[153] -= lk[1];
	v[152] = (v[152] << (lk[0] % 16)) | (v[152] >>> (32 - (lk[0] % 16)));
	v[155] += lk[1];
	v[154] += lk[0];
	v[157] = (v[157] >>> (lk[1] % 16)) | (v[157] << (32 - (lk[1] % 16)));
	v[156] += lk[0];
	v[159] ^= lk[1];
	v[158] ^= lk[0];
	v[161] -= lk[1];
	v[160] -= lk[0];
	v[163] = (v[163] >>> (lk[1] % 16)) | (v[163] << (32 - (lk[1] % 16)));
	v[162] = (v[162] >>> (lk[0] % 16)) | (v[162] << (32 - (lk[0] % 16)));
	v[165] ^= lk[1];
	v[164] ^= lk[0];
	v[167] += lk[1];
	v[166] = (v[166] << (lk[0] % 16)) | (v[166] >>> (32 - (lk[0] % 16)));
	v[169] ^= lk[1];
	v[168] = (v[168] << (lk[0] % 16)) | (v[168] >>> (32 - (lk[0] % 16)));
	v[171] -= lk[1];
	v[170] = (v[170] << (lk[0] % 16)) | (v[170] >>> (32 - (lk[0] % 16)));
	v[173] += lk[1];
	v[172] += lk[0];
	v[175] = (v[175] >>> (lk[1] % 16)) | (v[175] << (32 - (lk[1] % 16)));
	v[174] += lk[0];
	v[177] ^= lk[1];
	v[176] ^= lk[0];
	v[179] -= lk[1];
	v[178] -= lk[0];
	v[181] = (v[181] >>> (lk[1] % 16)) | (v[181] << (32 - (lk[1] % 16)));
	v[180] = (v[180] >>> (lk[0] % 16)) | (v[180] << (32 - (lk[0] % 16)));
	v[183] ^= lk[1];
	v[182] ^= lk[0];
	v[185] += lk[1];
	v[184] = (v[184] << (lk[0] % 16)) | (v[184] >>> (32 - (lk[0] % 16)));
	v[187] ^= lk[1];
	v[186] = (v[186] << (lk[0] % 16)) | (v[186] >>> (32 - (lk[0] % 16)));
	v[189] -= lk[1];
	v[188] = (v[188] << (lk[0] % 16)) | (v[188] >>> (32 - (lk[0] % 16)));
	v[191] += lk[1];
	v[190] += lk[0];
	v[193] = (v[193] >>> (lk[1] % 16)) | (v[193] << (32 - (lk[1] % 16)));
	v[192] += lk[0];
	v[195] ^= lk[1];
	v[194] ^= lk[0];
	v[197] -= lk[1];
	v[196] -= lk[0];
	v[199] = (v[199] >>> (lk[1] % 16)) | (v[199] << (32 - (lk[1] % 16)));
	v[198] = (v[198] >>> (lk[0] % 16)) | (v[198] << (32 - (lk[0] % 16)));
	v[201] ^= lk[1];
	v[200] ^= lk[0];
	v[203] += lk[1];
	v[202] = (v[202] << (lk[0] % 16)) | (v[202] >>> (32 - (lk[0] % 16)));
	v[205] ^= lk[1];
	v[204] = (v[204] << (lk[0] % 16)) | (v[204] >>> (32 - (lk[0] % 16)));
	v[207] -= lk[1];
	v[206] = (v[206] << (lk[0] % 16)) | (v[206] >>> (32 - (lk[0] % 16)));
	v[209] += lk[1];
	v[208] += lk[0];
	v[211] = (v[211] >>> (lk[1] % 16)) | (v[211] << (32 - (lk[1] % 16)));
	v[210] += lk[0];
	v[213] ^= lk[1];
	v[212] ^= lk[0];
	v[215] -= lk[1];
	v[214] -= lk[0];
	v[217] = (v[217] >>> (lk[1] % 16)) | (v[217] << (32 - (lk[1] % 16)));
	v[216] = (v[216] >>> (lk[0] % 16)) | (v[216] << (32 - (lk[0] % 16)));
	v[219] ^= lk[1];
	v[218] ^= lk[0];
	v[221] += lk[1];
	v[220] = (v[220] << (lk[0] % 16)) | (v[220] >>> (32 - (lk[0] % 16)));
	v[223] ^= lk[1];
	v[222] = (v[222] << (lk[0] % 16)) | (v[222] >>> (32 - (lk[0] % 16)));
	v[225] -= lk[1];
	v[224] = (v[224] << (lk[0] % 16)) | (v[224] >>> (32 - (lk[0] % 16)));
	v[227] += lk[1];
	v[226] += lk[0];
	v[229] = (v[229] >>> (lk[1] % 16)) | (v[229] << (32 - (lk[1] % 16)));
	v[228] += lk[0];
	v[231] ^= lk[1];
	v[230] ^= lk[0];
	v[233] -= lk[1];
	v[232] -= lk[0];
	v[235] = (v[235] >>> (lk[1] % 16)) | (v[235] << (32 - (lk[1] % 16)));
	v[234] = (v[234] >>> (lk[0] % 16)) | (v[234] << (32 - (lk[0] % 16)));
	v[237] ^= lk[1];
	v[236] ^= lk[0];
	v[239] += lk[1];
	v[238] = (v[238] << (lk[0] % 16)) | (v[238] >>> (32 - (lk[0] % 16)));
	v[241] ^= lk[1];
	v[240] = (v[240] << (lk[0] % 16)) | (v[240] >>> (32 - (lk[0] % 16)));
	v[243] -= lk[1];
	v[242] = (v[242] << (lk[0] % 16)) | (v[242] >>> (32 - (lk[0] % 16)));
	v[245] += lk[1];
	v[244] += lk[0];
	v[247] = (v[247] >>> (lk[1] % 16)) | (v[247] << (32 - (lk[1] % 16)));
	v[246] += lk[0];
	v[249] ^= lk[1];
	v[248] ^= lk[0];
	v[251] -= lk[1];
	v[250] -= lk[0];
	v[253] = (v[253] >>> (lk[1] % 16)) | (v[253] << (32 - (lk[1] % 16)));
	v[252] = (v[252] >>> (lk[0] % 16)) | (v[252] << (32 - (lk[0] % 16)));
	v[255] ^= lk[1];
	v[254] ^= lk[0];
	v[257] += lk[1];
	v[256] = (v[256] << (lk[0] % 16)) | (v[256] >>> (32 - (lk[0] % 16)));
	v[259] ^= lk[1];
	v[258] = (v[258] << (lk[0] % 16)) | (v[258] >>> (32 - (lk[0] % 16)));
	v[261] -= lk[1];
	v[260] = (v[260] << (lk[0] % 16)) | (v[260] >>> (32 - (lk[0] % 16)));
	v[263] += lk[1];
	v[262] += lk[0];
	v[265] = (v[265] >>> (lk[1] % 16)) | (v[265] << (32 - (lk[1] % 16)));
	v[264] += lk[0];
	v[267] ^= lk[1];
	v[266] ^= lk[0];
	v[269] -= lk[1];
	v[268] -= lk[0];
	v[271] = (v[271] >>> (lk[1] % 16)) | (v[271] << (32 - (lk[1] % 16)));
	v[270] = (v[270] >>> (lk[0] % 16)) | (v[270] << (32 - (lk[0] % 16)));
	v[273] ^= lk[1];
	v[272] ^= lk[0];
	v[275] += lk[1];
	v[274] = (v[274] << (lk[0] % 16)) | (v[274] >>> (32 - (lk[0] % 16)));
	v[277] ^= lk[1];
	v[276] = (v[276] << (lk[0] % 16)) | (v[276] >>> (32 - (lk[0] % 16)));
	v[279] -= lk[1];
	v[278] = (v[278] << (lk[0] % 16)) | (v[278] >>> (32 - (lk[0] % 16)));
	v[281] += lk[1];
	v[280] += lk[0];
	v[283] = (v[283] >>> (lk[1] % 16)) | (v[283] << (32 - (lk[1] % 16)));
	v[282] += lk[0];
	v[285] ^= lk[1];
	v[284] ^= lk[0];
	v[287] -= lk[1];
	v[286] -= lk[0];
	v[289] = (v[289] >>> (lk[1] % 16)) | (v[289] << (32 - (lk[1] % 16)));
	v[288] = (v[288] >>> (lk[0] % 16)) | (v[288] << (32 - (lk[0] % 16)));
	v[291] ^= lk[1];
	v[290] ^= lk[0];
	v[293] += lk[1];
	v[292] = (v[292] << (lk[0] % 16)) | (v[292] >>> (32 - (lk[0] % 16)));
	v[295] ^= lk[1];
	v[294] = (v[294] << (lk[0] % 16)) | (v[294] >>> (32 - (lk[0] % 16)));
	v[297] -= lk[1];
	v[296] = (v[296] << (lk[0] % 16)) | (v[296] >>> (32 - (lk[0] % 16)));
	v[299] += lk[1];
	v[298] += lk[0];
	v[301] = (v[301] >>> (lk[1] % 16)) | (v[301] << (32 - (lk[1] % 16)));
	v[300] += lk[0];
	v[303] ^= lk[1];
	v[302] ^= lk[0];
	v[305] -= lk[1];
	v[304] -= lk[0];
	v[307] = (v[307] >>> (lk[1] % 16)) | (v[307] << (32 - (lk[1] % 16)));
	v[306] = (v[306] >>> (lk[0] % 16)) | (v[306] << (32 - (lk[0] % 16)));
	v[309] ^= lk[1];
	v[308] ^= lk[0];
	v[311] += lk[1];
	v[310] = (v[310] << (lk[0] % 16)) | (v[310] >>> (32 - (lk[0] % 16)));
	v[313] ^= lk[1];
	v[312] = (v[312] << (lk[0] % 16)) | (v[312] >>> (32 - (lk[0] % 16)));
	v[315] -= lk[1];
	v[314] = (v[314] << (lk[0] % 16)) | (v[314] >>> (32 - (lk[0] % 16)));
	v[317] += lk[1];
	v[316] += lk[0];
	v[319] = (v[319] >>> (lk[1] % 16)) | (v[319] << (32 - (lk[1] % 16)));
	v[318] += lk[0];
	v[321] ^= lk[1];
	v[320] ^= lk[0];
	v[323] -= lk[1];
	v[322] -= lk[0];
	v[325] = (v[325] >>> (lk[1] % 16)) | (v[325] << (32 - (lk[1] % 16)));
	v[324] = (v[324] >>> (lk[0] % 16)) | (v[324] << (32 - (lk[0] % 16)));
	v[327] ^= lk[1];
	v[326] ^= lk[0];
	v[329] += lk[1];
	v[328] = (v[328] << (lk[0] % 16)) | (v[328] >>> (32 - (lk[0] % 16)));
	v[331] ^= lk[1];
	v[330] = (v[330] << (lk[0] % 16)) | (v[330] >>> (32 - (lk[0] % 16)));
	v[333] -= lk[1];
	v[332] = (v[332] << (lk[0] % 16)) | (v[332] >>> (32 - (lk[0] % 16)));
	v[335] += lk[1];
	v[334] += lk[0];
	v[337] = (v[337] >>> (lk[1] % 16)) | (v[337] << (32 - (lk[1] % 16)));
	v[336] += lk[0];
	v[339] ^= lk[1];
	v[338] ^= lk[0];
	v[341] -= lk[1];
	v[340] -= lk[0];
	v[343] = (v[343] >>> (lk[1] % 16)) | (v[343] << (32 - (lk[1] % 16)));
	v[342] = (v[342] >>> (lk[0] % 16)) | (v[342] << (32 - (lk[0] % 16)));
	v[345] ^= lk[1];
	v[344] ^= lk[0];
	v[347] += lk[1];
	v[346] = (v[346] << (lk[0] % 16)) | (v[346] >>> (32 - (lk[0] % 16)));
	v[349] ^= lk[1];
	v[348] = (v[348] << (lk[0] % 16)) | (v[348] >>> (32 - (lk[0] % 16)));
	v[351] -= lk[1];
	v[350] = (v[350] << (lk[0] % 16)) | (v[350] >>> (32 - (lk[0] % 16)));
	v[353] += lk[1];
	v[352] += lk[0];
	v[355] = (v[355] >>> (lk[1] % 16)) | (v[355] << (32 - (lk[1] % 16)));
	v[354] += lk[0];
	v[357] ^= lk[1];
	v[356] ^= lk[0];
	v[359] -= lk[1];
	v[358] -= lk[0];
	v[361] = (v[361] >>> (lk[1] % 16)) | (v[361] << (32 - (lk[1] % 16)));
	v[360] = (v[360] >>> (lk[0] % 16)) | (v[360] << (32 - (lk[0] % 16)));
	v[363] ^= lk[1];
	v[362] ^= lk[0];
	v[365] += lk[1];
	v[364] = (v[364] << (lk[0] % 16)) | (v[364] >>> (32 - (lk[0] % 16)));
	v[367] ^= lk[1];
	v[366] = (v[366] << (lk[0] % 16)) | (v[366] >>> (32 - (lk[0] % 16)));
	v[369] -= lk[1];
	v[368] = (v[368] << (lk[0] % 16)) | (v[368] >>> (32 - (lk[0] % 16)));
	v[371] += lk[1];
	v[370] += lk[0];
	v[373] = (v[373] >>> (lk[1] % 16)) | (v[373] << (32 - (lk[1] % 16)));
	v[372] += lk[0];
	v[375] ^= lk[1];
	v[374] ^= lk[0];
	v[377] -= lk[1];
	v[376] -= lk[0];
	v[379] = (v[379] >>> (lk[1] % 16)) | (v[379] << (32 - (lk[1] % 16)));
	v[378] = (v[378] >>> (lk[0] % 16)) | (v[378] << (32 - (lk[0] % 16)));
	v[381] ^= lk[1];
	v[380] ^= lk[0];
	v[383] += lk[1];
	v[382] = (v[382] << (lk[0] % 16)) | (v[382] >>> (32 - (lk[0] % 16)));
	v[385] ^= lk[1];
	v[384] = (v[384] << (lk[0] % 16)) | (v[384] >>> (32 - (lk[0] % 16)));
	v[387] -= lk[1];
	v[386] = (v[386] << (lk[0] % 16)) | (v[386] >>> (32 - (lk[0] % 16)));
	v[389] += lk[1];
	v[388] += lk[0];
	v[391] = (v[391] >>> (lk[1] % 16)) | (v[391] << (32 - (lk[1] % 16)));
	v[390] += lk[0];
	v[393] ^= lk[1];
	v[392] ^= lk[0];
	v[395] -= lk[1];
	v[394] -= lk[0];
	v[397] = (v[397] >>> (lk[1] % 16)) | (v[397] << (32 - (lk[1] % 16)));
	v[396] = (v[396] >>> (lk[0] % 16)) | (v[396] << (32 - (lk[0] % 16)));
	v[399] ^= lk[1];
	v[398] ^= lk[0];
	v[401] += lk[1];
	v[400] = (v[400] << (lk[0] % 16)) | (v[400] >>> (32 - (lk[0] % 16)));
	v[403] ^= lk[1];
	v[402] = (v[402] << (lk[0] % 16)) | (v[402] >>> (32 - (lk[0] % 16)));
	v[405] -= lk[1];
	v[404] = (v[404] << (lk[0] % 16)) | (v[404] >>> (32 - (lk[0] % 16)));
	v[407] += lk[1];
	v[406] += lk[0];
	v[409] = (v[409] >>> (lk[1] % 16)) | (v[409] << (32 - (lk[1] % 16)));
	v[408] += lk[0];
	v[411] ^= lk[1];
	v[410] ^= lk[0];
	v[413] -= lk[1];
	v[412] -= lk[0];
	v[415] = (v[415] >>> (lk[1] % 16)) | (v[415] << (32 - (lk[1] % 16)));
	v[414] = (v[414] >>> (lk[0] % 16)) | (v[414] << (32 - (lk[0] % 16)));
	v[417] ^= lk[1];
	v[416] ^= lk[0];
	v[419] += lk[1];
	v[418] = (v[418] << (lk[0] % 16)) | (v[418] >>> (32 - (lk[0] % 16)));
	for (var I = 0; I < 420; I += 2) {
		var i, v0 = v[I] ^ k2[0],
			v1 = v[I + 1] ^ k2[1],
			d = 0x9E3779B9,
			sum = d * rk[I / 2];
		for (i = 0; i < rk[I / 2]; i++) {
			v1 -= (((v0 << 4) ^ (v0 >>> 5)) + v0) ^ (sum + k[(sum >>> 11) & 3]);
			sum -= d;
			v0 -= (((v1 << 4) ^ (v1 >>> 5)) + v1) ^ (sum + k[sum & 3]);
		}
		v[I] = v0 ^ k2[1];
		v[I + 1] = v1 ^ k2[0];
	}
	for (var O = 419; O > 0; O--) {
		v[O] ^= v[O - 1];
	}
	v[0] ^= 0x16d08b7c;
	var strc = "";
	for (var i = 0; i < v.length; i++) {
		strc += String.fromCharCode(v[i] & 0xff, v[i] >>> 8 & 0xff, v[i] >>> 16 & 0xff, v[i] >>> 24 & 0xff);
	}
	return eval(strc)(f0dabea01b3730, f0dabea01b3731, f0dabea01b3732);
};
function get_sign(timestamp){
	return ub98484234('32147635', '10000000000000000000000000001501', timestamp);
}
console.log(get_sign('1660574286'))

大家扣完放到node里运行可能会报出CryptoJS不存在的错,两种解决方法,一是去补jQuery,二是直接用nodejs里的CryptoJS

nodejs CryptoJS 安装方法 === >    npm install crypto-js

 

然后在js代码头部写入const CryptoJS = require('crypto-js');

e5ce32d8a1c64140b0814d64210f9362.png 完成。

 

d5343053b7df571d488e3a657d888971.gif

 

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
推荐,超全的移动安全自学资料精编合集,共43份. Android安全安全技术: Emulator模拟器的配置和ROOT(终极版) 移动安全: MobSF-v3.0源代码分析【长文巨献】 移动安全: 我设计的Java代码混淆解决方案 Android安全安全技术: Android系统安全(上) Android安全安全技术: Android系统安全(下) Android安全安全技术: ARM汇编语言 Android安全安全技术: Small汇编语言 Android安全安全技术: 基础文件格式解析 Android安全安全技术: Android应用安全防护技术 Android安全安全技术: 其他Android安全知识总结 Android安全开发基础: 开发基础常识 Android安全开发基础: 四大组件之活动(Activity) Android安全开发基础: 四大组件之服务 (Service) Android安全开发基础: 四大组件之广播(Broadcast Receiver) Android安全开发基础: 四大组件之内容提供器(Content Provider) Android安全开发基础: 进程间通信机制(IPC) Android安全开发基础: JVM Dalvik ART虚拟机 Android安全开发基础: Java本地接口(JNI) Android安全开发基础: Android系统的启动过程分析 Android安全开发基础: 图形界面(UI)和碎片(Fragment)(上) Android安全开发基础: 图形界面(UI)和碎片(Fragment)(下) Android安全开发基础: 持久化技术 Android安全开发基础: 多媒体 Android安全开发基础: 其他理论知识 Android安全开发基础: 应用程序配置文件详解(AndroidManifest.xml) Android安全逆向工程: 逆向工程知识技能补充篇 Android安全软件壳: 说说Android软件壳 Android安全应用逆向: 反编译classes.dex文件 Android安全应用逆向: 使用Apktool解包并打包 Android安全应用逆向: 使用IDA静态分析so文件 Android安全应用逆向: 动态调试Smali源码 Android安全应用逆向: 使用IDA动态调试.so文件 Android安全应用逆向: 在JNI_onload函数处下断点避开针对IDA的反调试 Android安全应用逆向: Small注入 Android安全应用逆向: 破解java层的签名校验 Android安全应用逆向: 破解NDK层的签名校验 Android安全应用逆向: 使用IDA Pro进行脱壳 Android安全应用逆向: 加密算法基础 Android安全Hook: Hook技术简介 Android安全Hook: Xposed源码分析(一) Android安全Hook: Xposed源码分析(二) Android安全Hook: Xposed源码分析(三) Android安全Hook: Xposed源码分析(四)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值