冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 6287|回覆: 1
打印 上一主題 下一主題

[開源] NexonGameSecurity(BlackCipher) Bypass

[複製鏈接]

3

主題

1

好友

3

積分

新手上路

Rank: 1

UID
190017
帖子
41
主題
3
精華
0
積分
3
楓幣
1838
威望
2
存款
0
贊助金額
0
推廣
0
GP
4
閱讀權限
10
性別
保密
在線時間
22 小時
註冊時間
2017-5-30
最後登入
2021-4-29

Android勳章

跳轉到指定樓層
1
發表於 2017-11-27 23:59:49 |只看該作者 |倒序瀏覽
  • #include <stdint.h>
  • #include <Shlwapi.h>
  • #pragma comment(lib, "Shlwapi.lib")
  • #define BLACKCIPHER_EXE "BlackCipher.aes"
  • typedef BOOL(WINAPI* CreateProcessWPtr)(LPCWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPCWSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION);
  • CreateProcessWPtr _CreateProcessW = (CreateProcessWPtr)GetProcAddress(GetModuleHandleA("Kernel32.dll"), "CreateProcessW");
  • BOOL WINAPI CreateProcessW_Hook(LPCWSTR lpApplicationName, LPWSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes, LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnvironment, LPCWSTR lpCurrentDirectory, LPSTARTUPINFOW lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation)
  • {
  •         size_t chars_converted = 0;                             // used by wcstombs_s and mbstowcs_s
  •         char application_name_mb[512 = { "(nullptr)\0" };      // multibyte versions of the strings in the params
  •         char command_line_mb[512 = { "(nullptr)\0" };
  •         char current_directory_mb[512 = { "(nullptr)\0" };
  •         BOOL res;
  •         char buf[MAX_PATH = { 0 };                             // used by GetModuleNameA
  •         PSTR cmd_line_end;                                      // pointer to the double quote after BlackCipher.aes in the cmd line
  •         size_t cmd_line_end_size;                               // size of the buffer after cmd_line_end
  •         int is_bc_executable = 0;                               // 1 if the call is related to BlackCipher.aes
  •         WCHAR replaced_cmd[512 = { 0 };                        // modified cmd line (BlackCipher.aes -> BlackCipher.aes2)
  •        
  •         do {
  •                 if (lpApplicationName && wcstombs_s(&chars_converted, application_name_mb, 512, lpApplicationName, 512) == -1) {
  •                         Log(L"wcstombs_s failed for lpApplicationName (%s)\n", lpApplicationName);
  •                         break;
  •                 }
  •                 if (lpCommandLine && wcstombs_s(&chars_converted, command_line_mb, 512, lpCommandLine, 512) == -1) {
  •                         Log(L"wcstombs_s failed for lpCommandLine (%s)\n", lpCommandLine);
  •                         break;
  •                 }
  •                 if (lpCurrentDirectory && wcstombs_s(&chars_converted, current_directory_mb, 512, lpCurrentDirectory, 512) == -1) {
  •                         Log(L"wcstombs_s failed for lpCurrentDirectory (%s)\n", lpCurrentDirectory);
  •                         break;
  •                 }
  •                 is_bc_executable = StrStrIA(command_line_mb, BLACKCIPHER_EXE) != NULL;
  •                 // replace BlackCipher.aes with BlackCipher.aes2
  •                 if (is_bc_executable)
  •                 {
  •                         cmd_line_end = StrStrIA(command_line_mb, BLACKCIPHER_EXE) + 15;
  •                         cmd_line_end_size = MAX_PATH - (cmd_line_end - command_line_mb);
  •                         memmove_s(cmd_line_end + 1, cmd_line_end_size - 1, cmd_line_end, cmd_line_end_size - 1);
  •                         *cmd_line_end = '2';
  •                         if (mbstowcs_s(&chars_converted, replaced_cmd, 512, command_line_mb, 512))
  •                         {
  •                                 Log(L"mbstowcs_s failed for command_line_mb (%s)\n", command_line_mb);
  •                                 break;
  •                         }
  •                         lpCommandLine = replaced_cmd;
  •                 }
  •         } while (0);
  •        
  •         res = _CreateProcessW(lpApplicationName, lpCommandLine, lpProcessAttributes, lpThreadAttributes, bInheritHandles, dwCreationFlags, lpEnvironment, lpCurrentDirectory, lpStartupInfo, lpProcessInformation);
  •         return res;
  • }
  • static uint32_t maple_pid = 0, maple_dump = 0, maple_base = 0, maple_size = 0;
  • typedef BOOL(WINAPI* ReadProcessMemoryPtr)(HANDLE, LPCVOID, LPVOID, SIZE_T, SIZE_T *);
  • ReadProcessMemoryPtr _ReadProcessMemory = (ReadProcessMemoryPtr)GetProcAddress(GetModuleHandleA("KernelBase.dll"), "ReadProcessMemory");
  • BOOL WINAPI ReadProcessMemory_Hook(HANDLE hProcess, LPCVOID lpBaseAddress, LPVOID lpBuffer,SIZE_T nSize, SIZE_T *lpNumberOfBytesRead)
  • {
  •         BOOL res;
  •         int spoofed = 0;
  •         uint32_t pid = (uint32_t)GetProcessId(hProcess);
  •         uint32_t current_pid = (uint32_t)GetCurrentProcessId();
  •         LPCVOID original_base = lpBaseAddress;
  •         if (pid == maple_pid || pid == current_pid)
  •         {
  •                 if (GetProcessId(hProcess) == maple_pid && (uint32_t)lpBaseAddress >= maple_base && (uint32_t)lpBaseAddress < maple_base + maple_size) {
  •                         lpBaseAddress = (LPCVOID)((uint32_t)lpBaseAddress - maple_base + maple_dump);
  •                         spoofed = 1;
  •                 }
  •                 if (GetProcessId(hProcess) == GetCurrentProcessId() && (uint32_t)lpBaseAddress >= MS_Memory_Start && (uint32_t)lpBaseAddress < MS_Memory_End)
  •                 {
  •                         lpBaseAddress = (LPCVOID)((uint32_t)lpBaseAddress - MS_Memory_Start + MS_Memory);
  •                         Log(L"!!!BC tried to check its own memory!!!");
  •                         spoofed = 1;
  •                 }
  •         }
  •         res = _ReadProcessMemory(hProcess, lpBaseAddress, lpBuffer, nSize, lpNumberOfBytesRead);
  •         return res;
  • }
  • typedef LPVOID PCLIENT_ID;
  • #define STATUS_ACCESS_DENIED 0xC0000022
  • typedef NTSYSAPI NTSTATUS(NTAPI* NtOpenProcessPtr)(PHANDLE ProcessHandle, ACCESS_MASK AccessMask, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId);
  • NtOpenProcessPtr _NtOpenProcess = (NtOpenProcessPtr)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtOpenProcess");
  • NTSTATUS NTAPI NtOpenProcess_Hook(PHANDLE ProcessHandle, ACCESS_MASK AccessMask, POBJECT_ATTRIBUTES ObjectAttributes, PCLIENT_ID ClientId)
  • {
  •         NTSTATUS res;
  •         uint32_t pid;
  •         AccessMask |= PROCESS_QUERY_INFORMATION; // Ensures that we'll have permission to get PID
  •         res = _NtOpenProcess(ProcessHandle, AccessMask, ObjectAttributes, ClientId);
  •         pid = (uint32_t)GetProcessId(*ProcessHandle);
  •         if (!res && pid != maple_pid)
  •         {
  •                 Log(L"Blocking NtOpenProcess for pid %.08X\n", pid);
  •                 res = STATUS_ACCESS_DENIED;
  •                 *ProcessHandle = NULL;
  •         }
  •         return res;
  • }
  • typedef NTSYSAPI NTSTATUS(NTAPI* NtReadVirtualMemoryPtr)(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToRead, PULONG NumberOfBytesReaded);
  • NtReadVirtualMemoryPtr _NtReadVirtualMemory = (NtReadVirtualMemoryPtr)GetProcAddress(GetModuleHandleA("ntdll.dll"), "NtReadVirtualMemory");
  • NTSTATUS NTAPI NtReadVirtualMemory_Hook(HANDLE ProcessHandle, PVOID BaseAddress, PVOID Buffer, ULONG NumberOfBytesToRead, PULONG NumberOfBytesReaded)
  • {
  •         if (GetProcessId(ProcessHandle) == maple_pid)
  •         {
  •                 Log(L"Blocking NtReadVirtualMemory for address %.08X\n", BaseAddress);
  •                 return STATUS_ACCESS_DENIED;
  •         }
  •         return _NtReadVirtualMemory(ProcessHandle, BaseAddress, Buffer, NumberOfBytesToRead, NumberOfBytesReaded);
  • }

收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$

2523

主題

2

好友

1萬

積分

管理員

Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15

UID
41
帖子
12034
主題
2523
精華
80
積分
12601
楓幣
318890
威望
7724
存款
800000
贊助金額
0
推廣
1
GP
1666
閱讀權限
255
在線時間
65535 小時
註冊時間
2011-3-31
最後登入
2024-12-22

2024年紀念勳章 2023聖誕節紀念勳章 2023年紀念勳章 2022聖誕節紀念勳章 2022中秋節紀念勳章 2022端午節紀念勳章 2022年紀念勳章 2021聖誕節紀念勳章 2021端午節紀念勳章 2021年紀念勳章 2020聖誕節紀念勳章 2020中秋節紀念勳章 2020端午節紀念勳章 2020年紀念勳章 2019聖誕節紀念勳章 2019中秋節紀念勳章 2019端午節紀念勳章 2019年紀念勳章 2018端午節紀念勳章 2018年紀念勳章 2017中秋節紀念勳章 2016端午節紀念勳章 2015聖誕節紀念勳章 Apple勳章 Android勳章 2014年紀念勳章 2015年紀念勳章 2013年紀念勳章 富可敵國 2015端午節紀念勳章 積分勳章 解說達人 高級客戶 在線終極王 論壇支持王 熱心助人 管理者 論壇粉絲 貢獻王 發帖達人 精華帖 VIP會員 核心勳章 版主勳章 副站長勳章 中秋節紀念勳章 太陽勳章 幼兒勳章 性別(男) 長老勳章 音樂勳章 神手勳章 除蟲大隊 私服達人 富豪勳章 instagram紀念勳章 2015中秋節紀念勳章 2016年紀念勳章 2016聖誕節紀念勳章 2017年紀念勳章 2017端午節紀念勳章 2017聖誕節紀念勳章 2018中秋節紀念勳章 2018萬聖節紀念勳章 2018聖誕節紀念勳章 2021中秋節紀念勳章 2023端午節紀念勳章 2023中秋節紀念勳章 2024端午節紀念勳章 2024中秋節紀念勳章 2024聖誕節紀念勳章

2
發表於 2017-11-28 00:22:14 |只看該作者
站內諮詢:https://bingfong.com/messages/41
FB專頁:https://www.facebook.com/BingFengBF/   
Instagram:https://instagram.com/bing.feng/   
客服信箱:services@bingfong.com
合作洽談:contact@bingfong.com
※所有信件/訊息皆會於24小時內回覆。
※若超過24小時未收到回覆可能是您的訊息被系統過濾,請改用其它方式聯繫我們,謝謝
點評回覆

使用道具 舉報

高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-22 23:53

回頂部