Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Conversión de C# a delphi (https://www.clubdelphi.com/foros/showthread.php?t=91235)

Mtrs.Dante 08-12-2016 15:01:14

Conversión de C# a delphi
 
Hola amigos tengo un codigo en c# q quisiera pasar a delphi si alguien me pudiera ayudar le agradeceria

C#

Código:

    private Mutex mutex;
    private IntPtr thread;
    internal RunProc Window;

  private void threadi()
    {
      STARTUPINFO lpStartupInfo = new STARTUPINFO();
      PROCESS_INFORMATION lpProcessInformation = new PROCESS_INFORMATION();
      byte[] arrayToSearchThrough = File.ReadAllBytes(this.ExecutableName);
      byte[] input1 = new byte[4];
      Array.Copy((Array) arrayToSearchThrough, 60, (Array) input1, 0, 2);
      byte[] input2 = new byte[4];
      int num1 = RunProc.BytesToInt(input1);
      int sourceIndex1 = num1 + 296;
      int sourceIndex2 = num1 + 300;
      int sourceIndex3 = num1 + 304;
      int sourceIndex4 = num1 + 308;
      Array.Copy((Array) arrayToSearchThrough, sourceIndex3, (Array) input2, 0, 4);
      int num2 = RunProc.BytesToInt(input2);
      Array.Copy((Array) arrayToSearchThrough, sourceIndex4, (Array) input2, 0, 4);
      int num3 = RunProc.BytesToInt(input2);
      Array.Copy((Array) arrayToSearchThrough, sourceIndex2, (Array) input2, 0, 4);
      int num4 = RunProc.BytesToInt(input2) + 4194304;
      Array.Copy((Array) arrayToSearchThrough, sourceIndex1, (Array) input2, 0, 4);
      int num5 = RunProc.Round1000(RunProc.BytesToInt(input2));
      int num6 = RunProc.IndexOf(arrayToSearchThrough, Encoding.ASCII.GetBytes("steam_api.dll"));
      if (num6 < num3 && num6 > num3 + num2)
      {
        int num7 = (int) MessageBox.Show("Cannot find steam_api.dll string in executable, make sure you have the proper original files!");
      }
      else
      {
        int num8 = num6 - num3;
        if (!Win32Apis.CreateProcess(this.ExecutableName, this.Commandargs, IntPtr.Zero, IntPtr.Zero, false, 516U, IntPtr.Zero, (string) null, ref lpStartupInfo, out lpProcessInformation))
        {
          int num9 = (int) MessageBox.Show("Cannot create process!");
        }
        else
        {
          this.thread = lpProcessInformation.hThread;
          uint lpflOldProtect1;
          Win32Apis.VirtualProtectEx(lpProcessInformation.hProcess, new IntPtr(num4), new UIntPtr((uint) num5), 64U, out lpflOldProtect1);
          UIntPtr lpNumberOfBytesWritten;
          Win32Apis.WriteProcessMemory(lpProcessInformation.hProcess, new IntPtr(num4 + num8), Encoding.ASCII.GetBytes("teknomw3.dll"), 13U, out lpNumberOfBytesWritten);
          uint lpflOldProtect2;
          Win32Apis.VirtualProtectEx(lpProcessInformation.hProcess, new IntPtr(num4), new UIntPtr((uint) num5), lpflOldProtect1, out lpflOldProtect2);
          if (lpNumberOfBytesWritten == (UIntPtr) 0U)
          {
            int num10 = (int) MessageBox.Show("Cannot write to process memory!");
            Win32Apis.TerminateProcess(lpProcessInformation.hProcess, 0U);
            Win32Apis.TerminateThread(lpProcessInformation.hThread, 0U);
          }
          else
          {
            this.mutex = new Mutex(false, "TeknoMW3" + (lpProcessInformation.dwProcessId ^ 87U).ToString("X8"));
            int num10 = (int) Win32Apis.ResumeThread(lpProcessInformation.hThread);
          }
        }
      }
    }


mamcx 08-12-2016 18:59:42

Recuerda ponerle los tags de codigo, para que se entienda.

Mientras convertir codigo puede ser util, es mejor saber que es lo que quieres. C# no es Delphi, y puede que exista una forma de lograr el mismo objetivo al "estilo delphi" que no requiere hacer la conversion.

Mtrs.Dante 08-12-2016 21:25:47

Es codigo es de un lansador de un juego q crea ese hilo en espera de q el proseso se ejecute para inyectarle una dll o eso creo yo, y como no estoy seguro de q hacen cada una de esas funcionde de C# lo puse para si aguien pudiera crear el espejo de eso en delphi pa poderlo entender.

exmachina 09-12-2016 17:31:04

Cita:

Empezado por Mtrs.Dante (Mensaje 511625)
Es codigo es de un lansador de un juego q crea ese hilo en espera de q el proseso se ejecute para inyectarle una dll o eso creo yo, y como no estoy seguro de q hacen cada una de esas funcionde de C# lo puse para si aguien pudiera crear el espejo de eso en delphi pa poderlo entender.

Código PHP:

byte[] arrayToSearchThrough 

Es una matriz. byte indica el tipo, [] indica que es una matriz y arrayToSearchThrough es el nombre de la variable



Código PHP:

byte[] arrayToSearchThrough File.ReadAllBytes(this.ExecutableName); 

File.ReadAllBytes lee y almacena en una matriz todos los bytes del archivo especificado (en este caso ExecutableName se supone representa a una cadena) y devuelve la matriz. Por lo tanto arrayToSearchThrough es la matriz que contiene los bytes. En C# puede asignarse el valor a una variable en su declaracion:




Código PHP:

Array.Copy 

Copia un intervalo de elementos de una matriz a otra
https://msdn.microsoft.com/es-es/lib...v=vs.100).aspx



Código PHP:

byte[] input1 = new byte[4]; 

Crea una matriz de cuatro elementos (el tipo de datos es byte). En C# las matrices estan basadas en cero, por lo tanto el indice de primer elemento siempre es cero y, en este caso, el indice del ultimo elemento es 3



STARTUPINFO, PROCESS_INFORMATION, CreateProcess, VirtualProtectEx, WriteProcessMemory, TerminateProcess
Son estructuras y funciones de la API de windows, no tienen nada que ver con el lenguaje usado.



Código PHP:

private Mutex mutex

Declara una variable cuyo tipo de datos es la clase Mutex. Esta clase encapsula a la API de windows (CreateMutex, etc)
https://msdn.microsoft.com/es-es/library/system.threading.mutex(v=vs.100).aspx



Falta el codigo de la clase RunProc ya que si no recuerdo mal esto no forma parte de .NET y no hay forma de saber que hace RunProc.BytesToInt, RunProc.IndexOf


La franja horaria es GMT +2. Ahora son las 22:55:13.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi