es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Transformando C# a Powershell con participación de DllImport.

Recientemente he estado trabajando en un pequeño proyecto paralelo para ver si puedo hacer que la edición de memoria funcione con PowerShell. He creado un pequeño script en C# que no requiere privilegios administrativos y, al ejecutarse, le da al usuario monedas y diamantes máximos en Hill Climb Racing.

Mi desafío en estos momentos es encontrar una forma de ejecutar este código en mi computadora portátil escolar, que no tiene privilegios de administrador ni acceso para abrir ejecutables desconocidos, pero sí tiene acceso a PowerShell (por supuesto, sin privilegios de administrador). He estado investigando mucho, pero no puedo encontrar una buena forma de adaptar este script a PowerShell. Si alguien tiene alguna buena idea, por favor avíseme, porque realmente me está volviendo loco en este momento.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en c# y PowerShell, sugeriría los siguientes pasos para trasladar el script de C# a PowerShell:

    1. Traducir el código de C# a código de PowerShell.

    Aquí está el código de PowerShell traducido:

    Add-Type -TypeDefinition @'
    using System;
    using System.Diagnostics;
    using System.Runtime.InteropServices;
    public class Programmmm
    {
        [DllImport("kernel32.dll")]
        public static extern bool WriteProcessMemory(IntPtr hProcess, long lpBaseAddress, byte[] lpBuffer, uint nSize, out uint lpNumberOfBytesRead);
    
        public static void Main()
        {
            long BaseAddress;
            IntPtr ProcessHandle;
            Process process = Process.GetProcessesByName("HillClimbRacing")[0];
            if (process.Handle.ToInt64() != 0L)
            {
                BaseAddress = process.MainModule.BaseAddress.ToInt64();
                ProcessHandle = process.Handle;
                uint num = 0U;
                WriteProcessMemory(ProcessHandle, BaseAddress + 0x28CAD4, BitConverter.GetBytes(2147483647), 4U, out num);
                WriteProcessMemory(ProcessHandle, BaseAddress + 0x28CAEC, BitConverter.GetBytes(2147483647), 4U, out num);
            }
        }
    }
    '@
    
    [Programmmm]::Main()
    
    1. Guardar el código de PowerShell como un archivo de script.

    Guarda el código traducido como un archivo de script de PowerShell con una extensión “.ps1” (por ejemplo, “hillclimbracing.ps1”).

    1. Otorgar permisos de ejecución al script de PowerShell.

    Dado que la computadora portátil de la escuela no tiene privilegios de administrador, debemos otorgar manualmente los permisos de ejecución al script de PowerShell. Para hacer esto:

    • Abre PowerShell como un usuario no administrador.
    • Navega hasta el directorio donde se encuentra el script “hillclimbracing.ps1” (usando el comando cd).
    • Ejecuta el siguiente comando para otorgar permisos de ejecución al script:
    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    
    1. Ejecuta el script de PowerShell.

    Finalmente, ejecuta el script de PowerShell mediante el siguiente comando:

    .\hillclimbracing.ps1
    

    Esto debería ejecutar el código de C# y darte la cantidad máxima de monedas y diamantes en Hill Climb Racing, sin requerir privilegios de administrador o acceso para abrir ejecutables desconocidos.

Comments are closed.