Este es el codigo que tengo ahora mismo (lo copie de algo que encontre buscando en google ya q no sabia como hacerlo sin memory.dll):
Código:
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.Runtime.InteropServices;
using System.Diagnostics;
namespace Sergey_Tool
{
public partial class Form1 : Form
{
[DllImport("kernel32.dll")]
static extern IntPtr OpenProcess(ProcessAccessFlags dwDesiredAccess, [MarshalAs(UnmanagedType.Bool)] bool bInheritHandle, int dwProcessId);
[DllImport("kernel32.dll", SetLastError = true)]
static extern bool WriteProcessMemory(IntPtr hProcess, IntPtr lpBaseAddress, byte[] lpBuffer, uint nSize, out int lpNumberOfBytesWritten);
[DllImport("kernel32.dll")]
public static extern Int32 CloseHandle(IntPtr hProcess);
[Flags]
public enum ProcessAccessFlags : uint
{
All = 0x001F0FFF,
Terminate = 0x00000001,
CreateThread = 0x00000002,
VMOperation = 0x00000008,
VMRead = 0x00000010,
VMWrite = 0x00000020,
DupHandle = 0x00000040,
SetInformation = 0x00000200,
QueryInformation = 0x00000400,
Synchronize = 0x00100000
}
public Form1()
{
InitializeComponent();
}
public static void WriteMem(Process p, int address, long v)
{
var hProc = OpenProcess(ProcessAccessFlags.All, false, (int)p.Id);
var val = new byte[] { (byte)v };
int wtf = 0;
WriteProcessMemory(hProc, new IntPtr(address), val, (UInt32)val.LongLength, out wtf);
CloseHandle(hProc);
}
private void Button1_Click(object sender, EventArgs e)
{
var p = Process.GetProcessesByName("RustClient").FirstOrDefault();
WriteMem(p, 0x2A8661BE778, 1);
}
}
}
El address que estamos viendo no es un pointer porque es un address estático, pero ahora, este es el error:
https://imgur.com/a/PVKd0wM
Ahí dice que el address en la función es long y que deberia ser int, pero lo que pasa es que ese es el address osea no puedo cambiar el address del juego a int ._. (quizás hay alguna forma de hacer que la función permita long, pero de igual forma me parece que no funcionaria, porque si con la librería memory no funciona no se si así funcionara, pero ese es el caso, que no tengo ni idea de como hacer que funcione)
No se si ese error tendrá que ver con que no me funciona ni siquiera con memory.dll, pero necesito que si alguno de ustedes conoce una solución que me la deje aquí (recuerden que lo que necesito es cambiar el valor de ese address de alguna forma) Y por si lo preguntan, con memory.dll simplemente e hecho lo típico, abro el proceso, y le doy a WriteMemory(address, tipo(en este caso int), valor) pero tampoco funciona asi