Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-12-2016
Mtrs.Dante Mtrs.Dante is offline
Registrado
NULL
 
Registrado: dic 2016
Posts: 2
Poder: 0
Mtrs.Dante Va por buen camino
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);
          }
        }
      }
    }

Última edición por dec fecha: 09-12-2016 a las 10:41:13. Razón: Poner etiqueta CODE
Responder Con Cita
  #2  
Antiguo 08-12-2016
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Poder: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
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.
__________________
El malabarista.
Responder Con Cita
  #3  
Antiguo 08-12-2016
Mtrs.Dante Mtrs.Dante is offline
Registrado
NULL
 
Registrado: dic 2016
Posts: 2
Poder: 0
Mtrs.Dante Va por buen camino
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.
Responder Con Cita
  #4  
Antiguo 09-12-2016
exmachina exmachina is offline
Miembro
NULL
 
Registrado: sep 2016
Ubicación: 127.0.0.1
Posts: 30
Poder: 0
exmachina Va por buen camino
Cita:
Empezado por Mtrs.Dante Ver Mensaje
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
HASAR OCX 2G CONVERSIÓN DE VB a Delphi DeG Impresión 10 24-02-2017 00:43:40
Ayuda conversión C++ a Delphi DarkDudae Varios 3 28-11-2013 19:12:48
Conversion de VB a Delphi jjmcira Varios 8 06-04-2011 14:51:23
Conversion a delphi 6 mapc Varios 2 01-09-2006 14:27:56
Conversión de linea en Vbasic a Delphi torito Varios 4 09-06-2005 19:38:00


La franja horaria es GMT +2. Ahora son las 14:41:10.


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
Copyright 1996-2007 Club Delphi