From 13031df1b0949bc843ccfb5ea7d90c732b733443 Mon Sep 17 00:00:00 2001 From: luzhisheng Date: Thu, 17 Aug 2023 21:54:25 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B2=B9=E7=8C=B4=E6=8F=92=E4=BB=B6=E8=84=9A?= =?UTF-8?q?=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 油猴插件脚本/README.md | 458 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 458 insertions(+) create mode 100644 油猴插件脚本/README.md diff --git a/油猴插件脚本/README.md b/油猴插件脚本/README.md new file mode 100644 index 0000000..7dc25f9 --- /dev/null +++ b/油猴插件脚本/README.md @@ -0,0 +1,458 @@ +# 油猴脚本 + +## hook cookie +```javascript +// ==UserScript== +// @name hook cookie +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description pass +// @author ayf +// @run-at document-start +// @match *://*/* +// @grant none +// ==/UserScript== + +(function () { + 'use strict'; + Object.defineProperty(document, "cookie", { + set:function(val){ + console.log('hook cookie') + if(val.indexOf("RM4hZBv0dDon443M=") != -1){ + debugger; + } + return val; + } + }) +})(); +``` + +## hook debugger +```javascript +// ==UserScript== +// @name hook debugger +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description pass +// @author ayf +// @run-at document-start +// @match *://*/* +// @grant none +// ==/UserScript== + +(function() { + // 先保留原 constructor + Function.prototype.constructor_ = Function.prototype.constructor; + Function.prototype.constructor = function (a) { + // 如果参数为 debugger,就返回空方法 + if(a == "debugger") { + return function (){}; + } + // 如果参数不为 debugger,还是返回原方法 + return Function.prototype.constructor_(a); + } +})(); +``` + +## hook eval debugger +```javascript +// ==UserScript== +// @name hook eval debugger +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description pass +// @author ayf +// @run-at document-start +// @match *://*/* +// @grant none +// ==/UserScript== + +(function() { + var eval_cache = window.eval; + window.eval = function(obj) { + console.log(obj) + if (obj.indexOf('debugger') === -1) { + eval_cache(obj); + } + } +})(); +``` + +## hook match +```javascript +// ==UserScript== +// @name hook match +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description pass +// @author ayf +// @run-at document-start +// @match *://*/* +// @grant none +// ==/UserScript== + +(function () { + // 备份原函数,并添加至原型链 + String.prototype.match_ = String.prototype.match; + // hook split 方法 + String.prototype.match = function(val){ + var str = this.toString(); + console.log(str); + console.log(val); + if(str.indexOf("function") != -1){ + // console.log(str); + // console.log(val); + debugger; + } + return str.match_(val); + } + // 过检测 + String.prototype.match.toString = function (){ + return "function split() [native code] "; + } +})(); +``` + +## hook script debugger +```javascript +// ==UserScript== +// @name hook script debugger +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description pass +// @author ayf +// @run-at document-start +// @match *://*/* +// @grant none +// ==/UserScript== + +(function() { + var setter = Object.getOwnPropertyDescriptor(HTMLScriptElement.prototype, 'text').set; + Object.defineProperty(HTMLScriptElement.prototype, 'text', { + set: function (val) { + // 当调用 script.text = "debugger";该方法将被调用 + val = val.replace(/debugger/g, ""); + return setter.call(this, val); + } + }) +})(); +``` + +## hook setInterval debugger +```javascript +// ==UserScript== +// @name hook setInterval debugger +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description pass +// @author ayf +// @run-at document-start +// @match *://*/* +// @grant none +// ==/UserScript== + +(function() { + var new_setInterval=setInterval; + window.setInterval=function(a,b){ + if(a.toString().indexOf("debugger")!=-1) + { + return null; + } + if(a.toString().indexOf("console.log")!=-1) + { + return null; + } + new_setInterval(a,b); + } +})(); +``` + +## hook window +```javascript +// ==UserScript== +// @name hook window +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description pass +// @author ayf +// @run-at document-start +// @match *://*/* +// @grant none +// ==/UserScript== + +(function () { + 'use strict'; + Object.defineProperty(window, "_$ss", { + set:function(val){ + console.log(11111) + console.warn("hook _$ss", val) + debugger; + return val; + } + }) +})(); +``` + +## Proxy 拦截器 +```javascript +// ==UserScript== +// @name Proxy 拦截器 +// @namespace https://github.com/CC11001100/js-cookie-monitor-debugger-hook +// @version 0.10 +// @description 用于监控js对cookie的修改,或者在cookie符合给定条件时进入断点 +// @document https://github.com/CC11001100/js-cookie-monitor-debugger-hook +// @author CC11001100 +// @match *://*/* +// @run-at document-start +// @grant none +// ==/UserScript== + +(function() { + 'use strict'; + + // Your code here... +})(); +``` + +## 检测Json.parse +```javascript +// ==UserScript== +// @name 检测Json.parse +// @namespace http://tampermonkey.net/ +// @version 0.1 +// @description try to take over the world! +// @author NightTeam +// @include *://*/* +// @grant none +// ==/UserScript== +(function () { + var rparse = JSON.parse; + JSON.parse = function (a) { + console.log("检测Json.parse", a); + return rparse(a); + } +})(); +``` + +## 检测search decode +```javascript +// ==UserScript== +// @name search decode +// @namespace https://www.baidu.com/ +// @version 0.1 +// @description try to take over the world! +// @author NightTeam +// @match *://*/* +// @grant none +// ==/UserScript== +(function () { + for (var p in window){ + var s = p.toLocaleLowerCase(); + if(s.indexOf('encode') != -1 || s.indexOf('ency') != -1){ + console.log("警告!检测编码功能\n", window[p]) + } + if(s.indexOf('decode') != -1 || s.indexOf('decry') != -1){ + console.log("警告!检测编码功能\n", window[p]) + } + } +})(); +``` + +## 网页版微信助手 +```javascript +// ==UserScript== +// @name 网页版微信助手 +// @namespace https://muxueqz.top +// @version 0.2 +// @description Web Wechat helper +// @author muxueqz +// @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js +// @match *://wx.qq.com/* +// @grant GM_addStyle +// @grant GM_notification + +// ==/UserScript== +/* jshint ignore:start */ +// Generated by CoffeeScript 1.12.8 +(function() { + var bind_mention_user, click_user, close_userselect, contact_list, editarea, get_input_user, get_users, html, origOpen, poll, send_msg, webwxgetcontact_url, webwxinit_url, webwxsync_url; + + origOpen = XMLHttpRequest.prototype.open; + + webwxsync_url = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxsync?'; + + webwxinit_url = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxinit?'; + + webwxgetcontact_url = 'https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxgetcontact?'; + + contact_list = {}; + + XMLHttpRequest.prototype.open = function() { + this.addEventListener('readystatechange', function() { + var i, j, k, len, len1, modified_response, original_response, ref, ref1, ref2, results, results1, wx_msg; + bind_mention_user(); + if (this.responseURL.lastIndexOf(webwxgetcontact_url) === 0) { + original_response = this.responseText; + modified_response = JSON.parse(original_response); + console.log('webwxgetcontact_url request'); + ref = modified_response.MemberList; + results = []; + for (j = 0, len = ref.length; j < len; j++) { + i = ref[j]; + results.push(contact_list[i.UserName] = i.NickName); + } + return results; + } else if (this.responseURL.lastIndexOf(webwxinit_url) === 0) { + original_response = this.responseText; + modified_response = JSON.parse(original_response); + console.log('webwxinit_url request'); + return console.log(modified_response); + } else if (this.responseURL.lastIndexOf(webwxsync_url) === 0 && this.readyState === 4) { + original_response = this.responseText; + modified_response = JSON.parse(original_response); + if (modified_response.AddMsgList.length > 0) { + ref1 = modified_response.AddMsgList; + results1 = []; + for (k = 0, len1 = ref1.length; k < len1; k++) { + wx_msg = ref1[k]; + console.log(wx_msg); + console.log(contact_list[wx_msg.FromUserName], wx_msg.FromUserName); + if (wx_msg.MsgType === 10002) { + Object.defineProperty(this, "response", { + writable: true + }); + wx_msg.Content = 'test防撤回'; + GM_notification("有人想撤回消息噢"); + modified_response = JSON.stringify(modified_response); + results1.push(this.response = modified_response); + } else if (((ref2 = wx_msg.MsgType) === 10000 || ref2 === 10001) && (wx_msg.Content.indexOf("发出红包")) > -1) { + results1.push(console.log("据说发出了红包")); + } else if (wx_msg.MsgType === 10000) { + results1.push(GM_notification("据说收到红包")); + } else { + results1.push(void 0); + } + } + return results1; + } + } + }); + return origOpen.apply(this, arguments); + }; + + get_users = function(source_text) { + var select; + select = document.getElementById("userSelectionBox"); + return select.onclick = function() { + var text, val; + text = select.value; + if (text.length > 1) { + val = text; + return console.log(val); + } + }; + }; + + click_user = function() { + return console.log('click'); + }; + + close_userselect = function() { + return $('#userSelectionBox').css('display', 'none'); + }; + + console.log('console log'); + + GM_notification("wx_helper enable"); + + GM_addStyle('.main_inner{max-width:70%}'); + + GM_addStyle('.main{height:88%; padding-top:50px}'); + + GM_addStyle('.bubble{font-size:16px}'); + + GM_addStyle('.chat .box_ft .content .flex{font-size:16px}'); + + send_msg = angular.element(document.querySelector(".btn.btn_send")).scope(); + + editarea = document.getElementById("editArea"); + + html = ""; + + $("#chatArea").append(html); + + document.getElementById('userSelectionBox').onclick = function(a) { + var text; + text = a.target.name; + console.log(text); + return click_user(); + }; + + get_input_user = function() { + var clean_index, editarea_ng, editarea_scope, html_item, input, input_user, input_user_lower, item, j, len, member, member_list, newMessage, new_msg, ref, scope, source_text; + source_text = editarea.innerHTML; + input = editarea.innerHTML.replace('
', '').replace('
', '').split(' ').slice(-1)[0]; + if ('@' === input[0] && input.length > 1) { + console.log('@input:' + input); + html = ""; + newMessage = html; + scope = angular.element('#chatArea').scope(); + member_list = []; + input_user = input.slice(1, -1); + input_user_lower = input.slice(1, -1).toLowerCase(); + $('#userSelectionBox').empty(); + ref = scope.currentContact.MemberList; + for (j = 0, len = ref.length; j < len; j++) { + member = ref[j]; + item = member.NickName; + if (item.toLowerCase().lastIndexOf(input_user_lower) !== -1 && input_user_lower.length > 0) { + html_item = "
  • \n \n " + item + " \n
  • "; + $('#userSelectionBox').append(html_item); + console.log(html_item); + member_list.push(item); + } + } + console.log(member_list); + clean_index = input.lastIndexOf(input_user) - (2 + input_user.length + 1); + console.log('clean_index:' + clean_index); + console.log('input_user:' + input_user); + console.log('source:' + source_text.slice(0, +clean_index + 1 || 9e9)); + console.log('member_list length:' + member_list.length); + if (member_list.length > 0) { + new_msg = source_text.slice(0, +clean_index + 1 || 9e9) + member_list.pop() + ' '; + editarea_ng = angular.element('#editArea'); + editarea_ng.focus(); + editarea_ng.html(''); + editarea_scope = editarea_ng.scope(); + editarea_scope.insertToEditArea(new_msg); + console.log('new_msg:' + new_msg); + $('#userSelectionBox').css('display', 'block'); + return setTimeout(close_userselect, 3000); + } + } + }; + + editarea.onkeypress = function(key) { + console.log('keypress:' + key.key); + if (key.key === '@') { + return setTimeout(get_input_user, 10); + } + }; + + bind_mention_user = function() { + editarea = document.getElementById("editArea"); + return editarea.onkeypress = function(key) { + console.log('keypress:' + key.key); + if (key.key === '@') { + return setTimeout(get_input_user, 10); + } + }; + }; + + (poll = function() { + bind_mention_user(); + return setTimeout(poll, 1000); + })(); + +}).call(this); +``` \ No newline at end of file