开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 58292|回复: 22
收起左侧

[C#源码] 分享一份过NGS检测!C++源码+成品DLL供调用

[复制链接]
头像被屏蔽
结帖率:0% (0/5)
发表于 2018-11-13 18:51:06 | 显示全部楼层 |阅读模式   山东省济南市
无论什么游戏只要是NGS检测全部干掉!
以下是C++源码
拿跑跑卡丁车做例子
//需加载进卡丁车,一般在卡丁车登录界面调用【BypassNexonGameSecurity】第一个参数传递BlackCipher的进程ID
//cpp源码 .
#include "stdafx.h"
#include <string>
#include <TlHelp32.h>
#include "VMProtectSDK.h"
using namespace std;
bool __stdcall BypassNexonGameSecurity(ULONG pid/*=g_BlackCipherPID*/) {

    VMProtectBegin("BypassNexonGameSecurity");
    //if (*(PDWORD)0xF4C127 != 0x2ADDE4BB)
    //{
    //    MyDbgFun("notcrc,exit");
    //    TerminateProcess(OpenProcess(PROCESS_ALL_ACCESS, NULL, GetCurrentProcessId()), NULL);
    //    return false;
    //}

    typedef struct _MODULEINFO {
        LPVOID lpBaseOfDll;
        DWORD  SizeOfImage;
        LPVOID EntryPoint;
    } MODULEINFO, *LPMODULEINFO;
    typedef BOOL(WINAPI* GetModuleInformation_t)(HANDLE hProcess,
        HMODULE hModule,
        LPMODULEINFO lpmodinfo,
        DWORD  cb);

    typedef DWORD(WINAPI* GetMappedFileNameW_t)(HANDLE hProcess,
        LPVOID lpv,
        LPTSTR lpFilename,
        DWORD  nSize);

    typedef NTSTATUS(NTAPI *NtQueryInformationThread_)(HANDLE ThreadHandle, THREADINFOCLASS ThreadInformationClass, PVOID ThreadInformation,
        ULONG ThreadInformationLength, PULONG          ReturnLength);

    typedef NTSTATUS(NTAPI* NtQueryInformationProcess_t)(HANDLE           ProcessHandle, PROCESSINFOCLASS ProcessInformationClass,
        PVOID            ProcessInformation, ULONG            ProcessInformationLength, PULONG           ReturnLength);
    typedef NTSTATUS(NTAPI* NtWriteVirtualMemory_t)(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToRead, PULONG NumberOfBytesReaded);
    typedef NTSTATUS(NTAPI* NtReadVirtualMemory_t)(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToRead, PULONG NumberOfBytesReaded);

    static NtReadVirtualMemory_t _NtReadVirtualMemory = reinterpret_cast<NtReadVirtualMemory_t>(GetProcAddress(GetModuleHandle(TEXT("ntdll")), "NtReadVirtualMemory"));

    static NtWriteVirtualMemory_t _NtWriteVirtualMemory = reinterpret_cast<NtWriteVirtualMemory_t>(GetProcAddress(GetModuleHandle(TEXT("ntdll")), "NtWriteVirtualMemory"));

    static NtQueryInformationProcess_t _NtQueryInformationProcess = reinterpret_cast<NtQueryInformationProcess_t>(GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")), "NtQueryInformationProcess"));

    static GetMappedFileNameW_t MyGetMappedFileNameW = reinterpret_cast<GetMappedFileNameW_t>(GetProcAddress(LoadLibrary(TEXT("Psapi.dll")), "GetMappedFileNameW"));

    static GetModuleInformation_t MyGetModuleInformation = reinterpret_cast<GetModuleInformation_t>(GetProcAddress(LoadLibrary(TEXT("Psapi.dll")), "GetModuleInformation"));

    static NtQueryInformationThread_ MyNtQueryInformationThread = reinterpret_cast<NtQueryInformationThread_>(GetProcAddress(GetModuleHandle(TEXT("ntdll.dll")), "NtQueryInformationThread"));

    HANDLE hTdSnap, hpss, hTd; LPVOID lpbaseAddress; LONG status;
    PVOID startaddr = NULL;
    THREADENTRY32 te32 = { 0 };
    CONTEXT    ctx = { 0 };
    BYTE phcode[10] = { 0x68, 0x00, 0x00, 0x00, 0x10,
        0xE9, 0x00, 0x00, 0x00, 0x00 };
    WCHAR sz_modulefilepath[MAX_PATH] = { 0 };
    memset(&te32, 0, sizeof(te32));
    te32.dwSize = sizeof(THREADENTRY32);
    FARPROC lpSleep = GetProcAddress(GetModuleHandle(TEXT("Kernel32")), "Sleep");
    hpss = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
    if (NULL == hpss)    { return false; }
    MODULEINFO pModuleInfo = { 0 };
    if (!MyGetModuleInformation(hpss, NULL, &pModuleInfo, sizeof(pModuleInfo)))    { return false; }
    if (!pModuleInfo.EntryPoint)    { return false; }
    lpbaseAddress = VirtualAllocEx(hpss, NULL, 0x1000, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    if (NULL == lpbaseAddress)    { return false; }
    *(DWORD *)((DWORD)&phcode + 6) = (DWORD)lpSleep - (DWORD)lpbaseAddress - 10;   
    if (_NtWriteVirtualMemory(hpss, lpbaseAddress, (LPVOID)&phcode, sizeof(phcode), NULL)){ return false; }
    hTdSnap = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD, 0);
    if (hTdSnap == INVALID_HANDLE_VALUE)    { return false; }
    BOOL bNext = Thread32First(hTdSnap, &te32);
    while (bNext)
    {
        if (te32.th32OwnerProcessID == pid)
        {
            hTd = OpenThread(THREAD_ALL_ACCESS, FALSE, te32.th32ThreadID);
            if (NULL == hTd)            {                return false;            }
            else
            {

                status = MyNtQueryInformationThread(hTd,
                    ThreadQuerySetWin32StartAddress,
                    &startaddr, sizeof(startaddr), NULL);
                if (STATUS_SUCCESS != status)
                {
                    CloseHandle(hTd);
                    return   false;
                }
                else
                {
                    if (startaddr == pModuleInfo.EntryPoint)
                    {
                        MyGetMappedFileNameW(hpss, startaddr, sz_modulefilepath, MAX_PATH);
                        wstring mfpath(sz_modulefilepath);
                        if (mfpath.find(TEXT("BlackCipher.aes")) != -1)
                        {
                            SuspendThread(hTd);
                            ctx.ContextFlags = CONTEXT_ALL | CONTEXT_CONTROL;
                            GetThreadContext(hTd, &ctx);
                            if (!ctx.Dr1)
                            {
                                ctx.Dr1 = 10086;
                                ctx.Eip = (DWORD)lpbaseAddress;
                                ctx.ContextFlags = CONTEXT_ALL | CONTEXT_CONTROL;
                                SetThreadContext(hTd, &ctx);
                            }
                            ResumeThread(hTd);
                        }
                    }
                }
            }
            CloseHandle(hTd);
        }
        bNext = Thread32Next(hTdSnap, &te32);
    }
    CloseHandle(hTdSnap);
    CloseHandle(hpss);
    VMProtectEnd();
    return true;
}

调用方法:

//1      BypassNexonGameSecurity              0F1E1280      0     

//必须注入游戏后调用此函数

//动态调用,用完即删,不占用DLL模块。也可做内存加载

typedef bool(WINPAI *BypassNGS)(LONG pid);

HANDLE hLib=LoadLibrary(TEXT("bypassngs.dll"));

BypassNGS myfpProc=(BypassNGS)GetProcAddress(hLib,"BypassNexonGameSecurity");

if(!myfpProc(/*BlackCipherPID*/))
{
AfxMessageBox(TEXT("过检测失败"));

}

FreeLibrary(hLib);


1.这里只Sleep了一个入口线程,会卡NGS进程游戏关闭后需自己关
2.成品DLL限制国服可用,其他服全部掉线。想在台服用就自己改。
3.只要操作命名管道的线程存在其他线程都可Sleep无碍   




评分

参与人数 1好评 +1 精币 +1 收起 理由
赵六 + 1 + 1 支持开源~!感谢分享

查看全部评分

发表于 2023-1-30 22:38:01 | 显示全部楼层   陕西省宝鸡市

这个方法已经在新版和谐了。
回复 支持 反对

使用道具 举报

发表于 2022-5-13 09:54:38 | 显示全部楼层   山东省烟台市
头文件呢
回复 支持 反对

使用道具 举报

结帖率:69% (9/13)

签到天数: 3 天

发表于 2021-4-25 23:37:25 | 显示全部楼层   湖北省武汉市
魔幻手机 发表于 2019-5-15 01:20
兄弟。我加你QQ了,请教过ngs检测辅Zhu跑跑卡丁车辅Zhu,兄弟好 谢谢你  。

兄弟跑跑卡丁车NGS过了吗
回复 支持 反对

使用道具 举报

结帖率:69% (9/13)

签到天数: 3 天

发表于 2021-4-25 23:36:52 | 显示全部楼层   湖北省武汉市
易语言过NGS有吗楼主
回复 支持 反对

使用道具 举报

发表于 2021-1-12 17:17:52 | 显示全部楼层   上海市上海市
66666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2020-12-9 17:35:00 | 显示全部楼层   山东省德州市
和客家话客家话刻录机和联合建立
回复 支持 反对

使用道具 举报

发表于 2020-12-9 17:34:20 | 显示全部楼层   山东省德州市
恐惧优酷科技含量还将建立健康
回复 支持 反对

使用道具 举报

发表于 2020-9-10 09:57:55 | 显示全部楼层   上海市上海市
6666666666666666666666666666666
回复 支持 反对

使用道具 举报

发表于 2020-7-23 08:31:16 | 显示全部楼层   上海市上海市
来看看来看看来看看来看看来看看来看看来看看
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

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