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

 

 


Tema destacado: Entrar al Canal Oficial Telegram de elhacker.net


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  Problemas al cambiar valores de memoria de un proceso en C#
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas al cambiar valores de memoria de un proceso en C#  (Leído 3,138 veces)
Yumaz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
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


« Última modificación: 20 Febrero 2023, 04:53 am por Yumaz » En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Problemas al cambiar valores de memoria de un proceso en C#
« Respuesta #1 en: 19 Febrero 2023, 14:46 pm »

Hola:

Exactamente. ¿Qué es lo que quieres cambiar del juego?

¿Vida infinita?

Por decir algo.


En línea

Yumaz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Problemas al cambiar valores de memoria de un proceso en C#
« Respuesta #2 en: 20 Febrero 2023, 02:58 am »

Una de las cosas es el recoil de las armas (es un float q va de 100 a 0, mientras menor sea el numero, menor recoil tienen las armas), pero da igual lo que le intente cambiar, no le puedo modificar nada, ningun address, ningun tipo de valor, da igual lo que le ponga que no hace nada, y ese no es el primer juego con el q intento hacer esto ni la primera vez q lo hago, sin embargo si es la primera vez q veo q no se le cambia ningun valor al juego

A y cabe mencionar que con el cheat engine si se puede, solo q cuando utilizo visual studio, no me deja, no pasa nada no hace nada

Ese es el problema como tal, simplemente no puedo cambiarle nada, ni con la libreria memory.dll, ni sin ella, simplemente no se puede, y solamente con el rust, con cualquier otro juego o proceso funciona perfectamente

Por eso pido q si alguien sabe algun otro metodo o si le a pasado esto alguna vez que me pueda ayudar
« Última modificación: 20 Febrero 2023, 03:00 am por Yumaz » En línea

Yumaz

Desconectado Desconectado

Mensajes: 3


Ver Perfil
Re: Problemas al cambiar valores de memoria de un proceso en C#
« Respuesta #3 en: 20 Febrero 2023, 04:53 am »

¡Encontre el problema! Por si alguien mas le sucede en un futuro:

La cosa esta en que yo utilizaba memory.dll de 32 bits y el proyecto en preferencia 32 bits y el rust es un juego de 64 bits, por lo tanto lo unico que tenia que hacer era cambiar el proyecto a x64 y la libreria memory.dll a la de x64, ya que los address de los juegos x64 al parecer son mas grandes
En línea

Meta


Desconectado Desconectado

Mensajes: 3.438



Ver Perfil WWW
Re: Problemas al cambiar valores de memoria de un proceso en C#
« Respuesta #4 en: 20 Febrero 2023, 23:52 pm »

Felicidades.

REcuerdo que el https://www.cheatengine.org/downloads.php no me deja buscar nada von .net y sin con C++ nativo.
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Proceso en Memoria
Ingeniería Inversa
AsTeroine 2 2,403 Último mensaje 15 Abril 2005, 10:14 am
por UnpaCker!
cambiar memoria de un juego y escribir en memoria By Sacha
Ingeniería Inversa
EL PRINTERO 0 3,656 Último mensaje 24 Agosto 2007, 23:36 pm
por EL PRINTERO
Modificar Valores de la Memoria
Programación Visual Basic
WILMER5 0 1,479 Último mensaje 3 Septiembre 2008, 19:13 pm
por WILMER5
Duda sobre valores de la memoria!!! « 1 2 »
Ingeniería Inversa
WILMER5 10 10,144 Último mensaje 19 Noviembre 2008, 11:37 am
por Dari0s
Tomar valores hex de memoria con OllyScript??
Ingeniería Inversa
.:UND3R:. 4 3,263 Último mensaje 15 Noviembre 2011, 19:06 pm
por MCKSys Argentina
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines