万能Dll注入动态链接库修改软件标题文字内容无需编程基础

#include "pch.h"

// 全局时钟 ID,用于停止时钟
DWORD g_TimerID = NULL;

// 时钟回调函数
VOID CALLBACK TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime) {
    // 查找主窗口
    HWND hMainWin = FindWindowA(NULL, "需要修改的标题在此处原标题");
    HWND hMainWin2 = FindWindowA("TkTopLevel", NULL);

    // 修改主窗口标题
    if (hMainWin != NULL) {
        SetWindowTextA(hMainWin, "大飞哥软件自习室—修改后的标题");
    }
    if (hMainWin2 != NULL) {
        SetWindowTextA(hMainWin2, "大飞哥软件自习室—修改后的标题");
    }

    // 枚举主窗口的子控件
    if (hMainWin != NULL) {
        EnumChildWindows(hMainWin, [](HWND hChild, LPARAM lParam) {
            char className[256];
            GetClassNameA(hChild, className, sizeof(className));

            // 假设图片控件类名为 Static,按钮控件类名为 Button
            if (strcmp(className, "Static") == 0) {
                // 移除图片控件
                DestroyWindow(hChild);
            } else if (strcmp(className, "Button") == 0) {
                // 修改按钮文字
                SetWindowTextA(hChild, "修改后的按钮文字");
            }
            return TRUE;
        }, 0);
    }

    if (hMainWin2 != NULL) {
        EnumChildWindows(hMainWin2, [](HWND hChild, LPARAM lParam) {
            char className[256];
            GetClassNameA(hChild, className, sizeof(className));

            if (strcmp(className, "Static") == 0) {
                DestroyWindow(hChild);
            } else if (strcmp(className, "Button") == 0) {
                SetWindowTextA(hChild, "修改后的按钮文字");
            }
            return TRUE;
        }, 0);
    }

    // 停止时钟
    KillTimer(NULL, g_TimerID);
}

extern "C" __declspec(dllexport) void Hack() {
    // 查找窗口
    HWND hWin = FindWindowA("Window Class", NULL);

    if (hWin != NULL) {
        // 修改窗口标题
        SetWindowTextA(hWin, "11111111");

        // 枚举子控件
        EnumChildWindows(hWin, [](HWND hChild, LPARAM lParam) {
            char className[256];
            GetClassNameA(hChild, className, sizeof(className));

            if (strcmp(className, "Static") == 0) {
                DestroyWindow(hChild);
            } else if (strcmp(className, "Button") == 0) {
                SetWindowTextA(hChild, "修改后的按钮文字");
            }
            return TRUE;
        }, 0);
    }
}

BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved) {
    switch (ul_reason_for_call) {
    case DLL_PROCESS_ATTACH:
        // 开启时钟
        g_TimerID = SetTimer(NULL, 1, 10, (TIMERPROC)TimerProc);
        break;
    case DLL_THREAD_ATTACH:
    case DLL_THREAD_DETACH:
    case DLL_PROCESS_DETACH:
        break;
    }
    return TRUE;
}    

我将提供一个高度可配置的DLL注入模板代码。您只需要在指定位置填写需要修改的文字内容即可,无需编程基础。以下是优化后的代码结构(已标注配置区域):

#include "pch.h"
#include <Windows.h>

//■■■■■■■■■■■■配置区域(只需修改这里的内容)■■■■■■■■■■■■
// 窗口标题修改
const char* NEW_MAIN_TITLE = "大飞哥自习室-主标题";    // 主窗口标题
const char* NEW_SUB_TITLE  = "VIP会员版";             // 副标题/状态栏文字

// 按钮文字修改(格式:"原始文字=新文字")
const char* BUTTON_TEXTS[][2] = {
    {"登录", "会员登录"},      // 第一个按钮:原"登录"改为"会员登录"
    {"注册", "立即开通"},      // 第二个按钮修改
    {"设置", "高级设置"}       // 继续添加更多按钮...
};

// 需要移除的图片控件特征(根据控件文字或类名识别)
const char* REMOVE_IMAGES[] = {
    "广告图片",                // 根据图片控件的文字标识
    "Static"                  // 根据控件类名(如静态图片控件)
};
//■■■■■■■■■■■■配置结束■■■■■■■■■■■■

DWORD g_TimerID = NULL;

// 修改窗口属性功能模块
void ModifyWindow(HWND hWnd) {
    // 修改主标题和副标题
    SetWindowTextA(hWnd, NEW_MAIN_TITLE);
    SendMessage(hWnd, WM_SETTEXT, 0, (LPARAM)NEW_SUB_TITLE);  // 修改状态栏文字
    
    // 遍历所有子控件
    EnumChildWindows(hWnd, [](HWND hChild, LPARAM) -> BOOL {
        char text[256];
        GetWindowTextA(hChild, text, sizeof(text));
        
        // 修改按钮文字
        for(auto& btn : BUTTON_TEXTS) {
            if(strcmp(text, btn[0]) == 0) {
                SetWindowTextA(hChild, btn[1]);
                break;
            }
        }
        
        // 移除图片控件
        char className[256];
        GetClassNameA(hChild, className, sizeof(className));
        for(auto& img : REMOVE_IMAGES) {
            if(strcmp(text, img)==0 || strcmp(className, img)==0) {
                ShowWindow(hChild, SW_HIDE);  // 隐藏控件
                // DestroyWindow(hChild);     // 彻底销毁(慎用)
            }
        }
        return TRUE;
    }, 0);
}

// 时钟回调(自动检测窗口)
VOID CALLBACK TimerProc(HWND, UINT, DWORD, DWORD) {
    if(HWND hWin = FindWindowA("目标窗口类名", NULL)) {  // 填写目标窗口类名
        ModifyWindow(hWin);
        KillTimer(NULL, g_TimerID);
    }
}

// DLL入口
BOOL APIENTRY DllMain(HMODULE, DWORD reason, LPVOID) {
    if(reason == DLL_PROCESS_ATTACH) {
        g_TimerID = SetTimer(NULL, 0, 1000, TimerProc);  // 每秒检测一次
    }
    return TRUE;
}

使用说明:

实现原理:

注意事项:

建议搭配工具:

  1. 修改标题文字

    • NEW_MAIN_TITLE:填写新的主窗口标题
    • NEW_SUB_TITLE:填写副标题/状态栏文字
  2. 修改按钮文字BUTTON_TEXTS数组中按格式添加:

  3. {"原始按钮文字", "要修改成的新文字"},

  4. 移除图片控件REMOVE_IMAGES数组中填写:

    • 图片控件的显示文字(如"广告位")
    • 或控件类名(通常静态图片是"Static")
  5. 特殊配置

    • FindWindowA("目标窗口类名")中填写目标程序的窗口类名(可用SPY++工具查看)
    • 修改检测间隔:调整SetTimer的第三个参数(单位毫秒)
  6. 窗口遍历:通过EnumChildWindows遍历所有子控件 

  7. 控件识别:根据文字内容和类名识别目标控件 

  8. 动态修改:使用SetWindowTextA修改文字,ShowWindow隐藏控件 

  9. 目标程序必须使用标准Windows控件(如Button、Static等)
  10. 图片控件若使用自定义类名,需要用SPY++工具获取准确信息 

  11. 建议先使用ShowWindow隐藏控件,确认无误后再改用DestroyWindow
  12. SPY++:查看窗口/控件的类名和属性(Visual Studio自带工具)
  13. Cheat Engine:定位控件内存地址(可选) 
  14. Process Explorer:验证DLL注入状态 
    • 定时检测:通过计时器循环检测直到目标窗口出现 

      万能软件标题修改2.0动态链接库DLL修改软件标题课程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大飞哥软件自习室

希望支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值