elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a la Factorización De Semiprimos (RSA)


  Mostrar Temas
Páginas: [1]
1  Programación / .NET (C#, VB.NET, ASP) / Problemas al cambiar valores de memoria de un proceso en C# en: 19 Febrero 2023, 13:38 pm
Hola a todos, tengo un problema, estoy intentando hacer una aplicación en c# que edite ciertos valores en la memoria de otro proceso o mejor dicho un juego, el juego se llama Rust y lo que pasa no me ha pasado con ningún otro juego con el q lo haya intentado, intenté con la librería memory.dll pero no funciona (funciona perfectamente con otros juegos pero con el Rust simplemente no cambia nada y ya esta), ahora mismo estoy intentando sin ninguna librería haber si da resultados diferentes y me dio un error que quizas este relacionado, pero incluso si no lo está me podrían ayudar.

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
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines