67.利用FreeLibrary函数实现无痕注入的核心代码
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:易道云信息技术研究院
上一个内容: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();}