Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
 Аватар для AlexPS
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 16

Доступ к главному модулю процесса

06.04.2014, 10:49. Показов 2658. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток форумчане.
Мне необходимо получить доступ к памяти процесса ArcheAge.
Пишу подобие бота если можно так назвать, скорее анализатор интерфейса но не суть важно.
У меня возникла проблема - win32exception при доступе к главному модулю процесса.
В документации сказано что это исключение при получении доступа к процессу с другой разрядностью но у ArcheAge разрядность 32 бита. Замечу что даже знаменитый ArtMoney который я хотел использовать для поиска смещений ячеек памяти не может получить доступ к процессу.

Уже есть программы на C# которые работают с процессом ArcheAge значит проблема решаема. Но сам я не могу найти решения и решил прибегнуть к сторонней помощи, всем заранее спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.04.2014, 10:49
Ответы с готовыми решениями:

Передача сообщений главному окну из потока
Недавно стал осваивать C# Вопрос: привык передавать сообщения главному окну из потока посредством PostMessage с созданием своих кодов...

Вернуть данные из дочернего окна - главному
Как? По винФормс в нете есть примеры. А для WPF не нашел( Нужно возвращать обект класса

Имеет ли C# доступ к оперативной памяти другого процесса?
Доброго времени суток. Возможно ли сделать изменение значения экземпляра поля в одном процессе из другого процесса? По подробнее о том...

10
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
06.04.2014, 13:20
пробовали от имени администратора запускать?
0
 Аватар для AlexPS
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 16
06.04.2014, 15:37  [ТС]
Да конечно, это первое что пришло в голову. Сразу откомпилил и от админа, но эффект тот же.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
06.04.2014, 17:24
ну тогда выкладывайте участок кода как присоединяетесь к процессу.
0
 Аватар для AlexPS
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 16
06.04.2014, 17:35  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
            string processName = "archeage";
            var arrayProcesses = Process.GetProcessesByName(processName);
            if (arrayProcesses == null || arrayProcesses.Length < 1)
            {
                info_label.Text = "Процесс не найден";
            }
            else
            {
                Process currentProcess = arrayProcesses[0];
                MessageBox.Show(currentProcess.MainModule.ModuleName.ToString());
             }
Доступ к главному модулю вызывает исключение win32exception.
Разрядность моей программы 32 как и разрядность приложения archeage
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
06.04.2014, 21:22
ну так а Handle процесса вы как получаете?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
 
public int pID;
 
public void GetProcess(string Name)
{
    Process[] proc = Process.GetProcesses();
    foreach (Process process in proc)
        if (process.ProcessName == Name)
        {
            pID = process.Id;
            return;
        }
    return;
}
 
public Form1()
{
    InitializeComponent();
 
    GetProcess("archeage");
 
    IntPtr handle = OpenProcess(0x001F0FFF, false, pID);
}
0
 Аватар для AlexPS
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 16
06.04.2014, 21:30  [ТС]
Простите но как это мне поможет?
К чему мне id процесса который я могу получить тем методом что написал сам.
Ваш же метод по прежнему не даёт доступа к свойству MainModule и вызывает то-же самое исключение.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
06.04.2014, 21:39
Цитата Сообщение от AlexPS Посмотреть сообщение
К чему мне id процесса
для получения хендла, без которого вы ничего не сделаете с процессом.
0
 Аватар для AlexPS
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 16
06.04.2014, 21:48  [ТС]
Хендл это понятно. Но что я могу делать с процессом если я не знаю базового адреса и смещений.
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
06.04.2014, 22:10
на плюсах базовый адрес можно узнать из MEMORY_BASIC_INFORMATION
писал давно один метод нахождения сигнатур, кое что можно заимствовать
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
bool DataCompare(byte* pData, byte* pattern, char* mask)
{
    for (; *mask; mask++, pattern++, pData++)
    {
        if (*mask == 'x' && *pData != *pattern)
            return false;
    }
    return true;
}
 
DWORD FindPattern(DWORD addr, DWORD length, byte* pattern, char* mask)
{
    MEMORY_BASIC_INFORMATION mbi = { 0 };
    DWORD offset = 0;
 
    while (offset < length)
    {
        VirtualQueryEx(handle, (LPCVOID)(addr + offset), &mbi, sizeof(MEMORY_BASIC_INFORMATION));
        if (mbi.State != MEM_FREE)
        {
            byte* buffer = new byte[mbi.RegionSize];
            ReadProcessMemory(handle, mbi.BaseAddress, buffer, mbi.RegionSize, NULL);
            for (unsigned int i = 0; i < mbi.RegionSize; i++)
            {
                if (DataCompare(buffer + i, pattern, mask))
                {
                    delete[] buffer;
                    return (DWORD)mbi.BaseAddress + i;
                }
            }
            delete[] buffer;
        }
        offset += mbi.RegionSize;
    }
    return 0;
}
 
DWORD WINAPI CJ(LPVOID)
{
    MODULEINFO module = { 0 };
    module = GetModuleData(NULL);
    handle = GetCurrentProcess();
    DWORD call_address = FindPattern((DWORD)module.lpBaseOfDll, module.SizeOfImage, ...);
 
    DWORD old_prot = 0;
 
    VirtualProtect((void*)call_address, 6, PAGE_EXECUTE_READWRITE, &old_prot);
    memcpy((void*)call_address, (PBYTE)CallCJ, 6);
    VirtualProtect((void*)call_address, 6, old_prot, &old_prot);
    ::ExitThread(1337);
}
но заморачиваться с переводом на шарп не хочется, да и вообще с памятью лучше работать на плюсах.

PS: сколько не работал с процессами все поддавались хаку без проблем, и ваш не исключение (просто не может быть там какой-то навороченной защиты. тем более он не системный).
0
 Аватар для AlexPS
0 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 16
06.04.2014, 22:33  [ТС]
Да я уже много примеров находил для получения базового адреса на шарпе но все они блокируются.
Спасибо за код)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.04.2014, 22:33
Помогаю со студенческими работами здесь

JavaFX Исключения, доступ к главному классу
При нажатии на кнопку должно отправить сообщение на сервер, но вместо этого выбрасывает сразу же 3 исключения(RuntimeException,...

Доступ к памяти другого процесса
Требуется получить доступ к памяти других процессов. Для этого, как я полагаю, нужно писать определенный драйвер для доступа к виртуальной...

Доступ к семафору из другого процесса
Отправили меня в этот раздел с моим вопросом :P Есть процесс читатель и несколько писателей, в читателе реализован семафор, оэидающий...

Потерян доступ к модулю дефрагментатора диска
При попытке провести дефрагментацию диска встроенным дефрагментатором Винды получаю сообщение, что &quot;ПОдключение к модулю...

Друпал не дает мне доступ к моему же модулю
Попробовал написать модуль для примера function test_perm_menu() { $items = array( 'title' =&gt; 'test_perm', ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru