开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

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


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

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

查看: 59527|回复: 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 支持开源~!感谢分享

查看全部评分

头像被屏蔽
结帖率:0% (0/5)
沙发
 楼主| 发表于 2018-11-13 18:52:18 | 只看该作者   山东省济南市
觉得不错,可以顶下喔,原创作品
回复 支持 反对

使用道具 举报

结帖率:0% (0/1)
板凳
发表于 2019-1-14 05:39:29 高大上手机用户 | 只看该作者   河南省新乡市
大话检测能做吗

点评

  山东省济南市  发表于 2019-5-15 14:10
回复 支持 反对

使用道具 举报

结帖率:17% (2/12)
地板
发表于 2019-1-15 16:57:28 | 只看该作者   江苏省苏州市
觉得不错,可以顶下喔,原创作品
回复 支持 反对

使用道具 举报

地下
发表于 2019-3-22 18:38:05 高大上手机用户 | 只看该作者   河北省石家庄市
找你做个东西,加q2455146梦幻SF游戏让游戏里的服务端崩溃会吗?
回复 支持 反对

使用道具 举报

6
发表于 2019-3-30 22:17:30 | 只看该作者   福建省福州市
找你做个东西,加q2837821179。谢谢了。

点评

可以   山东省济南市  发表于 2019-5-15 14:10
回复 支持 反对

使用道具 举报

7
发表于 2019-4-8 04:55:41 | 只看该作者   河北省石家庄市
有做NGS多开检测这块吗

点评

可以   山东省济南市  发表于 2019-5-15 14:10
回复 支持 反对

使用道具 举报

8
发表于 2019-5-15 01:20:24 | 只看该作者   广东省广州市
兄弟。我加你QQ了,请教过ngs检测辅Zhu跑跑卡丁车辅Zhu,兄弟好 谢谢你  。
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)
9
发表于 2019-5-15 10:06:52 | 只看该作者   广西壮族自治区贺州市
好东西 收藏了
回复 支持 反对

使用道具 举报

结帖率:33% (2/6)
10
发表于 2019-5-20 17:22:47 | 只看该作者   四川省成都市
看看老帖子了
回复 支持 反对

使用道具 举报

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

本版积分规则 致发广告者

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

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

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