PDA

Просмотр полной версии : [Статья] Работа с памятью. Поиск статического адреса. Теория и практика. C#.


Nickitee
28.11.2011, 12:12
Вступление
Всем привет! Сегодня мы будем учиться работать с памятью на C# (СиШарп), а именно "обходить" DMA (Dynamic Memory Allocation) это плохая вещь в играх и не только, когда адрес нужного нам значение в памяти, при каждом запуске игры меняется. Игру я взял AceOfSpades(AOS), в ней можно через CE менять значение к примеру патронов, и это будет не визуально, НО, при каждом новом запуске адрес другой. Этот гайд будет без VAMemory, для него вообще ничего не надо будет, кроме одного класса, который мы добавим в проэкт.
p.s. использовать статический адрес можно не только для изменения,а ещё к примеру для чтения при создании бота.
Что нам понадобиться:
1. Компилятор C#, я советую MVS 2010.
2. Класс для работы с памятью ([Ссылки могут видеть только зарегистрированные и активированные пользователи]).
3. CE.
4. Базовые знания C#.
Поехали...
1. Создадим проэкт.
2. Сохраним, изменим версию .net framerwork-a на 2.0
3. Удалим все не поддерживаемые библиотеки после этого и "using System.Linq"
4. [Ссылки могут видеть только зарегистрированные и активированные пользователи]
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 [Ссылки могут видеть только зарегистрированные и активированные пользователи]
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)FinishedAd ress, memory, out byteswritten);
}

Как видно, всё ужжжжасно легко.
9.Это всё :). С вами был Nickitee.
Специально для Zhyk.ru
Права на гайд принадлежат Nickitee
Автор не несёт ответственности за злодеяния информацией

Joker
28.11.2011, 12:51
Молодец, постарался!

Nickitee
01.12.2011, 15:50
Ошибка 1 Элемент "myprocess" не существует в текущем контексте.
Поправил :).

Хам!!!
01.12.2011, 16:32
А что делать если так?
[Ссылки могут видеть только зарегистрированные и активированные пользователи]

Nickitee
02.12.2011, 18:41
А что делать если так?
[Ссылки могут видеть только зарегистрированные и активированные пользователи]
жмём "Show disassambler"
смотрим что у нас последний раз делалось с ESI. (mov, imul, dec...)
и потом ESI + 0C - вот наш статический адрес.
Это только в 2 словах, а так на самом деле надо посидеть, подумать, если так нужно, то скажи что за игра/программа в аську. Мб чо нить придумаю.

V11RUS
07.06.2012, 12:09
Для пб тоже можно таким способом написать некоторые функции? получается так да?

LetsKaktus
07.09.2012, 16:22
жмём "Show disassambler"
смотрим что у нас последний раз делалось с ESI. (mov, imul, dec...)
и потом ESI + 0C - вот наш статический адрес.
Это только в 2 словах, а так на самом деле надо посидеть, подумать, если так нужно, то скажи что за игра/программа в аську. Мб чо нить придумаю.

Что за мне не понятную фигню ты написал? Можно подробнее потому что ничего не понятно /md

M.r_REBUS
09.09.2012, 00:55
Тк отписали вить нужны базовые знания с++