首页
关于
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
页面
关于
搜索到
25
篇与
的结果
2021-11-09
python让requetst库支持https2.0及修改默认的tls
除了用httpx模块,还可以魔改下requests库来自大佬Artio的分享import urllib3.util.ssl_ import requests urllib3.util.ssl_.DEFAULT_CIPHERS = ":".join( i for i in urllib3.util.ssl_.DEFAULT_CIPHERS.split(":") if not i.startswith("!")) from requests import Session from hyper.contrib import HTTP20Adapter from requests.utils import CaseInsensitiveDict _request = Session.request class MyHttp20Adapter(HTTP20Adapter): def __init__(self, *args, **kwargs): super(MyHttp20Adapter, self).__init__(*args, **kwargs) super(HTTP20Adapter, self).__init__(*args, **kwargs) def request(self, method, url, clear_headers=False, http2=False, **kwargs): if http2: self.mount("https://", MyHttp20Adapter()) if clear_headers: self.headers = CaseInsensitiveDict() result = _request(self, method=method, url=url, **kwargs) return result r=requests.Session() r.headers= { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36', } data = { 'page': '2' } res=request(r,method="post",url="",http2=True,data=data) print(res.text)
2021年11月09日
13 阅读
0 评论
0 点赞
2021-11-06
js逆向 扣代码-检测使用环境
通过代理对象的方式来修改get set代理代码const proxy = function(obj) { return new Proxy(obj, { set: (target, prop, val) => { console.log("SET>>>>", prop, prop, val) return Reflect.set(...arguments); }, get: (target, prop, r) => { console.log("GET>>>>", prop, prop, target[prop]) return target[prop] }, }) } //假设要对window进行监听 window = proxy(window)简单的获取第一层check_array=["document","window","navigator"]; function pr(check_array){ for(let a = 0;a < check_array.length; a++) { eval(check_array[a]+`=new Proxy(`+check_array[a]+`,{ get:function(k,v){ console.log("获取了",check_array[a],"里面的",v) return k[v]; } })`) } } pr(check_array)check数组可以添加更多的可能被检测的东东然后放js最上面跑一下方法2 深度递归30层(function () { function set_traverse_object(tarrget, obj, recursion_layers) { recursion_layers -= 1; console.log(); for (let prop in obj) { const value = obj[prop]; const tg_name = `${tarrget}.${prop.toString()}`; const value_type = get_value_type(value); if (value && value_type === "object" && recursion_layers >= 1) { set_traverse_object(tg_name, value, recursion_layers); continue } if (value && value.toString() !== '[object Object]') { console.log(`setter hook->${tg_name}; value-> ${value}; typeof-> ${value_type}`); continue } console.log(`setter hook->${tg_name}; value-> ${value}; typeof-> ${value_type}\n`) } } function new_handel(target_name, obj, number) { return new Proxy(obj, my_handler(target_name, number)) } function get_value_type(value) { if (Array.isArray(value)) { return 'Array' } return typeof value; } function my_handler(target_name, number) { return { set: function (obj, prop, value) { const value_type = get_value_type(value); const tg_name = `${target_name}.${prop.toString()}`; if (value && value_type === "object") { set_traverse_object(tg_name, value, number) } else { console.log(`setter hook->${tg_name}; value-> ${value}; typeof-> ${value_type}`) } return Reflect.set(obj, prop, value); }, get: function (obj, prop) { const tg_name = `${target_name}.${prop.toString()}`; const value = Reflect.get(obj, prop); let value_type = get_value_type(value); if (value && value_type === 'object') { return new_handel(tg_name, value, number) } console.log(`getter hook->${tg_name}; value-> ${value}; typeof-> ${value_type}\n`); return value } } } window = new Proxy(window, my_handler(Object.keys({window})[0], 30)); }());
2021年11月06日
95 阅读
1 评论
0 点赞
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 点赞
2021-09-26
js逆向之JsRpc
js逆向之远程调用(rpc)免去抠代码代码地址:https://github.com/jxhczhl/JsRpc- 基本介绍 在网站的控制台新建一个WebScoket客户端链接到服务器通信,调用服务器的接口 服务器会发送信息给客户端 客户端接收到要执行的方法执行完js代码后把获得想要的内容发回给服务器 服务器接收到后再显示出来 目录结构 -- main.go (服务器的主代码)-- JsEnv.js (客户端-网页上的js环境)先粘贴JsEnv环境到网站控制台再注入ws 控制台粘贴var demo = new Hlclient("wss://域名:12443/ws?group=test&name=test")注册一个方法 第一个参数hello为方法名,第二个参数为函数,resolve里面的值是想要的值,param是可传参参数,可以忽略demo.regAction("hello", function (resolve,param) { var c="好困啊"+param resolve(c); })实现 本方法可以https证书且支持wss 在https的网站想要新建WebSocket连接如果是连接到普通的ws可能会报安全错误,所以需要更换为wss。等等,好像连接本地ws不会报错~ 你们看着玩吧1.无https证书者。直接编译main.go 我试了自己的win7电脑,发现谷歌浏览器可以在https的网站连接ws而不一定要wss,所以在win7及以下的系统可能可以直接开服务用 默认端口120802.有https证书者。修改main.go文件 把r.Run()注释掉,把r.RunTls注释取消掉 并且参数设置证书的路径 直接输入名字就是当前路径 默认端口:12443另外的题外话,有域名没证书不会搞的 或者有域名有公网(非固定IP的)都可以搞成的,自己研究研究食用方法 打开编译好的go文件,开启服务有3个接口:/list是查看当前连接的ws服务 /ws是浏览器注入ws连接的接口 /go是获取数据的接口 (数据格式json: {"group":"hhh","hello":"好困啊yes","name":"baidu","status":"200"} ) 说明:接口用?group和name来区分,我也不知道我为啥要抄两个名字来区分ws://127.0.0.1:12080/ws?group={}&name={}" //注入ws的例子 group和name都可以随便http://127.0.0.1:12080/go?group={}&name={}&action={}¶m={} //group和name填写上面注入时候的,action是注册的方法名,param是可选的参数步骤一:粘贴js环境 步骤二:注入ws和方法 步骤三:访问接口就能获得数据 image {"group":"hhh","hello":"好困啊yes","name":"baidu","status":"200"} 其中 hello是会变的 是action名字。 用代码访问的时候要注意这个名字食用案例-爱锭网15题本题解是把它ajax获取数据那一个函数都复制下来,然后控制台调用这样子~1.f12查看请求,跟进去 找到ajax那块,可以看到call函数就是主要的ajax发包 输入页数就可以,那我们复制这个函数里面的代码备用 2.先在控制台粘贴我的js环境,再注入一个rpc链接 注册一个call方法,名字自定义 第二个参数粘贴上面call的代码,小小修改一下 先定义num=param 这样就传参进来了,再定义一个变量来保存获取到的数据,resolve(变量) 就是发送。完了就注入好了,可以把f12关掉了 3.调用接口就完事了,param就是传参页数 控制台可以关,但是注入的网页不要关哦
2021年09月26日
22 阅读
0 评论
0 点赞
1
...
4
5