В этой статье я покажу как сделать трейнер , используя Visual C#..  Набрал немного опыта по этому языку по написанию трейнера, и сегодня я с вами поделюсь с опытом.  в нашем трейнере будет одна функция  добавляем х-количество Трутниц. Игра  Amnesia: The Dark Deskent.  Что такое трутница, трутница это по моему порошок для, скажем служат для разжигания огня. Количество трутниц в игре как всегда любой другой предмет  мало.( Это не только мое мнение и мнение других Геймхакеров в игре всегда все мало.) Вот что нам понадобится, а точнее   нам понадобилось : 1. Amnesia: The Dark Deskent .     Сама игра 1. Cheat Engine 6.1                     Программа для поиска  нужных нам значение в игре. 2. Visual Studio C#2010                среда разработки, на языке C# мы создадим наш трейнер 3. Мозг                                       Итак  приступаем. Для начала соберем необходимую нам информацию, а именно найдем адреса в которых лежат нужные нам значения, с программой Cheat Engine. Я нашел нужный адрес и  конечно он динамический при каждом запуске меняется, далее что делать!  Мы не будем писать Ассемблерный скрипт,  а просто находим статичный  адрес  указателя и Офсеты (Смещение)  или иначе говорят Пойнтеры. Как  надо найти статичный  адрес  указателя и смещение   боле подробно в форуме. Так далее, нашли статичный адрес указателя  плюс смещение (офсеты) Рис_1 и Рис_1,1.    Запускаем VC# Создаем новый проект выбираем Приложение Windows Forms  назначаем нужное имя и жмем окей и получаем готовую форму. Далее добавляем на форму один button (кнопка) один Timer и два Label. Рис 2.1  В свойствах кнопки изменяем: где Text убираем button1 пишем Добавить. Рис 2.2 а в свойствах Timer1 где Enabled поменяем значение с False на True в Label1 где Text пишем  Игра Не Запущена а Label2 где Text  просто стираем имя и все, оставляем пустое. После всего этого, наша форма будет смотреться так Рис 2.3     Далее два раза кликаем  по кнопке Добавить  переходим к написанию кода. В пространстве имен добавим следующие имена:   using System.Diagnostics; using System.Runtime.InteropServices; using System.Globalization; using System.Threading;  Далее пишем под  public partial class Form1 : Form вот этот код:   Memory oMemory = new Memory();  bool gamehacklab = true;  Далее в обработчик кнопки пишем следующий код:   Process[] aProcesses = Process.GetProcessesByName("Amnesia"); //Имя процесса игры в памяти, пишем без "exe"             if (aProcesses.Length != 0)             {                 oMemory.ReadProcess = aProcesses[0];                 oMemory.Open();                  int myGame_Address = Addr.ToDec("0072836C"); // Статичный адрес указателя                 int[] myGame_Offsets = { 0x84, 0x78 }; // Офсеты, смещение пишем в виде 0х--                 int bytesWritten; //                 byte[] bValue_To_Write = BitConverter.GetBytes(999); //3аписиваем 999 количество трутниц                 string sWritten_Address = oMemory.PointerWrite((IntPtr)myGame_Address, bValue_To_Write, myGame_Offsets, out bytesWritten);                  if (bytesWritten == bValue_To_Write.Length)                     label1.Text = ("Добавлено 999Трутниц." + "!"); // Выводим текст если изменяется значение                  else                     label1.Text = ("Не Добавлено (Ошибка!). " + ".");// Выводим текст если ничего не получится                  oMemory.CloseHandle();   Два раза кликаем по Timer1 и пишем следующий код:   Process[] aProcesses = Process.GetProcessesByName("Amnesia");             if (aProcesses.Length != 0)             {                 gamehacklab = true;                 label2.Text = "Игра запущена";              }              else             {                 gamehacklab = false;                 label2.Text = "Игра Не запущена";             }  И так пришло время писать класс чтобы программа имела доступ  и  изменение значение в  памяти игры назовем клас по имени    GmeHackLab. Нажимаем кнопку Проект далее Добавить класс в появившемся окне выбираем класс пишем имя класса GmeHackLab  далее Добавить.  Здесь тоже в пространстве имен добавим следующие имена:   using System.Diagnostics; using System.Runtime.InteropServices; using System.Globalization; using System.Threading;  Получится вот такой код: