Я сделал небольшое приложение для мода для игры 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
C# Удаленный инъекция кода процесса с динамическими адресами ⇐ C#
Место общения программистов C#
-
Anonymous
1756949891
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, и это не так.>
Подробнее здесь: [url]https://stackoverflow.com/questions/79755208/c-sharp-remote-process-code-injection-with-dynamic-addresses[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия