1(function () { 2 var random_count = 0; 3 var random_count_threshold = 25; 4 var random_seed = 0.462; 5 Math.random = function() { 6 random_count++; 7 if (random_count > random_count_threshold){ 8 random_seed += 0.1; 9 random_count = 1; 10 } 11 return (random_seed % 1); 12 }; 13 if (typeof(crypto) == 'object' && 14 typeof(crypto.getRandomValues) == 'function') { 15 crypto.getRandomValues = function(arr) { 16 var scale = Math.pow(256, arr.BYTES_PER_ELEMENT); 17 for (var i = 0; i < arr.length; i++) { 18 arr[i] = Math.floor(Math.random() * scale); 19 } 20 return arr; 21 }; 22 } 23})(); 24(function () { 25 var date_count = 0; 26 var date_count_threshold = 25; 27 var orig_date = Date; 28 var time_seed = 1204251968254; 29 Date = function() { 30 if (this instanceof Date) { 31 date_count++; 32 if (date_count > date_count_threshold){ 33 time_seed += 50; 34 date_count = 1; 35 } 36 switch (arguments.length) { 37 case 0: return new orig_date(time_seed); 38 case 1: return new orig_date(arguments[0]); 39 default: return new orig_date(arguments[0], arguments[1], 40 arguments.length >= 3 ? arguments[2] : 1, 41 arguments.length >= 4 ? arguments[3] : 0, 42 arguments.length >= 5 ? arguments[4] : 0, 43 arguments.length >= 6 ? arguments[5] : 0, 44 arguments.length >= 7 ? arguments[6] : 0); 45 } 46 } 47 return new Date().toString(); 48 }; 49 Date.__proto__ = orig_date; 50 Date.prototype = orig_date.prototype; 51 Date.prototype.constructor = Date; 52 orig_date.now = function() { 53 return new Date().getTime(); 54 }; 55 orig_date.prototype.getTimezoneOffset = function() { 56 var dst2010Start = 1268560800000; 57 var dst2010End = 1289120400000; 58 if (this.getTime() >= dst2010Start && this.getTime() < dst2010End) 59 return 420; 60 return 480; 61 }; 62})(); 63