找回密码
 立即注册
GTA5修改器.风灵月影生化危机7修改器.风灵月影三国志13修改器.风灵月影讨鬼传2修改器.风灵月影猎天使魔女修改器.风灵月影
刺客信条修改器虐杀原形2修改器.风灵月影看门狗2修改器.风灵月影鬼泣5修改器.风灵月影上古卷轴5修改器
查看: 52|回复: 0

龙之谷多开VC6源码 废除CreateMutexA互斥体

[复制链接]

2604

主题

2627

帖子

8001

积分

论坛元老

Rank: 8Rank: 8

积分
8001
发表于 2017-7-3 21:37:17 | 显示全部楼层 |阅读模式
01.jpg
原理是 废除 CreateMutexA 函数 防止游戏创建互斥体

HOOK 的函数 修改方法 值得学习。。。
include <windows.h>
#include <process.h>


PIMAGE_DOS_HEADER                        pDosHeader;
PIMAGE_NT_HEADERS                        pNTHeaders;
PIMAGE_OPTIONAL_HEADER                pOptHeader;
PIMAGE_IMPORT_DESCRIPTOR        pImportDescriptor;
PIMAGE_THUNK_DATA                        pThunkData;
PIMAGE_IMPORT_BY_NAME                pImportByName;
HMODULE                                                hMod;



DWORD WINAPI MyGetLastError();

DWORD * addr        = (DWORD *)GetLastError;                //原函数的入口地址
DWORD * myaddr        = (DWORD *)MyGetLastError;                //自定义函数入口地址


void ThreadProc(void *param);//线程函数



BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved)
{
    if(fdwReason==DLL_PROCESS_ATTACH)     
                _beginthread(ThreadProc,0,NULL);     
        
    return TRUE;
}



void ThreadProc(void *param)
{
        hMod = GetModuleHandle(NULL);        //获取自身实例句柄
        
        pDosHeader = (PIMAGE_DOS_HEADER)hMod;
        pNTHeaders = (PIMAGE_NT_HEADERS)((BYTE *)hMod + pDosHeader->e_lfanew);
        pOptHeader = (PIMAGE_OPTIONAL_HEADER)&(pNTHeaders->OptionalHeader);
        
        pImportDescriptor = (PIMAGE_IMPORT_DESCRIPTOR)((BYTE *)hMod + pOptHeader->DataDirectory[1].VirtualAddress);
        
    while(pImportDescriptor->FirstThunk)//遍历ITA表
    {
                char * dllname = (char *)((BYTE *)hMod + pImportDescriptor->Name);
               
                pThunkData = (PIMAGE_THUNK_DATA)((BYTE *)hMod + pImportDescriptor->OriginalFirstThunk);
               
                int num = 1;
                while(pThunkData->u1.Function)
                {
                        PDWORD lpAddr  = (DWORD *)((BYTE *)hMod + (DWORD)pImportDescriptor->FirstThunk) +(num-1);
                        
                        //找到要HOOK的API
                        if((*lpAddr) == (int)addr)
                        {
                                //远程注入自己的函数
                                DWORD dwOLD;
                                MEMORY_BASIC_INFORMATION mbi;
                                VirtualQuery(lpAddr,&mbi,sizeof(mbi));
                                VirtualProtect(lpAddr,sizeof(DWORD),PAGE_READWRITE,&dwOLD);
                                
                                WriteProcessMemory(GetCurrentProcess(),
                                        lpAddr, &myaddr, sizeof(DWORD), NULL);
                                VirtualProtect(lpAddr,sizeof(DWORD),dwOLD,0);
                                break;
                        }

                        num++;
                        pThunkData++;
                }
               
                pImportDescriptor++;
    }
}

//自定义函数体
DWORD WINAPI MyGetLastError()
{
        //这个地方可以写出对这个API函数的处理代码
        //对于互斥体对象限制双开的,例如“龙之谷”,则对返回错误信息进行设置为0,
        //0表示没有错误,也就表示CreateMutexA调用成功
    return  0;
}

龙之谷多开源码.zip (49.31 KB, 下载次数: 0, 售价: 100 金钱)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表