首页
关于
Search
1
pyinstaller打包小记
213 阅读
2
经典的execjs打开js编码错误
197 阅读
3
screen
188 阅读
4
linux pyenv+nvm nodejs
175 阅读
5
gif验证码识别
125 阅读
javascript
python
spider
app逆向
other
登录
/
注册
Search
标签搜索
逆向
opencv
hliang
累计撰写
25
篇文章
累计收到
31
条评论
首页
栏目
javascript
python
spider
app逆向
other
页面
关于
搜索到
2
篇与
的结果
2021-11-06
js hook的一些其他东东
常规hook cookie失效,另类hook方法var cookieDesc = Object.getOwnPropertyDescriptor(Document.prototype, 'cookie'); if (cookieDesc && cookieDesc.configurable) { Object.defineProperty(document, 'cookie', { get: function () { return cookieDesc.get.call(document); }, set: function (val) { console.log(val); debugger; cookieDesc.set.call(document, val); } }); }有时候拼接的匿名函数调用无限debugger 往上跟的函数一直被重写,可以hook Functionwindow.__cr_fun = window.Function; var myfun = function(){ //var args = Array.prototype.slice.call(arguments, 0, -1).join(","), src = arguments[arguments.length - 1] return window.__cr_fun.apply(this, arguments); } // 这里主要是屏蔽js中对原生函数native属性的检测 myfun.toString = function(){return window.__cr_fun + ""} Object.defineProperty(window, 'Function', {value: myfun});
2021年11月06日
101 阅读
0 评论
0 点赞
2021-10-14
原生js的base64和node.js的base64及btoa实现
1.原生js封装的base64function Base64() { // private property _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; // public method for encoding this.encode = function (input) { var output = ""; var chr1, chr2, chr3, enc1, enc2, enc3, enc4; var i = 0; input = _utf8_encode(input); while (i < input.length) { chr1 = input.charCodeAt(i++); chr2 = input.charCodeAt(i++); chr3 = input.charCodeAt(i++); enc1 = chr1 >> 2; enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); enc4 = chr3 & 63; if (isNaN(chr2)) { enc3 = enc4 = 64; } else if (isNaN(chr3)) { enc4 = 64; } output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); } return output; } // public method for decoding this.decode = function (input) { var output = ""; var chr1, chr2, chr3; var enc1, enc2, enc3, enc4; var i = 0; input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); while (i < input.length) { enc1 = _keyStr.indexOf(input.charAt(i++)); enc2 = _keyStr.indexOf(input.charAt(i++)); enc3 = _keyStr.indexOf(input.charAt(i++)); enc4 = _keyStr.indexOf(input.charAt(i++)); chr1 = (enc1 << 2) | (enc2 >> 4); chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); chr3 = ((enc3 & 3) << 6) | enc4; output = output + String.fromCharCode(chr1); if (enc3 != 64) { output = output + String.fromCharCode(chr2); } if (enc4 != 64) { output = output + String.fromCharCode(chr3); } } output = _utf8_decode(output); return output; } // private method for UTF-8 encoding _utf8_encode = function (string) { string = string.replace(/\r\n/g,"\n"); var utftext = ""; for (var n = 0; n < string.length; n++) { var c = string.charCodeAt(n); if (c < 128) { utftext += String.fromCharCode(c); } else if((c > 127) && (c < 2048)) { utftext += String.fromCharCode((c >> 6) | 192); utftext += String.fromCharCode((c & 63) | 128); } else { utftext += String.fromCharCode((c >> 12) | 224); utftext += String.fromCharCode(((c >> 6) & 63) | 128); utftext += String.fromCharCode((c & 63) | 128); } } return utftext; } // private method for UTF-8 decoding _utf8_decode = function (utftext) { var string = ""; var i = 0; var c = c1 = c2 = 0; while ( i < utftext.length ) { c = utftext.charCodeAt(i); if (c < 128) { string += String.fromCharCode(c); i++; } else if((c > 191) && (c < 224)) { c2 = utftext.charCodeAt(i+1); string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); i += 2; } else { c2 = utftext.charCodeAt(i+1); c3 = utftext.charCodeAt(i+2); string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63)); i += 3; } } return string; } } 使用方法var base64 = new Base64(); var result = base64.encode("中文内容"); //解密 var result2 = base64.decode(result); 2.node.js的base64 //假btoafunction btoa(str){ return new Buffer.from(str, 'utf-8').toString('base64') } function atob(str){ return new Buffer.from(str, 'base64').toString('utf-8') } 3.node.js实现btoa //binaryfunction btoa(str){ return new Buffer.from(str, "binary").toString("base64") } function atob(str){ return new Buffer.from(str, "base64").toString("binary") } 4.原生js.乐易编译助手拷贝的btoaPADCHAR = "=", ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", getbyte = function(t, e) { var i = t.charCodeAt(e); if (i > 255) throw "INVALID_CHARACTER_ERR: DOM Exception 5"; return i } btoa = function(t) { if (1 != arguments.length) throw "SyntaxError: Not enough arguments"; var e, i, n = PADCHAR, o = ALPHA, p = getbyte, r = []; t = "" + t; var s = t.length - t.length % 3; if (0 == t.length) return t; for (e = 0; e < s; e += 3) i = p(t, e) << 16 | p(t, e + 1) << 8 | p(t, e + 2), r.push(o.charAt(i >> 18)), r.push(o.charAt(i >> 12 & 63)), r.push(o.charAt(i >> 6 & 63)), r.push(o.charAt(63 & i)); switch (t.length - s) { case 1: i = p(t, e) << 16, r.push(o.charAt(i >> 18) + o.charAt(i >> 12 & 63) + n + n); break; case 2: i = p(t, e) << 16 | p(t, e + 1) << 8, r.push(o.charAt(i >> 18) + o.charAt(i >> 12 & 63) + o.charAt(i >> 6 & 63) + n) } return r.join("") }
2021年10月14日
107 阅读
1 评论
0 点赞