-
Автор темы
- #21
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
клиент конечнодля этого надо отдельную функцию писать. ибо моно не стандартная библиотека, браузерка или клиент?
клиент конечнодля этого надо отдельную функцию писать. ибо моно не стандартная библиотека, браузерка или клиент?
#include <TlHelp32.h>
#include <psapi.h>
#pragma comment( lib, "psapi.lib")
char* GetModulePatchByName(HANDLE hProcess, char* module_name)
{
HMODULE hMods[1024];
DWORD cbNeeded;
CHAR szModName[MAX_PATH];
if (K32EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded))
{
for (int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++)
{
if (K32GetModuleFileNameExA(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR)))
{
if (strstr(szModName, module_name))
{
break;
}
}
}
}
return szModName;
}
bool BlockAPI_mono(HANDLE hProcess, char* api_name)
{
CHAR _asm_ret[] = { 0xC3 };
char* mono_patch = GetModulePatchByName(hProcess, "mono.dll");
if (mono_patch == NULL)
return false;
HMODULE mono_lib = LoadLibraryA(mono_patch);
if (mono_lib == NULL)
return false;
FARPROC func = GetProcAddress(mono_lib, api_name);
if (func == NULL)
return false;
DWORD dwOldProtect = 0;
VirtualProtectEx(hProcess, reinterpret_cast<LPVOID>(func), sizeof(_asm_ret), PAGE_EXECUTE_READWRITE, &dwOldProtect);
bool write = WriteProcessMemory(hProcess, reinterpret_cast<LPVOID>(func), reinterpret_cast<LPCVOID>(_asm_ret), sizeof(_asm_ret), 0);
VirtualProtectEx(hProcess, reinterpret_cast<LPVOID>(func), sizeof(_asm_ret), dwOldProtect, &dwOldProtect);
return write;
}
int main()
{
HANDLE hProcess = GetCurrentProcess();
if (BlockAPI_mono(hProcess, "mono_get_root_domain")
&& BlockAPI_mono(hProcess, "mono_thread_attach")
&& BlockAPI_mono(hProcess, "mono_assembly_open")
&& BlockAPI_mono(hProcess, "mono_assembly_get_image")
&& BlockAPI_mono(hProcess, "mono_class_from_name")
&& BlockAPI_mono(hProcess, "mono_class_get_method_from_name")
&& BlockAPI_mono(hProcess, "mono_runtime_invoke"))
{
printf("mono inject fixed!\n");
}
else
{
printf("no!\n");
}
system("pause");
return 0;
}
Приблизительно*. Извини, не мог не влезть.приблезительно, там смотреть уже нужно.
Код:#include <TlHelp32.h> #include <psapi.h> #pragma comment( lib, "psapi.lib") char* GetModulePatchByName(HANDLE hProcess, char* module_name) { HMODULE hMods[1024]; DWORD cbNeeded; CHAR szModName[MAX_PATH]; if (K32EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) { for (int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) { if (K32GetModuleFileNameExA(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR))) { if (strstr(szModName, module_name)) { break; } } } } return szModName; } bool BlockAPI_mono(HANDLE hProcess, char* api_name) { CHAR _asm_ret[] = { 0xC3 }; char* mono_patch = GetModulePatchByName(hProcess, "mono.dll"); if (mono_patch == NULL) return false; HMODULE mono_lib = LoadLibraryA(mono_patch); if (mono_lib == NULL) return false; FARPROC func = GetProcAddress(mono_lib, api_name); if (func == NULL) return false; DWORD dwOldProtect = 0; VirtualProtectEx(hProcess, reinterpret_cast<LPVOID>(func), sizeof(_asm_ret), PAGE_EXECUTE_READWRITE, &dwOldProtect); bool write = WriteProcessMemory(hProcess, reinterpret_cast<LPVOID>(func), reinterpret_cast<LPCVOID>(_asm_ret), sizeof(_asm_ret), 0); VirtualProtectEx(hProcess, reinterpret_cast<LPVOID>(func), sizeof(_asm_ret), dwOldProtect, &dwOldProtect); return write; } int main() { HANDLE hProcess = GetCurrentProcess(); if (BlockAPI_mono(hProcess, "mono_get_root_domain") && BlockAPI_mono(hProcess, "mono_thread_attach") && BlockAPI_mono(hProcess, "mono_assembly_open") && BlockAPI_mono(hProcess, "mono_assembly_get_image") && BlockAPI_mono(hProcess, "mono_class_from_name") && BlockAPI_mono(hProcess, "mono_class_get_method_from_name") && BlockAPI_mono(hProcess, "mono_runtime_invoke")) { printf("mono inject fixed!\n"); } else { printf("no!\n"); } system("pause"); return 0; }
Дампить я могу - но если указать mono image в чите,то dll уже не дампитьсяприблезительно, там смотреть уже нужно.
стоит сказать что сама идея блока апи тупая, гораздо лучше перехватывать и дампить читы, а потом себе на серв сборки слать и фиксить.
Код:#include <TlHelp32.h> #include <psapi.h> #pragma comment( lib, "psapi.lib") char* GetModulePatchByName(HANDLE hProcess, char* module_name) { HMODULE hMods[1024]; DWORD cbNeeded; CHAR szModName[MAX_PATH]; if (K32EnumProcessModules(hProcess, hMods, sizeof(hMods), &cbNeeded)) { for (int i = 0; i < (cbNeeded / sizeof(HMODULE)); i++) { if (K32GetModuleFileNameExA(hProcess, hMods[i], szModName, sizeof(szModName) / sizeof(TCHAR))) { if (strstr(szModName, module_name)) { break; } } } } return szModName; } bool BlockAPI_mono(HANDLE hProcess, char* api_name) { CHAR _asm_ret[] = { 0xC3 }; char* mono_patch = GetModulePatchByName(hProcess, "mono.dll"); if (mono_patch == NULL) return false; HMODULE mono_lib = LoadLibraryA(mono_patch); if (mono_lib == NULL) return false; FARPROC func = GetProcAddress(mono_lib, api_name); if (func == NULL) return false; DWORD dwOldProtect = 0; VirtualProtectEx(hProcess, reinterpret_cast<LPVOID>(func), sizeof(_asm_ret), PAGE_EXECUTE_READWRITE, &dwOldProtect); bool write = WriteProcessMemory(hProcess, reinterpret_cast<LPVOID>(func), reinterpret_cast<LPCVOID>(_asm_ret), sizeof(_asm_ret), 0); VirtualProtectEx(hProcess, reinterpret_cast<LPVOID>(func), sizeof(_asm_ret), dwOldProtect, &dwOldProtect); return write; } int main() { HANDLE hProcess = GetCurrentProcess(); if (BlockAPI_mono(hProcess, "mono_get_root_domain") && BlockAPI_mono(hProcess, "mono_thread_attach") && BlockAPI_mono(hProcess, "mono_assembly_open") && BlockAPI_mono(hProcess, "mono_assembly_get_image") && BlockAPI_mono(hProcess, "mono_class_from_name") && BlockAPI_mono(hProcess, "mono_class_get_method_from_name") && BlockAPI_mono(hProcess, "mono_runtime_invoke")) { printf("mono inject fixed!\n"); } else { printf("no!\n"); } system("pause"); return 0; }
да ты просто можешь из кода подписаться на событие загрузки сборки в домен через event, а там уже мосив байт сборки будет готовый)))))) чекать по хешу, цифровой подписи, мета данным. чему угодно. что за игра?Дампить я могу - но если указать mono image в чите,то dll уже не дампиться
rust legacyда ты просто можешь из кода подписаться на событие загрузки сборки в домен через event, а там уже мосив байт сборки будет готовый)))))) чекать по хешу, цифровой подписи, мета данным. чему угодно. что за игра?
using System.Reflection;
//наша функция
static void myAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args)
{
Assembly loading = args.LoadedAssembly;
//вот тут можешь разбирать сборку которая
//грузится в домен, просмотри класс Assembly
}
AppDomain dom = AppDomain.CurrentDomain;
dom.AssemblyLoad += myAssemblyLoadEventHandler;
типо пиратка у тебя? или сервак свой делаешь? можно сборки пропатчить и жить на здоровье. а если лень, навесной античит расписать какой нить простой.rust legacy
сервера свой делаю - хочу поднять старую игру и добавить например тех же патрульных нпс например.Но была проблема с обноружением читом - вот кстати код,который прячет dll от дампасам екземпол
подписка:Код:using System.Reflection; //наша функция static void myAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args) { Assembly loading = args.LoadedAssembly; //вот тут можешь разбирать сборку которая //грузится в домен, просмотри класс Assembly }
так моно инжекты палят изиКод:AppDomain dom = AppDomain.CurrentDomain; dom.AssemblyLoad += myAssemblyLoadEventHandler;
типо пиратка у тебя? или сервак свой делаешь? можно сборки пропатчить и жить на здоровье. а если лень, навесной античит расписать какой нить простой.
Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.
в прямом, модифицировать файлы игры, и добавить туда свой код.сервера свой делаю - хочу поднять старую игру и добавить например тех же патрульных нпс например.Но была проблема с обноружением читом - вот кстати код,который прячет dll от дампа
В каком смысле сборки пропатчить?
Ну так это я и так делаю - тех же нпс загружаю.в прямом, модифицировать файлы игры, и добавить туда свой код.
Н
Ну или как загруженную dll превратить в байты из event
static void myAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args)
{
Assembly loading = args.LoadedAssembly;
//вот тут можешь разбирать сборку
byte[] buffer = System.IO.File.ReadAllBytes(loading.CodeBase);
}
Уже из памяти додумались грузитьКод:static void myAssemblyLoadEventHandler(object sender, AssemblyLoadEventArgs args) { Assembly loading = args.LoadedAssembly; //вот тут можешь разбирать сборку byte[] buffer = System.IO.File.ReadAllBytes(loading.CodeBase); }
дампи сборку. посмотри код SWF Memory Dumper, он как раз для .NET сборок под юнити.Уже из памяти додумались грузить
спасибо.Извини но лайкать не могу )дампи сборку. посмотри код SWF Memory Dumper, он как раз для .NET сборок под юнити.
Кстати тот дампер то же не дампит dll с Monoimageдампи сборку. посмотри код SWF Memory Dumper, он как раз для .NET сборок под юнити.
ахах) парси через Reflection типы) и листом высылай себе)Кстати тот дампер то же не дампит dll с Monoimage
чет я намутил - при инжекте вообще вылетает :Dахах) парси через Reflection типы) и листом высылай себе)
если там будет поле функция, или чтото еще, содержащее не нужные тебе слова, допустим хак, валхак, флайхак и так далее, можешь делать выводы.
try ... catch, file.exitsчет я намутил - при инжекте вообще вылетает :D
- public static void Test()
- {
- AppDomain dom = AppDomain.CurrentDomain;
- dom.AssemblyLoad += Dom_AssemblyLoad;
- }
- private static void Dom_AssemblyLoad(object sender, AssemblyLoadEventArgs args)
- {
- Assembly loading = args.LoadedAssembly;
- byte[] buffer = System.IO.File.ReadAllBytes(loading.CodeBase);
- File.WriteAllBytes("D:\\ " + Path.GetRandomFileName() + ".dll", buffer);
- UnityEngine.Debug.Log(loading.CodeBase);
- UnityEngine.Debug.Log(loading.DefinedTypes);
- UnityEngine.Debug.Log(loading.EscapedCodeBase);
- UnityEngine.Debug.Log(loading.ExportedTypes);
- UnityEngine.Debug.Log(loading.Location);
- }
Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.
мап файл открывай и читай)нашел из за чего - у пути было file:///
Слушай последний вопрос - не подскажешь как это на C# сделать?
В на C# - dll реально не чем не открывается из декомпиляторов
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz