Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/34: Рейтинг темы: голосов - 34, средняя оценка - 4.85
68 / 41 / 1
Регистрация: 14.05.2013
Сообщений: 383

Трейнер

04.08.2013, 17:59. Показов 6864. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал трейнер для игры Tony Hawk's Undeground 2 (THUG 2), но я то написал, а сам нормально не понял в чём польза от этого трейнера
Объясню:
Писал я по видео уроку, и по этому полностью не понял смысл
Не нужно мне расписывать весь код, а только - как с помощью него изменить данные в игре (точнее взломать игру)?
Код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
 
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        [DllImport("kernel32.dll")]
        public static extern IntPtr OpenProcess(int dwDesiredAccess, bool bInheritHandle, int dwProcessId);
 
        [DllImport("kernel32.dll", SetLastError = true)]
        [return: MarshalAs(UnmanagedType.Bool)]
        static extern bool CloseHandle(IntPtr hObject);
 
        [DllImport("kernel32.dll", SetLastError = true)]
        static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out UIntPtr lpNumberOfBytesWritten);
 
        public int pID;
 
        public Form1()
        {
            InitializeComponent();
            GetProcess("THUG2");
            WriteBytes();
        }
 
        public void GetProcess(string name)
        {
        var pList = Process.GetProcesses();
 
            if (pList.Count() != 0)
            {
                foreach (var process in pList)
                {
                    if (process.ProcessName == name)
                    {
                        pID = process.Id;
                        MessageBox.Show("Процесс игры найден!");
                        return;
                    }
                }
            }
            return;
        }
 
        public void WriteBytes()
        {
            var scoreAddress = 0x137C54C;
            byte[] scoreBytes = { 0x00, 0x00, 0x00, 0x00 };
            var size = 4;
            var dummy = new UIntPtr();
            var handle = OpenProcess(0x001F0FFF, false, pID);
            WriteProcessMemory(handle, (IntPtr)scoreAddress, scoreBytes, (uint)size, out dummy);
            CloseHandle(handle);
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
 
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.08.2013, 17:59
Ответы с готовыми решениями:

Трейнер для игры: использование статичного указателя
Сделал трейнер, но при новом запуске игры байты меняются, нашел что можно сделать через статичный указатель, но это очень не понятно может...

Трейнер для игры
Привет всем! Мне нужно создать трейнер для игры(любой игры), например GTA San Andreas, что для этого нужно?

Как создать трейнер на языке C#
Как можно это сделать ? Научите - подскажите пожалуйста

12
75 / 80 / 51
Регистрация: 22.03.2013
Сообщений: 258
04.08.2013, 18:24
На форуме запрещено взламывать различные игры
C#
1
2
3
4
5
6
7
8
9
10
public void WriteBytes()
        {
            var scoreAddress = 0x137C54C;//Динамический адрес
            byte[] scoreBytes = { 0x00, 0x00, 0x00, 0x00 };//Байты которые будете менять в динам адрес,Байты эти отвечают за все угодна допустим { 0x90, 0x90, 0x90, 0x00 };// это будет 9 лярдов цифр
            var size = 4;//Размер байта
            var dummy = new UIntPtr();
            var handle = OpenProcess(0x001F0FFF, false, pID);//Права на адресс (0x001F0FFF)флаг который доёт все делать писать читать в адрес
            WriteProcessMemory(handle, (IntPtr)scoreAddress, scoreBytes, (uint)size, out dummy);
            CloseHandle(handle);
        }
Что бы он работал вам нужны указатели ,а указатели работают тока в небезопасном коду
И еще он будет одноразовым т.е вы должны постоянно менять адрес если хотите чтобы он работал
На сколько я понял вы смотрели уроки: Михаил Ремизов[keng]
0
68 / 41 / 1
Регистрация: 14.05.2013
Сообщений: 383
04.08.2013, 18:29  [ТС]
Да, его уроки

А такая тема на форуме была, так что...)

Ну ладно, буду искать другие уроки
1
75 / 80 / 51
Регистрация: 22.03.2013
Сообщений: 258
04.08.2013, 18:31
Даниил, Это вполне рабочий код просто подключить небезопасный код добавить указатели(их можно взять в CE CheatEngine)а куда писать указатели нужно посмотреть урок понять что там писать(урок его же keng) и все вполне рабочий трейнер)
0
68 / 41 / 1
Регистрация: 14.05.2013
Сообщений: 383
04.08.2013, 18:32  [ТС]
А вы можете мне помочь?
Я С# начал изучать только сегодня, но быстро всё начал понимать, и решил приступить к серьезным программам
Но тут я не понимаю как исправить и что делать
0
75 / 80 / 51
Регистрация: 22.03.2013
Сообщений: 258
04.08.2013, 18:35
никогда не писал трейнер(я немогу)) но я смотрел уроки так что keng просто делать одноразовые трейнеры а лучше всего если хочешь стать крутым читером))лучше с++ изучай он как раз хорошо работать с указателями
0
68 / 41 / 1
Регистрация: 14.05.2013
Сообщений: 383
04.08.2013, 18:40  [ТС]
Я С++ уже месяц как изучаю, вчера захотел начать ещё что-то изучать
0
75 / 80 / 51
Регистрация: 22.03.2013
Сообщений: 258
04.08.2013, 18:48
а на c++писали трейнеры?
0
68 / 41 / 1
Регистрация: 14.05.2013
Сообщений: 383
04.08.2013, 18:51  [ТС]
Нет
0
Эксперт С++
 Аватар для _lunar_
3701 / 2836 / 451
Регистрация: 03.05.2011
Сообщений: 5,193
Записей в блоге: 21
04.08.2013, 19:50
ProgerHack, не нужен здесь никакой небезопасный код. Да и трейнер это не взлом.

Даниил, с помощью тех "двух" строк которые у вас написаны, вы ничего не взломаете. К примеру для заморозки значения (бессмертие, счётчик времени, перезарядка и т.д.), необходимо найти адрес с нужным значением, а потом во встроенном дизассемблере cheatengine смотрите что он пишет (не читает), меняете байты на nop (0х90) с помощью WriteProcessMemory, для возврата прежних значений байтам можно всё это обернуть в checkbox.
вообще в тех уроках всё доступно объяснено.
0
75 / 80 / 51
Регистрация: 22.03.2013
Сообщений: 258
05.08.2013, 12:03
Цитата Сообщение от _lunar_ Посмотреть сообщение
ProgerHack, не нужен здесь никакой небезопасный код. Да и трейнер это не взлом.

Даниил, с помощью тех "двух" строк которые у вас написаны, вы ничего не взломаете. К примеру для заморозки значения (бессмертие, счётчик времени, перезарядка и т.д.), необходимо найти адрес с нужным значением, а потом во встроенном дизассемблере cheatengine смотрите что он пишет (не читает), меняете байты на nop (0х90) с помощью WriteProcessMemory, для возврата прежних значений байтам можно всё это обернуть в checkbox.
вообще в тех уроках всё доступно объяснено.
Тогда как вы сможете писать указатели без небезопасного кода?я могу быть и не прав но на сколько я знаю указатели пишутся вот так
C#
1
2
int* p1, p2, p3;   // Ok
int *p1, *p2, *p3;   // Invalid in C#
MSDN : http://msdn.microsoft.com/ru-ru/library/t2yzs44b
0
1057 / 864 / 195
Регистрация: 31.03.2010
Сообщений: 2,521
05.08.2013, 15:23
Данная программа подключает методы из стандартной библиотеки Windwos kernel32.dll OpenProcess и WriteProcessMemory.
Далее:
1) получает список всех запущенных процессов - Process.GetProcesses()
2) среди них находит процесс игры по имени процесса - в цикле
3) получает дескриптор процесса при помощи OpenProcess из библиотеки
4) используя дескриптор процесса и функцию WriteProcessMemory перезаписывает данные в оперативной памяти процесса программы.

как она влияет на игру непредсказуемо - так как в том адресе памяти может хранится все что угодно.
0
Почетный модератор
Эксперт .NET
 Аватар для NickoTin
8729 / 3681 / 404
Регистрация: 14.06.2010
Сообщений: 4,513
Записей в блоге: 9
05.08.2013, 17:56
Цитата Сообщение от ProgerHack Посмотреть сообщение
Тогда как вы сможете писать указатели без небезопасного кода
IntPtr, и методы класса Marshal - ReadX, WriteX. Для стороннего процесса достаточно правильно описать прототип WinAPI функции с использованием IntPtr. Но проще использовать указатели.
Цитата Сообщение от ProgerHack Посмотреть сообщение
Invalid in C#
Вы недостаточно знаете C#, int* корректная конструкция, почитайте о понятии "небезопасный код" в C#. Да, C# не поддерживает полноценную работу с указателями как в C++ для всех типов, но его функционала хватит на многие операции.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.08.2013, 17:56
Помогаю со студенческими работами здесь

трейнер
Здравствуйте . весь интернет облазил но не нашел нормального тренера на с++. Может кто подскажет или даст исходник а я уже сам разберусь. ...

Трейнер
Здравствуйте. Можно ли на JAVA написать трейнер для игры ?

Непростой трейнер
Хочу написать трейнер к игре, для автоматизации строительства юнитов. Сложность для меня в том, что строительство запускается только кликом...

Работа с адресами (трейнер)
люди добрые помогите ..шапка трейнера var Form2: TForm2; ProcName: string; Dummy: Cardinal; ProcessId, GameHandle:...

Трейнер для DMA игры
Приветствую. Имеется игра с динамическими адресами. Все указатели уже найдены. Начало (ArtMoney) указывает на модуль игры glk.exe и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru