C# Удаленный инъекция кода процесса с динамическими адресамиC#

Место общения программистов C#
Ответить
Anonymous
 C# Удаленный инъекция кода процесса с динамическими адресами

Сообщение Anonymous »

Я сделал небольшое приложение для мода для игры Elden Ring. С этим модом, когда игрок теряет здоровье, я снижаю их уровень на 1. Все работает до сих пор.
Что я хочу сделать сейчас, так это сделать это, когда они получают удар. />
сканирование для адреса функции < /p>
< /li>
Выделите новую память для инструкции, оригинальную инструкцию и прыжок назад < /p>
< /li>
Паркуйте в мой Allloc. и прыгайте обратно в пространство Alloc < /p>
< /li>
< /ol>
[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll")]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten); // IntPtr before
[DllImport("kernel32.dll")]
static extern IntPtr VirtualAllocEx(IntPtr hProcess, IntPtr lpBaseAddress, uint dwSize, uint flAllocationType, uint flProtect);

// The process is opened before calling Inject
// processHandle has the handle value of the Elden Ring process returned by OpenProcess

void Inject() {
int wrBytes;
// find "GettingHit" method mem location
DotNetMemoryScan scanner = new DotNetMemoryScan();
// &actionPointer = "48 8B 86 90 01 00 00" - mov rax,[rsi+00000190]
nint actionPointer = scanner.scan_all(process, "48 8B 86 90 01 00 00 48 8B 48 08 48");
// allocate new space
// MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE
IntPtr allocPointer = VirtualAllocEx(processHandle, 0, 0x400, 0x00001000 | 0x00002000, 0x40);
// set jump to new space
byte[] customJump = { };
// custom jump =
// jmp [allocPointer] ??
WriteProcessMemory(processHandle, actionPointer, customJump, 0, out wrBytes);
// write custom increment + jump back (?) + initial hit counter value
byte[] customInstruction = { };
// customInstruction =
// inc [allocPointer + ] ??
// "48 8B 86 90 01 00 00" ??
// jmp [actionPointer] ??
// "00"
WriteProcessMemory(processHandle, allocPointer, customInstruction, 0, out wrBytes);
}
< /code>
Я попытался найти примеры инъекции кода, но все они вводят фиксированные данные или целые DLL. Оба варианта не работают для меня. Внедрение DLL с использованием C#/. NET требует, чтобы целевая сборка была также .NET Framework, и это не так.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... -addresses
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»