Перейти к содержанию

Создаем Трейнер на C#


Рекомендуемые сообщения

Сразу мне не понять это, но потихоньку набираю опыта по VC#.

Ниже прикрепил демо_трейнер со звуком, звук вместе с екзешником, но как внедрить в exe звук пока не понял, есть направление?

демо_трейнер:gtatrn.rar

Ссылка на комментарий
Поделиться на другие сайты

Я так и делаю, статейку читал с этого начинал, все файлы в папке ресурс, в ресурсах в свойствах делаю внедренный ресурс объем трейнер прибавляется но все равно приходиться таскать с собой музон.

Ссылка на комментарий
Поделиться на другие сайты

Вот пример.

trainerActivated.wav помещаем в ресурсы.


using System;
using System.Media;
using System.Windows.Forms;

namespace PlaySound
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private readonly SoundPlayer _soundPlayer = new SoundPlayer();

private void Button1Click(object sender, EventArgs e)
{
_soundPlayer.Stream = Properties.Resources.trainerActivated;
_soundPlayer.Play();
}
}
}

Ссылка на комментарий
Поделиться на другие сайты

Символ "_" это условное обозначение того, что переменная закрыта и объявлена внутри класса, а не внутри функции. Такой стиль используют многие программисты C#.

Ссылка на комментарий
Поделиться на другие сайты

  • 4 недели спустя...

Всем привет.

Вот такая проблемка, как писать модульную адрес указателя. Что хочу сделать, как понятно всем адреса меняются в игре, адрес указателя указать как модульная или как в c# это делается?

Вот из моего проекта код.


Memory oMemory = new Memory();
Process[] oProcess;
bool GameRun = false;


bool UnlimitedHealth = false;
string HealthPointer = "01DF4D4C";
int[] HealthOffset = { 0x240, 0x14, 0x8 };
int HealthToFill = 800;

bool UnlimitedVigor = false;
string VigorPointer = "01DF4D4C"; // witcher2.exe+00D14D4C указать вот эту.
int[] VigorOffset = { 0x240, 0x14, 0x10 };
int VigorToFill = 6;

bool UnlimitedMedallion = false;
string MedallionPointer = "01DF4D4C";
int[] MedallionOffset = { 0x240, 0x14, 0x254 };
int MedallionToFill = 1;

И таймер



Process[] aProcesses = Process.GetProcessesByName("witcher2");
if (UnlimitedHealth)
{
oMemory.ReadProcess = oProcess[0];
oMemory.Open();

int pointerAdress = Addr.ToDec(HealthPointer);
int[] pointerOffset = HealthOffset;

int bytesWritten;
byte[] valueToWrite = BitConverter.GetBytes((float)HealthToFill);
string sWritten_Address = oMemory.PointerWrite((IntPtr)pointerAdress, valueToWrite, pointerOffset, out bytesWritten);

oMemory.CloseHandle();


}

Process[] aProcessces = Process.GetProcessesByName("witcher2");
if (UnlimitedVigor)
{
oMemory.ReadProcess = oProcess[0];
oMemory.Open();

int pointerAdress = Addr.ToDec(VigorPointer);
int[] pointerOffset = VigorOffset;

int bytesWritten;
byte[] valueToWrite = BitConverter.GetBytes((float)VigorToFill);
string sWritren_Address = oMemory.PointerWrite((IntPtr)pointerAdress, valueToWrite, pointerOffset, out bytesWritten);
oMemory.CloseHandle();

}

Process[] aProcesscces = Process.GetProcessesByName("witcher2");
if (UnlimitedMedallion)
{
oMemory.ReadProcess = oProcess[0];
oMemory.Open();


int pointerAdress = Addr.ToDec(MedallionPointer);
int[] pointerOffset = MedallionOffset;


int bytesWritten;
byte[] valueToWrite = BitConverter.GetBytes((float)MedallionToFill);
string sWritten_Address = oMemory.PointerWrite((IntPtr)pointerAdress, valueToWrite, pointerOffset, out bytesWritten);
oMemory.CloseHandle();

}
}

Ссылка на комментарий
Поделиться на другие сайты

ZOCKIR, если ищешь ответ, то тебе надо копать функции по получению данных из процесса и модулей. Если таких не найдёшь для .NET фреймверка, то ищи их в API Windows. Как поймёшь их работу переноси на C# через импорт необходимых функций, если тебе нужно писать на C#.

Общее впечатление - ищешь лишних трудностей, когда уже есть Cheat Engine

Ссылка на комментарий
Поделиться на другие сайты

  • 3 месяца спустя...

Вот такая проблемка, как писать модульную адрес указателя. Что хочу сделать, как понятно всем адреса меняются в игре, адрес указателя указать как модульная или как в c# это делается?

Если все еще надо, я делал так:


public IntPtr GetModuleAdress(string ModuleName, string processName)
{
Process ProcessMain = null;
foreach (Process clsProcess in Process.GetProcessesByName(processName))
{
if (clsProcess.ProcessName == processName)
{
ProcessMain = clsProcess;
}
}

IntPtr return_value = (IntPtr)0;
ProcessModule myProcessModule;
ProcessModuleCollection myProcessModuleCollection = ProcessMain.Modules;
for (int i = 0; i < ProcessMain.Modules.Count; i++)
{
myProcessModule = myProcessModuleCollection[i];
if (myProcessModule.ModuleName == ModuleName)
{
return_value = myProcessModule.BaseAddress;
}
}
return return_value;
}

public void Write(){
IntPtr client_RDrawModels = GetModuleAdress("client.dll", PorcessHL2Name) + Convert.ToInt32(0x6F6370);

VAMemory memory = new VAMemory();
memory.processName = PorcessHL2Name;
memory.WriteByte(client_RDrawModels, Convert.ToByte(1));
}

...Convert.ToInt32(0x6F6370); - тут пишем адрес, а тут ...GetModuleAdress("client.dll"... имя модуля.

Ссылка на комментарий
Поделиться на другие сайты

А асму типа:

__declspec(naked)void test_on()

{

_asm

{

fld dword ptr[test]

mov esp,ebp

jmp dword ptr[RETURN_test]

}

}

На с# вообще реал?

Как вариант - собирать длл-ку с нужным асм-кодом и подгружать в своём проекте, просто так инлайн-ассемблер не поддерживается. Ещё можно попробовать часть проекта написать на C++, где этот самый ассемблер присутствует.

Ссылка на комментарий
Поделиться на другие сайты

  • 2 месяца спустя...

Всем привет!

Столкнулся с проблемой с назначением горячих клавиш " On/Off " ,естественно на одну клавишу. ( C# )

Не где инфо не смог найти, может здесь кто знает...

Ссылка на комментарий
Поделиться на другие сайты

Да все просто - для каждой клавиши (или чита, за которую клавиша отвечает) прописываешь отдельную переменную (можно булеву, то есть, логическую). Когда чит включен, переменной присваиваешь true, когда выключен - false. Ну и, собственно, по нажатию на клавишу проверяешь состояние переменной, ассоциированной с этой клавишей (читом), если false - значит, чит выключен, и его надо включить. Если же true - соответственно, чит включен, и его надо выключить. И да, после выполнения действия, переменной надо, естественно, присвоить соответсвующее значение. Это элементарное условие, я даже код приводить не буду.

Ссылка на комментарий
Поделиться на другие сайты

  • 7 месяцев спустя...

Здравствуйте!Можете помочь?

У меня есть несколько вопросов:

1)По чему лучше освоить C#?

а)По книгам?

б)По урокам и статьям?

Или напишите свой вариант.

2)Есть ли статья по созданию трейнеров на C#?

Искал статьи по Winapi для трейнеров и не нашел.Есть ли тут урок?

В заранее спасибо!

Ссылка на комментарий
Поделиться на другие сайты

1) А для чего?

Чтобы программы на ней писать,ну и трейнеры.Ну это пока что мне для начало нужно.Потом буду учиться на С++.Мне щас главное C# освоить хоть немного!

2) На форуме существует система поиска.

Я знаю,но статей я там не нашел.

А вообще, на Си шарпе не особо много юзверов пишет.

Да норм.Новички которые начинают писать трейнер на каком нибудь языке программирования,они с этого и начинают:)

А так обычно большинство людей с Cheat Engine начинают делать трейнеры.Я на нем уже писал но с него не оч. писать трейнеры.

Я по видео уроку кенга делал но там нету урока,как писать горячие клавиши для трейнера:(

Ссылка на комментарий
Поделиться на другие сайты

×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.