38.控制功能实现

news2024/11/23 11:45:07

上一个内容:37.添加简易的调试功能

以 37.添加简易的调试功能 它的代码为基础进行修改

效果图:

下图红框位置的功能实现

Dlls项目中添加一个Dialog

Dialog如下

然后给它添加一个类,MFC添加的类可能会报错添加 #include "afxdialogex.h" 这一句就好了

然后把类引入到Dlls.文件中,并且创建下图红框中的两个变量

然后dll实现代码如下图:


// CDllsApp 构造

CDllsApp::CDllsApp()
{
    // TODO:  在此处添加构造代码,
    // 将所有重要的初始化放置在 InitInstance 中
    isShowWindow = false;
}


// 唯一的 CDllsApp 对象

CDllsApp theApp;
CDllsApp *PtheApp;

// CDllsApp 初始化
HHOOK keyHook;
LRESULT CALLBACK KeyCallBack(int nCode, WPARAM w, LPARAM l);
BOOL CDllsApp::InitInstance()
{
    CWinApp::InitInstance();
    PtheApp = this;
    keyHook = SetWindowsHook(WH_KEYBOARD, KeyCallBack);
    AfxMessageBox(L"注入成功!");
    return TRUE;
}

LRESULT CALLBACK KeyCallBack(int nCode, WPARAM w, LPARAM l) {
    if ((l&(1<<31)) == 0) {
        switch (w)
        {
        case VK_HOME: {
            if (PtheApp->wndMain == NULL) {
                PtheApp->wndMain = new CWndMain();
                PtheApp->wndMain->Create(IDD_WNDMAIN);
            }
            PtheApp->isShowWindow = !PtheApp->isShowWindow;
            PtheApp->wndMain->ShowWindow(PtheApp->isShowWindow);
            break;
        }
        default:
            break;
        }
    }
    return CallNextHookEx(keyHook, nCode, w, l);
}

CWndINJ.cpp文件中代码修改:

void CWndINJ::OnNMDblclkList1(NMHDR* pNMHDR, LRESULT* pResult)
{
    LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
    // TODO: 在此添加控件通知处理程序代码
    *pResult = 0;
    int index = pNMItemActivate->iItem;
    if (index < 0)return;

    CString GamePath = ExeLst.GetItemText(index, 2);
    CString GameExe = ExeLst.GetItemText(index, 1);
    CString GameCmds = ExeLst.GetItemText(index, 3);
    CString GameDlls = ExeLst.GetItemText(index, 4);

    UpdateData(TRUE);
    PROCESS_INFORMATION prinfo{};
    bool Pause = B_PAUSE;

    if (B_INJCET && (GameDlls.GetLength() > 1)) {
        Pause = true;
    }

    m_INJCET.StartProcess(GameExe, GamePath, GameCmds.GetBuffer(), &prinfo, Pause);
    if (B_INJCET && (GameDlls.GetLength() > 1)) {
        m_INJCET.CreateRemoteData(prinfo.hProcess, GameExe, GameDlls);
    }

    if (B_DEBUG)
    {
        PROCESS_INFORMATION odinfo{};
        //F:\其它\OllyDbg\Ollydbg.exe - p 4760
        CString dbgExe, dbgPath, dbgCmds;
        dbgExe = L"F:\\其它\\OllyDbg\\Ollydbg.exe";
        dbgPath = L"F:\\其它\\OllyDbg\\";
        dbgCmds.Format(L"%s -p %d", dbgExe, prinfo.dwProcessId);
        m_INJCET.StartProcess(dbgExe, dbgPath, dbgCmds.GetBuffer(), &odinfo, false);
    }

    if (B_PAUSE) {
        AfxMessageBox(L"按下确认,进程开始执行!");
    }

    ResumeThread(prinfo.hThread);

    // 用来指定创建时进程的主窗口的窗口工作站、桌面、标准句柄和外观。
    // STARTUPINFO si{};
    // si.cb = sizeof(si);



    //STARTUPINFO si{};
    //si.cb = sizeof(si);
    //CreateProcess(dbgExe,
    //    dbgExe.GetBuffer(),
    //    NULL, NULL,
    //    false,
    //    // 新进程的主线程处于挂起状态创建,在调用 ResumeThread 函数之前不会运行。
    //    0,
    //    NULL,
    //    dbgPath,
    //    &si,
    //    &odinfo
    //);


    //ResumeThread(odinfo.hThread);
 //m_INJCET.CodeRemoteData(&_data);
    
    /**
        CreateProcess(GameExe,
        GameCmds.GetBuffer(),
        NULL,NULL,
        FALSE,
        // 新进程的主线程处于挂起状态创建,在调用 ResumeThread 函数之前不会运行。
        CREATE_SUSPENDED,
        NULL,
        GamePath,
        &si,
        &prinfo
        );
    */

    /** 方式一调用api
        CStringA GameExeA;
        GameExeA = GameExe;
        PLOADED_IMAGE image =  ImageLoad(GameExeA, NULL);
        DWORD dEntryPoint = image->FileHeader->OptionalHeader.AddressOfEntryPoint;
        CString wTxt;
        wTxt.Format(L"%X", dEntryPoint);
        AfxMessageBox(wTxt);
        ImageUnload(image)
    */

    /** 方式二(要在32位环境下运行)
    void* image = _imageload(GameExe.GetBuffer());
    IMAGE_DOS_HEADER* dosHeader = (IMAGE_DOS_HEADER*)image;
    unsigned PEAddress =  dosHeader->e_lfanew + (unsigned)image;
    IMAGE_NT_HEADERS* ntHeader = (IMAGE_NT_HEADERS*)PEAddress;
    DWORD dEntryPoint = ntHeader->OptionalHeader.AddressOfEntryPoint;
    CString wTxt;
    wTxt.Format(L"%X", dEntryPoint);
    AfxMessageBox(wTxt);
    _unloadimage(image);
    */
    //LPVOID adrRemote = VirtualAllocEx(prinfo.hProcess, 0, 0x3000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);

    //SIZE_T lwt;

    //WriteProcessMemory(prinfo.hProcess, adrRemote, INJECTCode, 0x200, &lwt);

    //CString wTxt;
    //wTxt.Format(L"%X", adrRemote);
    //AfxMessageBox(wTxt);
    // 让游戏继续运行
    //m_INJCET.CreateRemoteData(prinfo.hProcess, GameDlls.GetBuffer());
    
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM构建的校园失眠与压力管理系统的设计与实现【附源码】

毕业设计(论文) 题目&#xff1a;基于SSM构建的校园失眠与压力管理系统的设计与实现 二级学院&#xff1a; 专业(方向)&#xff1a; 班 级&#xff1a; 学 生&#xff1a; 指导教师&a…

shell 脚本的部分指令和操作符

终端输入两个数&#xff0c;判断两数是否相等&#xff0c;如果不相等&#xff0c;判断大小关系 2.已知网址www.hqyj.com&#xff0c;使用expr截取出www、hqyj、com&#xff0c;不能使用cut&#xff0c;不能出现数字

C++ 基础:指针和引用浅谈

指针 基本概念 在C中&#xff0c;指针是存储其他变量的内存地址的变量。 我们在程序中声明的每个变量在内存中都有一个关联的位置&#xff0c;我们称之为变量的内存地址。 如果我们的程序中有一个变量 var&#xff0c;那么&var 返回它的内存地址。 int main() {int var…

Stable Diffusion 3 正式开源,超强文生图模型 SD3-M 上线,赶紧来试试吧!

前言 我们都知道 Stable Diffusion 3 是一款强大的文生图模型&#xff0c;拥有20亿参数&#xff0c;因其高效的推理速度和卓越的生成效果而备受瞩目。 近日&#xff0c;Stability AI在推特上宣布正式开源了 Stable Diffusion 3 Medium&#xff08;SD3-M&#xff09; 权重&…

住宅IP代理服务终极指南:增强安全性和可访问性

在当今的数字安装程序中&#xff0c;隐私和可访问性对于企业和个人都至关重要。满足这些需求的一个强大工具是住宅 IP 代理服务。这些服务为用户提供住宅 IP 地址&#xff0c;这些地址是互联网产品 (ISP) 计算房主的真实 IP。在本综合指南中&#xff0c;我们将探讨住宅 IP 代理…

Chrome插件:​Vue.js Devtools 高效地开发和调试

在现代前端开发中&#xff0c;Vue.js因其灵活性和性能优势&#xff0c;受到越来越多开发者的青睐。然而&#xff0c;随着项目规模的扩大&#xff0c;调试和优化变得愈发复杂。幸运的是&#xff0c;Vue.js Devtools的出现&#xff0c;为开发者提供了一套强大的工具集&#xff0c…

【道合顺展会预告】2024国际传感器仪器仪表物联网长沙展览会!

传感器技术作为万物互联的基石&#xff0c;正以前所未有的速度驱动着全球各行各业的转型升级。在此背景下&#xff0c;2024国际传感器&仪器仪表&物联网展览会将于6月28日至30日在长沙盛大启幕&#xff0c;道合顺传感将携公司最新技术及科研成果参加展览会&#xff0c;并…

运维.Linux下执行定时任务(上:Cron简介与用法解析)

运维专题 Linux下执行定时任务&#xff08;上&#xff1a;Cron简介与用法解析&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAd…

Hadoop3:MapReduce中的Reduce Join和Map Join

一、概念说明 学过MySQL的都知道&#xff0c;join和left join 这里的join含义和MySQL的join含义一样 就是对两张表的数据&#xff0c;进行关联查询 Hadoop的MapReduce阶段&#xff0c;分为2个阶段 一个Map&#xff0c;一个Reduce 那么&#xff0c;join逻辑&#xff0c;就可以…

Vlog视频如何剪辑 Vlog视频剪辑逻辑 视频剪辑制作教程

剪出感觉、剪出情绪&#xff0c;给Vlog视频注入高级氛围感。不用购买昂贵的前期设备&#xff0c;正确地剪辑思维搭配一款好用的视频剪辑软件&#xff0c;你也能剪出令人惊艳的Vlog作品。请收藏本文并反复练习&#xff0c;相信在不久的将来&#xff0c;您的作品必会让人眼前一亮…

宣告 adsb.exposed - 基于 ClickHouse 的 ADS-B 航班数据交互式可视化和分析

本文字数&#xff1a;10340&#xff1b;估计阅读时间&#xff1a;26 分钟 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse 上海首届 Meetup 讲师招募中&#xff0c;欢迎讲师在文末扫码报名&#xff01; 也许你已…

开发RpcProvider的网络服务

首先更改src的CMakeLists.txt的内容为&#xff1a; #当前目录的所有源文件放入SRC_LIST aux_source_directory(. SRC_LIST)#生成SHARED动态库 #add_library(mprpc SHARED ${SRC_LIST})#由于muduo是静态库&#xff0c;为了使用muduo&#xff0c;将mprpc也生成为静态库 add_libr…

【Docker】镜像

目录 1. 镜像拉取 2. 镜像查询 3. 镜像导出 4. 镜像上传 5. 镜像打标签 6. 镜像上推 7. 镜像删除 8. 镜像运行及修改 8.1 在registry 节点运行 mariadb 镜像&#xff0c;将宿主机 13306 端口作为容器3306 端口映射 8.2 查看容器ID 8.3 进入容器 8.4 创建数据库xd_d…

第三方软件测评中心▏软件系统测试详情介绍

软件系统测试是指对软件系统的功能、性能、安全等方面进行全面测试和评估的过程。在软件开发生命周期的不同阶段&#xff0c;通过各种测试手段和工具&#xff0c;对软件系统进行验证和确认&#xff0c;以确保软件系统的质量和可靠性。 软件系统测试的内容包括以下几个方面&…

基于4G工业路由器的连锁品牌店铺组网监测

基于4G工业路由器的连锁品牌店铺组网监测是智慧城市建设中至关重要的任务&#xff0c;它涉及到营运管理等多方面&#xff0c;应用物联网技术可确保店铺运营的高效、安全和可靠。 连锁品牌店铺遍布城市各领域&#xff0c;甚至跨城市部署&#xff0c;分布广泛。这对集团总部的管…

用定时器T1中断控制两个LED以不同周期闪烁

#include<reg51.h> // 包含51单片机寄存器定义的头文件 sbit D1P2^0; //将D1位定义为P2.0引脚 sbit D2P2^1; //将D2位定义为P2.1引脚 unsigned char Countor1; //设置全局变量&#xff0c;储存定时器T1中断次数 unsigned char Countor2; //设置全局变量&#xff0c;储…

Python中的并发编程(5)PyQt 多线程

PyQt 多线程 1 卡住的计时器 我们定义了一个计时器&#xff0c;每秒钟更新一次显示的数字。此外我们定义了一个耗时5秒的任务oh_no&#xff0c;和按钮“危险”绑定。 当我们点击“危险”按钮时&#xff0c;程序去执行oh_no&#xff0c;导致显示停止更新了。 import sys im…

AI早班车2024.6.25

全球AI新闻速递 1.高通&#xff1a;开放 AI 模型&#xff0c;帮助开发者打造骁龙 X Elite 平台智能应用。 2.OpenAI&#xff1a;收购数据库分析公司Rockset。 3.大众海外版车型支持 ChatGPT。 4.乐聚夸父人形机器人&#xff0c;搭载华为云盘古具身智能大模型。 5.微软正努力…

【吊打面试官系列-Mysql面试题】你可以用什么来确保表格里的字段只接受特定范围里的值?

大家好&#xff0c;我是锋哥。今天分享关于 【你可以用什么来确保表格里的字段只接受特定范围里的值?】面试题&#xff0c;希望对大家有帮助&#xff1b; 你可以用什么来确保表格里的字段只接受特定范围里的值? 答&#xff1a;Check 限制&#xff0c;它在数据库表格里被定义&…

策略模式-通过枚举newInstance替代工厂

策略模式-使用枚举newInstance 前言一、枚举类&#xff1a;MarkCheckDataTypeEnum二、抽象类&#xff1a;AbstractMarkChecker三、检查类&#xff1a;MarkPeopleChecker四、demo演示总结 前言 很久没写文章了~~ 吐槽下&#xff1a;入职新公司后&#xff0c;基本在搬砖&#xf…