Solo para los grandes Crack de Mql

Foro dedicado a todo lo relacionado con la versión 4 de la plataforma de Metaquotes.
Responder
cardan783
Mensajes: 22
Registrado: 25 Abr 2020 17:22

Solo para los grandes Crack de Mql

Mensaje por cardan783 »

Hola a todos, me gustaria saber si existe alguna función en mql4 donde yo pueda leer el numero MAC de una computadora, me urge saberlo. De antemano muchas gracias.

Avatar de Usuario
X-Trader
Administrador
Mensajes: 10995
Registrado: 06 Sep 2004 10:18
Contactar:

Re: Solo para los grandes Crack de Mql

Mensaje por X-Trader »

Hola cardan783, a ver qué te parece este código de muestra que he encontrado, no coge la MAC pero te permite crear un número de serie único igualmente:

Código: Seleccionar todo

//+------------------------------------------------------------------+
//| Function..: SystemDriveSerialNumber
//| Purpose...: Retrieve the serial number of a logical drive stored in the drive's boot sector.
//| Parameters: sDrive -  root directory of volume to retrieve Serial number.
//| Returns...: sNumber - drive serial number, or null string in the case of an error.
//| Example...: string sNumber=SystemDriveSerialNumber("C");
//| Thank You.: Big thank you to Stanislav Starikov of MetaQuotes www.metaquotes.net for correcting the 
    parameter type
//| Notes.....: Insert the following code at the top of your program in the EX4 imports section:

#import "Kernel32.dll"
  bool GetVolumeInformationA(string RootPathName,
       string VolumeNameBuffer, int VolumeNameSize,
       int& VolumeSerialNumber[], int MaximumComponentLength,
       int FileSystemFlags, string FileSystemNameBuffer,
       int FileSystemNameSize);

#import  
//+------------------------------------------------------------------+*/
string SystemDriveSerialNumber(string sDrive) {
  int    iVolumeSerialNumber[1]={0};
  string sVolumeSerialNumber="";
  if(GetVolumeInformationA(sDrive+":\\", "                ", 15, iVolumeSerialNumber, 0, 0, "                ", 15))
  {
    sVolumeSerialNumber=IntegerToHexString(iVolumeSerialNumber[0]);
    sVolumeSerialNumber=StringConcatenate(StringSubstr(sVolumeSerialNumber,0,4), "-", StringSubstr(sVolumeSerialNumber,4));
  }
  return(sVolumeSerialNumber);
}
Por otro lado, si tu objetivo es proteger tu EA, te recomiendo que eches un vistazo a este artículo:

https://www.mql5.com/en/articles/1572


Saludos,
X-Trader
"Los sistemas de trading pueden funcionar en ciertas condiciones de mercado todo el tiempo, en todas las condiciones de mercado en algún momento del tiempo, pero nunca en todas las condiciones de mercado todo el tiempo."

cardan783
Mensajes: 22
Registrado: 25 Abr 2020 17:22

Re: Solo para los grandes Crack de Mql

Mensaje por cardan783 »

Gracias X-Trader, efectivamente es para proteger mi codigo cuando por ejemplo quiera enviarlo a un amigo para que lo pruebe y revise y pues solo pueda funcionar en el equipo especificado en la mac. De todas manera tambien habia encontrado una forma usando la funcion void OnTick(). Gracias voy a hecharle un vistazo al articulo que me enviaste.

Avatar de Usuario
Rafa7
Mensajes: 4835
Registrado: 17 Dic 2009 21:36
Contactar:

Re: Solo para los grandes Crack de Mql

Mensaje por Rafa7 »

cardan783 escribió:
01 Jun 2020 04:27
es para proteger mi codigo cuando por ejemplo quiera enviarlo a un amigo para que lo pruebe y revise
Hola, cardan783.



Si es para eso, puedes poner el código en un fichero de una carpeta compartida solo con él (de Google Drive o Dropbox, por ejemplo) y que el cuando se baje él código, elimine el fichero de la carpeta.

Otra cosa es que quieras expresamente que el código solo se pueda ejecutar en tu máquina y en la suya, para evitar que él la comparta con otros que podrían ejecutarlo. Si por ahí van los tiros, no sé que decirte, ya que no conozco el Mql.



Saludos.
¡Jesús es el Rey de Reyes y el Señor de Señores!
https://loquepermanece.blogspot.com

cardan783
Mensajes: 22
Registrado: 25 Abr 2020 17:22

Re: Solo para los grandes Crack de Mql

Mensaje por cardan783 »

Rafa7 escribió:
01 Jun 2020 09:05
cardan783 escribió:
01 Jun 2020 04:27
es para proteger mi codigo cuando por ejemplo quiera enviarlo a un amigo para que lo pruebe y revise
Hola, cardan783.



Si es para eso, puedes poner el código en un fichero de una carpeta compartida solo con él (de Google Drive o Dropbox, por ejemplo) y que el cuando se baje él código, elimine el fichero de la carpeta.

Otra cosa es que quieras expresamente que el código solo se pueda ejecutar en tu máquina y en la suya, para evitar que él la comparta con otros que podrían ejecutarlo. Si por ahí van los tiros, no sé que decirte, ya que no conozco el Mql.



Saludos.
Gracias por responder Rafa7 pero efectivamente es para proteger mi codigo sobre eso mismo que tu acabas de decir que no se pueda compartir y solo se ejecute en el equipo de la persona a quien yo se lo doy, y pues ya logre implementar el codigo cosa que es relativamente facil claro en algunos casos de proteccion ya que existen diferentes metodos de proteccion y hasta el cifrado Base64 que es un poco mas complejo pero metiendose unos dias estudiando el cifrado ese pues puedes digo yo no se puedes aprender a implementarlo en tu codigo.

Avatar de Usuario
cdtrader
Mensajes: 285
Registrado: 28 Dic 2016 17:04

Re: Solo para los grandes Crack de Mql

Mensaje por cdtrader »

Yo muchas veces ponía por número de cuenta de MetaTrader o que la cuenta sea demo


Enviado desde mi iPad utilizando Tapatalk

BePo
Mensajes: 4
Registrado: 19 Jun 2020 16:13

Re: Solo para los grandes Crack de Mql

Mensaje por BePo »

cardan783 escribió:
02 Jun 2020 13:24
Rafa7 escribió:
01 Jun 2020 09:05
cardan783 escribió:
01 Jun 2020 04:27
es para proteger mi codigo cuando por ejemplo quiera enviarlo a un amigo para que lo pruebe y revise
Hola, cardan783.



Si es para eso, puedes poner el código en un fichero de una carpeta compartida solo con él (de Google Drive o Dropbox, por ejemplo) y que el cuando se baje él código, elimine el fichero de la carpeta.

Otra cosa es que quieras expresamente que el código solo se pueda ejecutar en tu máquina y en la suya, para evitar que él la comparta con otros que podrían ejecutarlo. Si por ahí van los tiros, no sé que decirte, ya que no conozco el Mql.



Saludos.
Gracias por responder Rafa7 pero efectivamente es para proteger mi codigo sobre eso mismo que tu acabas de decir que no se pueda compartir y solo se ejecute en el equipo de la persona a quien yo se lo doy, y pues ya logre implementar el codigo cosa que es relativamente facil claro en algunos casos de proteccion ya que existen diferentes metodos de proteccion y hasta el cifrado Base64 que es un poco mas complejo pero metiendose unos dias estudiando el cifrado ese pues puedes digo yo no se puedes aprender a implementarlo en tu codigo.
B64 es una codificación, se puede decodificar fácilmente. No está pensado para proteger nada sino para disponer de texto ASCII y evitar posibles problemas si se usan, por ejemplo, protocolos de texto.

Existen muchos sistemas de cifrado y es fácil encontrar su código fuente. Para tu caso, creo que te puede valer cualquiera (AES, IDEA, BlowFish...) pues es improbable que alguien se vaya a meter en la tarea de intentar romper tu cifrado. Aquí tienes un ejemplo: https://www.c-sharpcorner.com/article/a ... n-c-sharp/

Como clave puedes usar algo que solo tenga tu cliente. Su MAC, número de serie del disco duro, combinarlo con su usuario, etc.

Un esquema podría ser desarrollar una aplicación que genere un archivo cifrado con los datos que necesitas de tu cliente (MAC...). El cliente lo ejecuta en su equipo y te envía ese archivo sin saber qué es lo que usas de su equipo para proteger tu sistema, pues está cifrado.

Ese archivo lo descifras para obtener el MAC (o lo que decidas usar) y tu código lo proteges usando eso como clave de cifrado. El código de tu sistema usará esos datos para obtener la clave (en otro equipo será otra MAC y no sevirá) y descifrar lo que necesites proteger.

Lo mejor es encapsular todo el código de la protección en una DLL y usar esa librería tanto en tu sistema como en la aplicación que el cliente ejecuta para darte los datos que necesitas para generar la clave.

De todas formas, no tiene sentido emplear mucho esfuerzo en la protección si te va a costar más que lo que estás protegiendo. Ten en cuenta quienes son los receptores/interesados en tu sistema y si les compensa o son capaces de romper tu protección. Si con algo simple puedes "asegurarte" de tener tu sistema a salvo, hazlo así. Por mucho que lo compliques, si el código está en su equipo, es posible que rompan tu protección.

En este tipo de aplicaciones, en mi opinión, lo más eficaz es que haya diversos puntos de tu sistema protegidos de distinta forma. Si el atacante encuentra uno (por ejemplo, el que hace que no funcione nada y te lo indica con un mensaje, que es fácil de localizar) puede que tu sistema funcione pero también puede que no funcione correctamente porque el resto de puntos protegidos no están resueltos pero tampoco avisan (para dificultar su localización). El atacante en este caso tiene muy dificil saber con certeza si ha roto o no tu protección y arriesgarse a usar tu sistema incompleto, cuando estás manejando dinero, es mucho riesgo.


Responder

Volver a “Metatrader 4”