Trial4eg
-
Постов
11 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
Загрузки
Блоги
Сообщения, опубликованные Trial4eg
-
-
Все значения заранее искал через CE.
искал значения за какую расу играю.
Получил тип: byte
А значения расы меняется от 0 до 4 (в игре 5 рас)
-
Так во что нужно конвертировать?
Значение race в памяти от 0 до 4
-
Спасибо, большая часть интерфейса на трейнере настроил и работает.
Возник вопрос по поводу метода чтения значений:
public int ReadBytes(int baseAddress, int[] offsets, int size)
{
if (pID != 0 && baseAddress !=0 && offsets.Length !=0)
{
byte[] buffer = new byte[4];
int bytesread;
IntPtr handle;
handle = OpenProcess(0x001F0FFF, false, pID);
//int error = Marshal.GetLastWin32Error();
if (handle != IntPtr.Zero)
{
ReadProcessMemory(handle, (IntPtr)baseAddress, buffer, size, out bytesread);
for (var i = 0; i < offsets.Length; i++)
{
baseAddress = BitConverter.ToInt32(buffer, 0);
baseAddress += offsets[i];
ReadProcessMemory(handle, (IntPtr)baseAddress, buffer, size, out bytesread);
}
result = BitConverter.ToInt32(buffer, 0);
CloseHandle(handle);
return BitConverter.ToInt32(buffer, 0);
}
}
return 0;
}Как я понял, значения size отвечает за тип значения который мы читаем.
//exp - 4 byte
address = 0x00800150;
offsets = new int[] { 0x38, 0x4, 0x0, 0x3a4 };
size = 4;
ReadBytes(address, offsets, size);
exp.Text = Convert.ToString(result);
//race - 1 byte
address = 0x00800150;
offsets = new int[] { 0x38, 0x4, 0x0, 0x11 };
size = 1;
ReadBytes(address, offsets, size);exp - читает правильно
race - выдает отрицательные значения, Как исправить?
-
2 суток сижу над следующей проблемой, не получается организовать запись своего значения в память.
Имеется (пример):
Textbox.text="50000"; //значение денег который я получил из игры
//Я хочу ввести свое значение, допустим 250000
Textbox.text="250000"; //ввели значение через формуКак теперь это значение перевести в hex и записать в массив byte[], для последующей записи в память через WriteProcessMemory?
-
Спасибо, вопрос решен. Тему можно закрывать
-
Спасибо, права получил, handle процесса получил.
Начал разбираться с чтением адресов с указателями.
Столкнулся со следующей проблемой:
К примеру:
Адрес денег и его поинтеры
var address = 0x00800150;
var offsets = new byte[] { 0x38, 0x4, 0x0, 0xf0 };С этим проблем нету.
Адрес и поинтеры значения опыта:
address = 0x00800150;
offsets = new byte[] { 0x38, 0x4, 0x0, 0x3a4};Выдает ошибку на массиве byte: 0x3a4
Какие параметры указать, чтобы можно было читать и редактировать значения опыта?
PS Трейнер пишу по видео уроку, и реализацию чтения делаю через: public int ReadBytes(int baseAddress, byte[] offsets)
-
Запускал от имени администратора и Visual studio'13 и саму игру.
Попытался добавить переменную для getlasterror:
Выдает: Ошибка 1008 - Попытка ссылки на несуществующий токен.
В чем проблема и чем она вызвана?
-
По размыслив я решил испытать данный код с туториалом из CE.
И у меня все заработало.
Начал разбираться, почему программа не может получить handle процесса игры space rangers и пришел в одному выводу.
Процесс защищен и в CE открывается только с запуском след. lua скрипта.
dbk_initialize()
dbk_useKernelmodeOpenProcess()
autoAssemble(string.format([[
NtOpenProcess:
jmp %x
]],dbk_NtOpenProcess),true)Вопрос стоит в следующем, как параметра из данного скрипта реализовать на c#, чтобы он смог читать handle процесса?
-
2 компьютер и на обоих стоит win 7 Max
-
Здравствуйте, пишу некий control centre для игры: Space Ranger HD.
Имеется много разработок по оформлению и функциям но я намертво повис на проблеме с hundle процесса.
Вот код программы на c# с простым подключением к процессу:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using System.Runtime.InteropServices;
namespace SpaceRangers_ControlCenter
{
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);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out] byte[] lpBuffer, int dwSize, out int lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, [Out, MarshalAs(UnmanagedType.AsAny)] object lpBuffer, int dwSize, out int lpNumberOfBytesRead);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool ReadProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, IntPtr lpBuffer, int dwSize, out int lpNumberOfBytesRead);
public int pID;
public Form1()
{
InitializeComponent();
}
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("Game found!");
button1.Text = name+" found";
return;
}
}
}
return;
}
public int ReadBytes(int baseAddress, byte[] offsets)
{
if (pID != 0 && baseAddress !=0 && offsets.Length !=0)
{
byte[] buffer = new byte[4];
int bytesread;
var handle = OpenProcess(0x001F0FFF, false, pID);
if (handle != IntPtr.Zero)
{
ReadProcessMemory(handle, (IntPtr)baseAddress, buffer, 4, out bytesread);
for (var i = 0; i < offsets.Length; i++)
{
baseAddress = BitConverter.ToInt32(buffer, 0);
baseAddress += offsets[i];
ReadProcessMemory(handle, (IntPtr)baseAddress, buffer, 4, out bytesread);
}
var result = BitConverter.ToInt32(buffer, 0);
CloseHandle(handle);
return BitConverter.ToInt32(buffer, 0);
}
}
return 0;
}
private void button1_Click(object sender, EventArgs e)
{
GetProcess("Rangers");
var address = 0x0040114C;
var offsets = new byte[] {0x38,0x4,0x0,0xf0};
ReadBytes(address, offsets);
}
}
}Проблема в том, что не принимается значение hundle.
Может я в чем то ошибся при написание, прошу взглянуть свежим умом на данный код.
Записываем свои значения в память процесса
in Создание трейнеров в специальных студиях
Опубликовано
Спасибо, схитрил.
В метод ReadByty добавил условия if:
Тему можно закрывать.