白荼日记 - 软件 https://blog.iletter.top/index.php/tag/%E8%BD%AF%E4%BB%B6/ zh-CN Fri, 25 Jul 2025 13:18:02 +0800 Fri, 25 Jul 2025 13:18:02 +0800 去除宝塔界面一些烦人的东西 https://blog.iletter.top/index.php/archives/400.html https://blog.iletter.top/index.php/archives/400.html Fri, 25 Jul 2025 13:18:02 +0800 DelLevin 更新之后越来越难用了,自己懒得配置nginx,mysql,这些环境,开心版的又怕后门,自己改后端的js文件看的脑瓜子疼,反正都是界面,直接js删掉一些dom元素就行了。有需要的可以拿走。

// ==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);
})();
]]>
0 https://blog.iletter.top/index.php/archives/400.html#comments https://blog.iletter.top/index.php/feed/tag/%E8%BD%AF%E4%BB%B6/
微信hook消息接收 https://blog.iletter.top/index.php/archives/356.html https://blog.iletter.top/index.php/archives/356.html Sun, 09 Mar 2025 23:36:00 +0800 DelLevin 微信hook消息接收

微信版本:3.9.12.45

账号:两个微信账号,大号用来发消息,小号用来测试

工具:微信、CE修改器、x64dbg

微信版本

定位消息地址

选择微信进程

选择微信进程

大号给小号发送消息,扫描类型选择字符串,数值填写消息内容

发送消息

重复之上的步骤,不断重复,直到无法定位的时候(我这里有三个),一个个查看浏览器内存区域

请输入图片描述

找到带着wxid和xml格式的就是内存地址

请输入图片描述

请输入图片描述

x64dbg断点

记录一下当前的微信地址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已安装,等待接收消息...");

运行脚本
请输入图片描述

发送消息测试

请输入图片描述

]]>
4 https://blog.iletter.top/index.php/archives/356.html#comments https://blog.iletter.top/index.php/feed/tag/%E8%BD%AF%E4%BB%B6/
macos卸载系统内置软件 https://blog.iletter.top/index.php/archives/344.html https://blog.iletter.top/index.php/archives/344.html Fri, 27 Dec 2024 10:57:16 +0800 DelLevin 1、关闭系统完整性(SIP)

1.1进入recovery的方式

有的人使用的vmware虚拟机,在开机时候按键被屏蔽,咋都不管用,网上找找boot.efi启动,也找不到。这里我们可以挂载你安装的iso镜像然后在开机的时候选择“打开电源时进入固件”,然后在里面找到你挂载的光盘也就是带有“cdrm drivcer”这个。在进入安装模式之后找到终端。

如果您使用的是黑苹果或者白苹果,可以选择 重启按住Command+R 进入,如果是m系列芯片,长按关机键,进入硬盘选择界面进入。

进入系统Recovery模式,然后点击菜单栏,“实用工具 >> 终端”。打开终端执行如下命令:

csrutil  disable
csrutil  authenticated-root disable

然后手动输入reboot重启

2.正常重启系统

重启完毕后,可以用status查看是否为disabled,如果都是那就说明是关闭了

csrutil status    

csrutil authenticated-root status

3.查找挂载位置

使用diskutil list可以找到自己硬盘的所在分区

创建挂载目录 mkdir ~/mount

3.1虚拟机macos设置

挂载硬盘

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

3.2物理机器macos设置(以mac mini m1为例)

挂载硬盘

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):

https://blog.csdn.net/u012332816/article/details/112803018

]]>
0 https://blog.iletter.top/index.php/archives/344.html#comments https://blog.iletter.top/index.php/feed/tag/%E8%BD%AF%E4%BB%B6/
intel vt-x 处于禁用状态解决办法 https://blog.iletter.top/index.php/archives/74.html https://blog.iletter.top/index.php/archives/74.html Sat, 01 Apr 2023 23:48:00 +0800 DelLevin

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:

  • windows
  • 软件

虚拟机 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设置都不一样,这边仅列举一部分作例子(联想),

1、重启电脑

2、按住F12,进入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)

]]>
0 https://blog.iletter.top/index.php/archives/74.html#comments https://blog.iletter.top/index.php/feed/tag/%E8%BD%AF%E4%BB%B6/