Форум администраторов игровых серверов

Форум администраторов игровых серверов (https://forum.zone-game.info/TT.php)
-   Программирование / Programming (https://forum.zone-game.info/forumdisplay.php?f=98)
-   -   c# inject (https://forum.zone-game.info/showthread.php?t=43251)

Boris2105 17.07.2018 22:29

c# inject
 
Столкнулся с такой проблемой
Делаю лаунчер и пытаюсь чтобы при запуске клиента шёл инжект .dll и смена байт по определенном адресу
Вот инжект .dll как то сделал, но сменить при этом байты по определенному адресу не знаю как
Может ли кто-нибудь дать пример как такое можно реализовать?

Boris2105 18.07.2018 02:09

Re: c# inject
 
Вроде нашел пример, но теперь такая ошибка
Код:

System.ComponentModel.Win32Exception: "32-разрядные процессы не могут получить доступ к 64-разрядному процессу."
вот код
 
        private void Start_Click(object sender, RoutedEventArgs e)
        {
            Process.Start("BlackDesert64.exe", "Kirito," + "135635");
            Thread.Sleep(1500);
            string strDLLName = "steam_api64.dll";
            int processId = GetProcessId("BlackDesert64");
            if (processId >= 0)
            {
                InjectDLL(OpenProcess(2035711U, 1, processId), strDLLName);
                Thread.Sleep(500);
                Process[] processesByName = Process.GetProcessesByName("BlackDesert64");
                int processHandle = OpenProcess(0x1F0FFF, false, processesByName[0].Id);
                ReadProcessMemory(processesByName[0].MainModule.BaseAddress.ToInt64() + 43055736L, 11, processHandle);
                string hex = ConvertStringToHex("127.0.0.1");
                WriteProcessMemory(processesByName[0].MainModule.BaseAddress.ToInt64() + 43055736L, StringToByteArray(hex), processHandle);
            }
        }
 
Code: C#
 
        [DllImport("kernel32.dll")]
        public static extern bool ReadProcessMemory(int hProcess, long lpBaseAddress, byte[] buffer, int size, int lpNumberOfBytesRead);
 
Code: C#

Boris2105 18.07.2018 11:19

Re: c# inject
 
inject dll происходит, но вот изменить байты по адресу не дает
как исправить это?
Код:

32-разрядные процессы не могут получить доступ к 64-разрядному процессу.

PROGRAMMATOR 18.07.2018 12:20

Re: c# inject
 
Ну так видимо твоё приложение работает как 32-разрядное.

Boris2105 18.07.2018 12:30

Re: c# inject
 
Цитата:

Сообщение от PROGRAMMATOR (Сообщение 432051)
Ну так видимо твоё приложение работает как 32-разрядное.

а как или где это исправить?

PROGRAMMATOR 18.07.2018 12:52

Re: c# inject
 
https://docs.microsoft.com/ru-ru/vis...rget-platforms

+

bool ReadProcessMemory(Int64 hProcess, ...)
 
Code: C#

Boris2105 18.07.2018 14:39

Re: c# inject
 
Цитата:

Сообщение от PROGRAMMATOR (Сообщение 432053)
https://docs.microsoft.com/ru-ru/vis...rget-platforms

+

bool ReadProcessMemory(Int64 hProcess, ...)
 
Code: C#

спасибо помогло, такой еще вопрос может просто я не заметил
но у меня он меняет ip не на 127.0.0.1 а на 127.0.0.120
почему так выходит?

PROGRAMMATOR 18.07.2018 15:37

Re: c# inject
 
Покажи WriteProcessMemory и ConvertStringToHex

Boris2105 18.07.2018 15:41

Re: c# inject
 
ConvertStringToHex:
Свернуть ↑Развернуть ↓


WriteProcessMemory:
Свернуть ↑Развернуть ↓

PROGRAMMATOR 18.07.2018 15:45

Re: c# inject
 
Ещё StringToByteArray сбрось.

Что-то ты странное делаешь.

var addressBytes = IPAddress.Parse("127.0.0.1")
    .GetAddressBytes();
 
Code: C#


Текущее время: 08:12. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot