搜尋

跑跑

返回清單
切換到指定樓層
通知這文章過時或找檔案 發表主題

分享一份過NGS跑跑檢測!C++源碼+成品DLL供調用+多功能20181112跑跑

[複製連結]
1
116.com ( Lv.30 大天使 ) 發表於 2018-11-13 19:33:59 | 只看該作者 回覆獎勵 |降序瀏覽 |閱讀模式


//需加載進卡丁車,一般在卡丁車登錄界面調用【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);

下載

所有站內附件皆會附上安全掃描報告
請會員查看純淨度百分比後判斷使用



相關檔案須知:
取得檔案前,請先詳細閱讀文章內容
避免不必要錯誤與誤會發生。
也可多參考文章討論樓層內容
了解附件檔案相關討論資訊。









大家正在看啥


收藏收藏 分享文章到FB上分享
回覆 使用道具 檢舉
複製專屬你的推廣連結:發至FB與各論壇宣傳:累積點數換GP商品 & 藍鑽
每五點閱率就可以兌換藍鑽積分或遊戲點卡 夢遊推廣文章換GP商品
2
david90183 ( Lv.20 天使 ) 發表於 2018-11-13 22:09:05 | 只看該作者
雖然看不懂源碼,但是還給大大一個讚!!!
回覆 使用道具 檢舉
3
david90183 ( Lv.20 天使 ) 發表於 2018-11-13 22:09:39 | 只看該作者
雖然看不懂源碼,但還是要給大大一個讚!!!!

回覆 使用道具 檢舉
4
a4280239 ( Lv.20 天使 ) 發表於 2018-12-12 19:52:18 | 只看該作者
请问这个可以用在国服吗

回覆 使用道具 檢舉
5
min722922 ( Lv.10 見習生 ) 發表於 2019-2-24 02:14:42 | 只看該作者
跑跑  跑起来
回覆 使用道具 檢舉

你需要登入後才可以回覆 登入 | 加入會員

本版積分規則

Copyright (C) 2010-2020 夢遊電玩論壇

廣告合作:請直接聯繫我們,並附上您預刊登位置的預算。  

快速回覆 返回頂端 返回清單