// ==UserScript==
// @name 宝塔面板优化 - 界面美化
// @namespace http://tampermonkey.net/
// @version 1.3
// @description 移除指定 class 元素、替换特定 span 文字内容,并删除包含“需求反馈”的 span
// @match http://152.136.153.72:9999/*
// @grant none
// ==/UserScript==
(function () {
'use strict';
console.log('⚠ 脚本准备加载');
// 定义需要移除的 class 组合
const selectorsToRemove = [
'.h-auto.mt-\\[1\\.2rem\\]', // h-auto mt-[1.2rem]
'.svgtofont-desired.\\!mr-4px.\\!text-\\[16px\\]', // svgtofont-desired !mr-4px !text-[16px]
'.icon-end-time-free.icon-unpaid-ltd', // icon-end-time-free icon-unpaid-ltd
'.el-card.is-always-shadow.is-always-shadow.\\!border-\\[\\#efefef\\]', // el-card is-always-shadow is-always-shadow !border-[#efefef]
'.icon-end-time.icon-unpaid-ltd' // icon-end-time icon-unpaid-ltd
];
// 移除指定 class 的元素
const removeElementsByClass = () => {
selectorsToRemove.forEach(selector => {
document.querySelectorAll(selector).forEach(el => el.remove());
});
};
// 替换指定 span 的文字内容
const replaceSpanText = () => {
const spanSelector = 'span.mr-1rem.ml-\\[-1\\.5rem\\]';
document.querySelectorAll(spanSelector).forEach(span => {
span.textContent = '精简版';
});
};
// 删除 span/button 包含 指定字符 的 span 元素
const removeSpansWithText = () => {
const spans = document.querySelectorAll('span');
spans.forEach(span => {
if (span.textContent.trim() == '需求反馈') {
span.remove();
}
});
const buttons = document.querySelectorAll('button');
buttons.forEach(span => {
if (span.textContent.trim() == '立即体验') {
span.remove();
}
});
};
// 删除指定class 包含置顶字符的元素
const removeClassWithText =()=>{
const parents = document.querySelectorAll('.header-child-tab');
parents.forEach(span => {
if (
span.textContent.trim() == '安全检测' ||
span.textContent.trim() == '违规词检测' ||
span.textContent.trim() == 'PHP网站安全' ||
span.textContent.trim() == '入侵防御' ||
span.textContent.trim() == '系统加固' ||
span.textContent.trim() == '扫描感知' ||
span.textContent.trim() == '日志审计' ||
span.textContent.trim() == 'SSH登录日志'
) {
span.remove();
}
});
const classparents = document.querySelectorAll('.el-collapse-item');
classparents.forEach(span => {
if (
span.textContent.trim().includes('top5')
) {
span.remove();
}
});
}
// 删除包含特定子元素的 el-col 元素
const removeParentIfChildExists = () => {
// 获取所有 el-col.el-col-6.wrapper-item 元素
const parents = document.querySelectorAll('.el-col.el-col-6.wrapper-item');
parents.forEach(parent => {
// 检查子元素是否包含指定的 class
const child = parent.querySelector('.absolute.-left-1\\.5.-top-1');
if (child) {
parent.remove(); // 移除父元素
}
});
};
// 综合执行函数
const removeElements = () => {
removeElementsByClass();
replaceSpanText();
removeSpansWithText();
removeParentIfChildExists();
removeClassWithText();
};
// 等待dom加载完毕后执行综合函数
let timeoutId;
const debouncedRemove = () => {
clearTimeout(timeoutId);
timeoutId = setTimeout(removeElements, 200);
};
let runCount = 0;
const maxRuns = 5;
const observer = new MutationObserver((mutations, obs) => {
if (runCount >= maxRuns) {
obs.disconnect();
return;
}
obs.disconnect();
debouncedRemove();
runCount++;
obs.observe(document.body, { childList: true, subtree: true });
});
observer.observe(document.body, { childList: true, subtree: true });
// 点击一次执行一次综合函数
let clickTimeout;
document.addEventListener('click', () => {
clearTimeout(clickTimeout);
clickTimeout = setTimeout(removeElements, 200);
});
// 初始执行(延迟 1 秒,等待 DOM 加载)
setTimeout(() => {
removeElements();
}, 1000);
})();
]]>微信版本:3.9.12.45
账号:两个微信账号,大号用来发消息,小号用来测试
工具:微信、CE修改器、x64dbg
选择微信进程
大号给小号发送消息,扫描类型选择字符串,数值填写消息内容
重复之上的步骤,不断重复,直到无法定位的时候(我这里有三个),一个个查看浏览器内存区域
找到带着wxid和xml格式的就是内存地址
记录一下当前的微信地址1B6555E11BD,关闭CE修改器,打开x64dbg,附加微信,按住alt+e选择wechatwin.dll
点进去,再内存窗口搜索刚才记录的地址
设置写入断点
此时微信大号给小号发送消息,查看堆栈信息
找到有个db的那个(这一步骤是再写入微信数据库之前定位call)
选择,右键“在反汇编中转到指定QWORD”
跳转之后,先取消上一个断点
然后针对跳转的位置,找到上一个call位置,在call处进行断点
发送消息,断点到了,查看RDI
在地址栏的第一个双击一下
这样我们可以得出
0x48 是 微信id
0x88 是 微信消息的内容
找到断点位置,复制文件偏移
然后打开计算器那个图标,用偏移地址+C00
得出结果250AEA7
找到断点位置,复制地址
然后按住ALT+E,找到复制wechatwin.dll的基址
用计算器两者相减得出结果250AEA7
结果是对的,此时编写frida脚本
var wechatWin = Module.findBaseAddress("WeChatWin.dll");
if (!wechatWin) {
console.error("WeChatWin.dll模块未找到!");
throw new Error("模块未找到");
}
var hookAddress = wechatWin.add(0x250AEA7);
Interceptor.attach(hookAddress, {
onEnter: function (args) {
var timestamp = this.context.rdi.add(0x44).readInt();
var wxid = this.context.rdi.add(0x48).readPointer().readUtf16String();
var msg = this.context.rdi.add(0x88).readPointer().readUtf16String();
console.log("[++++] "+ timestamp +" "+ wxid +" : "+msg)
}
});
console.log("Hook已安装,等待接收消息...");
运行脚本
发送消息测试
有的人使用的vmware虚拟机,在开机时候按键被屏蔽,咋都不管用,网上找找boot.efi启动,也找不到。这里我们可以挂载你安装的iso镜像然后在开机的时候选择“打开电源时进入固件”,然后在里面找到你挂载的光盘也就是带有“cdrm drivcer”这个。在进入安装模式之后找到终端。
如果您使用的是黑苹果或者白苹果,可以选择 重启按住Command+R 进入,如果是m系列芯片,长按关机键,进入硬盘选择界面进入。
进入系统Recovery模式,然后点击菜单栏,“实用工具 >> 终端”。打开终端执行如下命令:
csrutil disable
csrutil authenticated-root disable
然后手动输入reboot
重启
重启完毕后,可以用status查看是否为disabled,如果都是那就说明是关闭了
csrutil status
csrutil authenticated-root status
使用diskutil list
可以找到自己硬盘的所在分区
创建挂载目录 mkdir ~/mount
挂载硬盘
sudo mount -o nobrowse -t apfs /dev/disk1s5 ~/mount
进入挂载目录
cd ~/mount/System/Applications
删除所需要的软件
sudo rm -rf 你的软件名称
重建系统快照
sudo bless --folder /Users/levin/mount/System/Library/CoreServices -bootefi --create-snapshot
挂载硬盘
sudo mount -o nobrowse -t apfs /dev/disk3s1 ~/mount
进入挂载目录
cd mount/System/Applications
删除所需要的软件
sudo rm -rf 你的软件名称
重建系统快照(这里和虚拟机的操作有一点点区别使用的是--setBoot
)
sudo bless --mount "/Users/mac/mount/System/Library/CoreServices" --setBoot --create-snapshot
参考文件:
如何删除Mac OS Monterey自带(预装)软件?:https://blog.csdn.net/yzh0911/article/details/127930513
关于MacOS升级到Big Sur之后根目录无法挂载问题的解决方案:
https://juejin.cn/post/6895635776642482183
VMware16Pro中安装的MacOS11.13禁用系统完整性保护(rootless):
]]>title: intel vt-x 处于禁用状态解决办法 - Wonder
updated: 2021-01-26 14:57:19Z
created: 2021-01-26 14:57:19Z
source: https://www.wonder1999.com/index.php/archives/48.html
tags:
虚拟机 VMware安装系统,提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态
VMware提示此主机支持Intel VT-x,但Intel VT-x处于禁用状态这是怎么回事呢?
Intel VT-x完整名称是Intel Virtualization Technology,就是Intel虚拟技术,开启它可以让硬件平台同时运行多个操作系统,是虚拟机软件运行必备的技术之一,如果禁用,就会弹出“此主机支持Intel VT-x,但Intel VT-x处于禁用状态”这个提示,解决办法就是进BIOS开启Intel Virtualization Technology。
电脑主板非常多,不同品牌、不同机型BIOS设置都不一样,这边仅列举一部分作例子(联想),
在界面Main,Devices,Power,Advanced,Security,Startup,Exit,
选择Advanced,在选择CPU Setup,Enter 进入 ,选择 Intel (R) Virtualization Technology,设置Disabled为 Enbabled,之后按F10保存,重启即可。
注意:
如果你BIOS跟本文介绍的都不同,可以进入BIOS后一个个看看,一般会在Advanced、Security、BIOS Features、Configuration的下面,
找到Intel Virtualization Technology按回车键选择Enabled,表示开启。
进入BIOS之后选择某个选项按Enter是进入,按Esc是返回,按F10或F4保存。
(小提示:联想Y7000 进入bios如果遇到需要输入硬盘密码的话,输入完成后按住回车立刻敲F2,进入bios)
]]>