Работа с памятью. Поиск статического адреса. Теория и практика. C#.
Вступление
Всем привет! Сегодня мы будем учиться работать с памятью на C# (СиШарп), а именно "обходить" DMA (Dynamic Memory Allocation) это плохая вещь в играх и не только, когда адрес нужного нам значение в памяти, при каждом запуске игры меняется. Игру я взял AceOfSpades(AOS), в ней можно через CE менять значение к примеру патронов, и это будет не визуально, НО, при каждом новом запуске адрес другой. Этот гайд будет без VAMemory, для него вообще ничего не надо будет, кроме одного класса, который мы добавим в проэкт.
p.s. использовать статический адрес можно не только для изменения,а ещё к примеру для чтения при создании бота.
1. Создадим проэкт.
2. Сохраним, изменим версию .net framerwork-a на 2.0
3. Удалим все не поддерживаемые библиотеки после этого и "using System.Linq"
4. Добавим в проэкт "ProcessMemoryReader.cs"
[Ссылки могут видеть только зарегистрированные пользователи. ]
5. Теперь после
Код:
public Main() // тут будет название вашей формы
{
InitializeComponent();
}
Пишем:
Код:
ProcessMemoryReaderLib.ProcessMemoryReader MemoryWorker = new ProcessMemoryReaderLib.ProcessMemoryReader();
6. Используем такое:
Код:
using System;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
7. Теперь будем учиться работать с DMA, на пример я взял хак кубов для строения.
7.1 Запускаем AOS через сайт (выбираем сервер), запускаем CE, выбираем в CE "client.exe" (AceOfSpades)
7.2 Смотрим сколько у нас кубов - 50
7.3 Ставим 1 куб в игре, отсеиваем - 49
7.4 Делаем это пока не получим 1 адрес
7.5 Переносим адрес вниз
7.6 Щёлкаем на адрес правой кнопкой и выбираем "Find out what writes to this adress"
[Ссылки могут видеть только зарегистрированные пользователи. ]
7.7 Если вылезло окошко с кнопкой "Ок" - жмём, появилось окошко мини дебагера с кнопкой "Stop" в углу справа.
7.8 Переходим в игру, ставим ещё один блок
7.9 В нашем дебагере появилось первая строчка, щёлкаем на неё 2 раза.
7.10 Самое интересное, теперь нам надо понять как генерируется динамический адрес
[Ссылки могут видеть только зарегистрированные пользователи. ] 1 - EAX Будет равен значению по адресу 0x017dbb84
2 - EAX Равен EAX * 0x000003a0
3 - Отнять у [EAX+Pointer]
4 - Pointer
p.s. Немного от меня, если число в скобочках (пример [000000F]) - то это адрес, если без (пример 000000F) - то это число
Тут главное понять как это работает + подучить ASM
8. Теперь нам надо воплотить это в C#, создаём кнопку, кидаем на неё код:
Код:
Process[] myprocess = Process.GetProcessesByName("client");
if (myprocess.Length != 0)
{
MemoryWorker.ReadProcess = myprocess[0];
MemoryWorker.OpenProcess();
int byteswritten;
int bytesread;
byte[] memory;
int pointerbase;
int value;
int eax;
int FinishedAdress;
pointerbase = 0x004A7F9C;
memory = MemoryWorker.ReadProcessMemory((IntPtr)0x017dbb84, 4, out bytesread);
eax = BitConverter.ToInt32(memory, 0);
FinishedAdress = eax * 0x000003a0;
FinishedAdress = FinishedAdress += pointerbase;
value = 100;
memory = BitConverter.GetBytes(value);
MemoryWorker.WriteProcessMemory((IntPtr)FinishedAdress, memory, out byteswritten);
}
Как видно, всё ужжжжасно легко.
9.Это всё . С вами был Nickitee.
Специально для Zhyk.ru
Права на гайд принадлежат Nickitee
Автор не несёт ответственности за злодеяния информацией
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
Последний раз редактировалось Nickitee; 01.12.2011 в 15:50.
жмём "Show disassambler"
смотрим что у нас последний раз делалось с ESI. (mov, imul, dec...)
и потом ESI + 0C - вот наш статический адрес.
Это только в 2 словах, а так на самом деле надо посидеть, подумать, если так нужно, то скажи что за игра/программа в аську. Мб чо нить придумаю.
________________
We are Ducks. We are birds. We like bread. We cryack. Cryack.
Re: Работа с памятью. Поиск статического адреса. Теория и практика. C#.
Цитата:
Сообщение от Nickitee
жмём "Show disassambler"
смотрим что у нас последний раз делалось с ESI. (mov, imul, dec...)
и потом ESI + 0C - вот наш статический адрес.
Это только в 2 словах, а так на самом деле надо посидеть, подумать, если так нужно, то скажи что за игра/программа в аську. Мб чо нить придумаю.
Что за мне не понятную фигню ты написал? Можно подробнее потому что ничего не понятно