免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:易道云信息技术研究院
上一个内容:66.FreeLibrary隐藏模块
以 65.破坏特征码防止内存定位查杀 它的代码为基础进行修改
效果图:
实现代码:
Dlls.cpp文件的修改:
int CDllsApp::ExitInstance()
{
CWinApp::ExitInstance();
AfxMessageBox(L"卸载成功");
return TRUE;
}
Dlls.h文件的修改:
// Dlls.h: Dlls DLL 的主标头文件
//
#pragma once
#ifndef __AFXWIN_H__
#error "在包含此文件之前包含 'pch.h' 以生成 PCH"
#endif
#include "resource.h" // 主符号
#include "CWndMain.h"
// CDllsApp
// 有关此类实现的信息,请参阅 Dlls.cpp
//
class CDllsApp : public CWinApp
{
public:
CDllsApp();
// 重写
public:
virtual BOOL InitInstance();
virtual int ExitInstance();
CWndMain* wndMain;
BOOL isShowWindow;
DECLARE_MESSAGE_MAP()
};
CWndINJ.cpp文件的修改:
void CWndINJ::OnBnClickedButton1()
{
// 如果 FreeLibrary 没作用,把编译好的程序换个目录试试。没有任何文档说明这是怎样一回事,可能是硬盘的问题
auto hMod = LoadLibrary(L"Dlls.dll");
PIMAGE_DOS_HEADER PDosHeader = (PIMAGE_DOS_HEADER)hMod;
PIMAGE_NT_HEADERS PNTHead = (PIMAGE_NT_HEADERS)((unsigned)hMod + PDosHeader->e_lfanew);
PIMAGE_OPTIONAL_HEADER POPHEader = (PIMAGE_OPTIONAL_HEADER)(&PNTHead->OptionalHeader);
DWORD dImageSize = POPHEader->SizeOfImage;
DWORD dOld;
LPVOID dllCode = VirtualAlloc(0, dImageSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
VirtualProtect(hMod, dImageSize, PAGE_EXECUTE_READWRITE, &dOld);
memcpy(dllCode, hMod, dImageSize);
FreeLibrary(hMod);
LPVOID dllCodeNew = VirtualAlloc(hMod, dImageSize, MEM_COMMIT|MEM_RESERVE, PAGE_EXECUTE_READWRITE);
memcpy(dllCodeNew, dllCode, dImageSize);
VirtualFree(dllCode, 0, MEM_RELEASE);
// TODO: 在此添加控件通知处理程序代码
/*ExeLst.InsertItem(0, L"DNF");
ExeLst.SetItemText(0, 1, L"dlls.dll");*/
用来指定创建时进程的主窗口的窗口工作站、桌面、标准句柄和外观。
//STARTUPINFO si{};
//si.cb = sizeof(si);
//PROCESS_INFORMATION prinfo{};
//CreateProcess(L"C:\\Users\\am\\Desktop\\易道云\\游戏保护\\练手游戏\\初级\\JX2\\Sword2.exe",
// NULL,NULL,NULL,
// FALSE,
// // 新进程的主线程处于挂起状态创建,在调用 ResumeThread 函数之前不会运行。
// CREATE_SUSPENDED,
// NULL,
// L"C:\\Users\\am\\Desktop\\易道云\\游戏保护\\练手游戏\\初级\\JX2\\",
// &si,
// &prinfo
// );
///**
// 注入功能写在这里(CreateProcess与ResumeThread函数之间)
//*/
让游戏继续运行
//ResumeThread(prinfo.hThread);
wndAddGame.Init(this);
wndAddGame.DoModal();
}