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

Трнейнер возвращает непонятное значение


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

все время возвращает 192 почему?

вот сам код


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 WindowsFormsApplication3
{
public partial class Form1 : Form
{
[DllImport("kernel32.dll")]
public static extern IntPtr OpenProcess(int dwDesiredAsses, 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, int 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);
public int pID;
public Form1()
{
InitializeComponent();
GetProcess("ToyDefense2.wrp");
}
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;
var adress = 0x00977A60;
var ofsets = new byte[] { 0x34 };
ReadProcess(adress, ofsets);
}
}
}
return;
}
public void WriteByte()
{
var ammoadress = 0x056D0EF4;
byte[] ammobytes = { 0x0F, 0x27 };
var size = 2;
var dummy = new UIntPtr();
var handle = OpenProcess(0x001F0FFF, false, pID);
WriteProcessMemory(handle, (IntPtr)ammoadress, ammobytes, size, out dummy);
CloseHandle(handle);
}
public void ReadProcess(int baseadress, byte[] offset)
{
byte[] buffer = new byte[6];
int size = 1;
int bytespread;
var handle = OpenProcess(0x001F0FFF, false, pID);
ReadProcessMemory(handle, (IntPtr)baseadress, buffer, size, out bytespread);
for (int i = 0; i < offset.Length; i++ )
{
baseadress = BitConverter.ToInt32(buffer, 0);
baseadress += offset[i];
ReadProcessMemory(handle, (IntPtr)baseadress, buffer, size, out bytespread);
}
var result = BitConverter.ToInt32(buffer, 0);
CloseHandle(handle);
label1.Text = Convert.ToString(result);
}
private void button1_Click(object sender, EventArgs e)
{
WriteByte();
}
public void label1_Click(object sender, EventArgs e)
{
}
}
}
using System;

image.png

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

/*---------------------------------------------------------------------------*/

Привет!

Меня смущают size=1 и buffer = new byte[6]. Ты читаешь DWORD - это 4 байта,

так что size и buffer должны быть по 4 байта. Второй момент:

baseadress = BitConverter.ToInt32(buffer, 0);[/font]
baseadress += offset[i];

Переменную baseadress ты конвертируешь в Int, а offset - всё ещё массив byte,

причём в 16-ричной системе счисления.

/*---------------------------------------------------------------------------*/

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

/*---------------------------------------------------------------------------*/

Привет!

Меня смущают size=1 и buffer = new byte[6]. Ты читаешь DWORD - это 4 байта,

так что size и buffer должны быть по 4 байта.

/*---------------------------------------------------------------------------*/

Спасибо

/*---------------------------------------------------------------------------*/

вылетает игра при вызове вот этой функции (

public void WriteByte()
{
var adress = 0x00977A60;
var ofsets = new byte[] { 0x34 };
int ammoadress = adress + ofsets[0];
byte[] ammobytes = { 0xB3, 0x15 };
var size = 2;
var dummy = new UIntPtr();
var handle = OpenProcess(0x001F0FFF, false, pID);
WriteProcessMemory(handle, (IntPtr)ammoadress, ammobytes, size, out dummy);
CloseHandle(handle);
}

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

1-е) Почему ты адрес приводишь к типу IntPtr, а не UIntPtr?

2-е) Зачем ты заводишь переменную size, когда в C# и так можно получить размер массива?

3-е) Почему у тебя функция WriteByte не принимает входные параметры, а данные задаются внутри?

4-е) Почему функция WriteByte записывает 2 байта?

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

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

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

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