Para proteger los *.EXE

1,250 views
Skip to first unread message

Arnaldo R. Tablante R.

unread,
Mar 23, 2015, 2:41:41 PM3/23/15
to publice...@googlegroups.com
buenas tardes comunidad, anteriormente usaba el refox 8.0 para proteger mis desarrollos pero desde cambie a visual foxpro 9.0 me da error de que el ejecutable esta corrupto, pude bajar el refox 12 en demo pero queria saber si hay alguna otra herramienta que ustedes esten utilizando mejor que el refox ? gracias de antemano 

Carton Jeston

unread,
Mar 24, 2015, 2:28:55 AM3/24/15
to publice...@googlegroups.com
Actualmente uso el VFP C++ COMPILER, que ademas de proteccion compilando tu proyecto de fox a C++ con lo que se acaba la descompilacion, incluye mejoras y correccion de errores por si algun dia al zorro se le ocurre morirse o dar algun problema y le da mayor alcance en el futuro.

Hace unos dias libero la previa del compilador para 64 bits, por lo cual ahora vale 400USD. Yo lo que recomiendo es bajarse la demo, hacer una copia de tu aplicacion y estudiar su funcionamiento. En mi caso me basto con cambiar el comando STORE por = en todo y pelearme un poco mas con la ofuscacion (no obligatoria) en una aplicacion de varias toneladas de codigo.

http://www.baiyujia.com/vfpcompiler/en/default.asp

Carton Jeston

unread,
Mar 24, 2015, 2:30:03 AM3/24/15
to publice...@googlegroups.com
Por cierto, si usas refox8 y es bajado de internet, la descompilacion no suele ser muy complicada.

Carton Jeston

unread,
Mar 24, 2015, 2:36:44 AM3/24/15
to publice...@googlegroups.com
Tambien vale la pena que mires el defox...

http://www.foxite.com/downloads/default.aspx?id=214

Victor Espina

unread,
Mar 24, 2015, 10:10:19 AM3/24/15
to publice...@googlegroups.com
Arnaldo, la triste realidad es que no hay, hasta donde yo se,  ninguno de los productos existentes para proteger un EXE de VFP es infalible; todos se pueden decompilar usando la misma u otras herramientas.

Yo hice las paces con esto hace tiempo y me di cuenta de que no puedes protegerte contra alguien que quiera decompilar tu software.  Solo puedes protegerte conta el usuario basico o intermedio que busca la forma de instalar tu software sin pagar la licencia, pero que no tiene los conocimientos como para decompilar la aplicacion, encontrar el codigo que aplica la licencia, circunvalarlo y recompilar la aplicacion.


Victor Espina

Carton Jeston

unread,
Mar 25, 2015, 2:32:54 AM3/25/15
to publice...@googlegroups.com

Victor, VFP C++ en el mejor de los casos puedes descompilar los formularios o los informes, es decir, la estructura del proyecto pero todo el codigo de compila en C++

Otra cosa sera desensamblar el dll de C++ pero eso no sera como tener todo el codigo en fox como consigue extraer refox y similares.

Jean Pierre Adonis De La Cruz Garcia

unread,
Mar 25, 2015, 10:32:36 AM3/25/15
to publice...@googlegroups.com
Para mi mejor es usar el OFUSCADOR
y a la vez, usar el DEFOX.
es una manera mas segura de proteger los EXE
solo es usar un poco de logica y usar ambos procedimientos de una manera adecuada, y su codigo estara bien protegido.

Victor Espina

unread,
Mar 25, 2015, 12:26:56 PM3/25/15
to publice...@googlegroups.com
LA ofuscacion en un programa VFP solo es posible si no usas macrosustitucion... si la usas, entonces el codigo dejara de funcionar porque tu programa hara referencias a variables y/u objetos que ya no se llaman de la misma forma que en tu codigo fuente.

Victor

Carlos Miguel FARIAS

unread,
Mar 25, 2015, 6:25:50 PM3/25/15
to Grupo Fox
No ofusques la variable que se usa en la macro-sustitución.
Una macro-sustitución solo la veo imprescindible cuando quieres accede a elementos del formulario (creando por ejemplo).
Tampoco puedes ofuscar los nombres en las tablas del Servidor. aunque, conozco colegas que a las columnas las llaman col1, col2, col3, etc. y a las tablas tabla1, tabla2, y ellos en su propia documentación saben de que se trata pero el que mira el código, es un galimatias.
La ofuscación es una forma interesante, y se puede hacer directamente desde fox.
Saludos: Miguel, La Pampa (RA)

Victor Espina

unread,
Mar 25, 2015, 7:05:03 PM3/25/15
to publice...@googlegroups.com
Miguel, me referia a programas que ofuscan tu codigo fuente automaticamente.  Ni en la peor de mis locuras se me ocurriria ofuscar yo manualmente mi codigo.  Eso es una locura.

Victor

Carlos Miguel FARIAS

unread,
Mar 25, 2015, 7:15:12 PM3/25/15
to Grupo Fox
Ofuscar tu codigo con Fox no es una locura, puede ser un poco laborioso, pero se puede hacer.
Hace un tiempo (varios años) pase en este foro como hacerlo.
Te puedo aclarar que seguirle el hilo a un programa ofuscado, se pone muy dificil.
Saludos: Miguel, La Pampa (RA)

Antonio Meza

unread,
Mar 25, 2015, 7:15:14 PM3/25/15
to publice...@googlegroups.com
Consulta:

Lo que comentan de ofuscar el código es usar archivos .h ? es decir ofuscar.h

Luego dentro del archivo poner algo así

#Define valor 100

Aplicando esa facilidad de otra forma, o de que forma se ofusca el código?

saludos
Antonio Meza 

Jean Pierre Adonis De La Cruz Garcia

unread,
Mar 25, 2015, 7:28:00 PM3/25/15
to publice...@googlegroups.com
asi es mi estimado, y usándolo de una manera adecuada, y apoyándose de otras herramientas adicionales, como DEFOX y C++ Compiler, tenlo por seguro, que podras tener un Codigo Fuente protegido para que no te pirateen,.
Yo se por que te lo digo.
Debes de estudiarlo un poco y después podrás tomar tu conclusion.

Antonio Meza

unread,
Mar 25, 2015, 7:50:16 PM3/25/15
to publice...@googlegroups.com
y dejando a un lado el misterio un ejemplo de como hacerlo? digo es un grupo para compartir no para dividir jajajaj

saludos
Antonio Meza

Jean Pierre Adonis De La Cruz Garcia

unread,
Mar 25, 2015, 8:38:59 PM3/25/15
to publice...@googlegroups.com
La cosa es que al ponerlo explicativo, se dice cual es el metodo que se realiza, y es ahi donde los Crackers actuan para desproteger los archivos ejecutables. al menos ya tiene una pista, y no es por envidia, sino es por que ha pasado.

Antonio Meza

unread,
Mar 25, 2015, 9:15:03 PM3/25/15
to publice...@googlegroups.com
Miguel podrías compartir de nuevo un ejemplo de como hacerlo?

saludos
Antonio Meza

Antonio Meza

unread,
Mar 25, 2015, 9:15:53 PM3/25/15
to publice...@googlegroups.com
No hay problema, no quiero que te vayan a piratear el nuevo hilo negro que inventaste jejejej

saludos
Antonio Meza

Carlos Miguel FARIAS

unread,
Mar 26, 2015, 8:22:11 AM3/26/15
to Grupo Fox
Acá va un pequeño ejemplo.
Solo a los efectos de mostrar como queda el código ofuscado.
En el archivo de inclusión la primer parte ofusca las variables y procedimientos, la segunda parte ofusca las cadenas de caracteres.
Las cadenas de caracteres es la parte más difícil porque implica convertir cada letra o símbolo en su ASCII correspondiente, en el ejemplo, cada letra ocupa dos dígitos ya que no uso acentuados u otros con código mayor a 100, la otra es usar dos caracteres hexadecimales.
Cuando se genera un FXP, el fox elimina todos los comentarios y reemplaza toda coincidencia en el texto de la izquierda en el define por el texto a la derecha.
El fulano que mira el código descompilado, ve variables formadas por ceros y unos, que no le dan ninguna pista de lo que hacen, podrá si entender el uso de las variables locales o muy asociadas a alguna estructura de programación (por ejemplo el indice en un FOR) pero como su nombre se verá muy parecido a parámetros y demás variables, le va a ser muy difícil comprender que está accediendo.
En cuanto a las cadenas de texto ofuscadas, aunque pueda revertir el cifrado, siempre le va a resultar molesto.
Y en cuanto a la programación, salvo el caso de las string, el programa lo puedes desarrollar sin cambiar la forma, solo saber que todo nombre de variable nueva implica agregarla al diccionario.
Tu sigues viendo el fuente normal (el tuyo), el que descompila se encontrará con un programa que si tiene que adaptar, le va a costar encontrar el punto de quiebre.
Ojo. La ofuscación solo protege o demora que un hacker acceda al código. Pero si el programa funciona con solo copiarlo y pegarlo, no te protege que este ofuscado.
El otro paso es ofuscar los nombres de las columnas de las tablas de datos y el nombre de las tablas, pero eso no se logra con simples defines.
Debes crear el define para cada campo de cada tabla, y al crear la tabla, usar esos nombres "ofuscados".
El programa se verá bien (el fuente original) pero cuando quieras ver las tablas para control directo, verás esos nombres de columna "ofuscantes".
Saludos: Miguel, La Pampa (RA)
Ofusquito._rar

Antonio Meza

unread,
Mar 26, 2015, 11:36:58 AM3/26/15
to publice...@googlegroups.com
Fantástico Miguel!!

Sera posible que puedas ese proyecto que enviaste compilarlo y luego descomplilarlo para ver como queda? es que no tengo refox ni otro software de ese tipo.

Y una duda adicional, en mi caso todos mis desarrollos están contenidos en clases visuales VCX, por ahí leí algunas vez que se pueden limpiar ciertos campos de esos archivos VCX y ya no se ve el código, mi duda es que si al descompliar este código se puede recuperar cuando ya fue limpiado previamente? o solo que se le aplique reingenieria inversa?

saludos
Antonio Meza

Jean Pierre Adonis De La Cruz Garcia

unread,
Mar 26, 2015, 12:29:38 PM3/26/15
to publice...@googlegroups.com
Antonio te puedo decir que si, esos metodos simplemente de protecciòn noson muy recomendables, ya que al dar el proceso de como se protege un archivo, para los que son crackers, se les hace mas facil atacar el procedimiento usando el Ing.Inv. y se puede ver los codigos completo, no usando REFOZ por si acaso, sino usando metodos directos.

arquinav

unread,
Mar 26, 2015, 12:49:59 PM3/26/15
to publice...@googlegroups.com
prg después de compilarlo

LOCAL _01101100001000101111[1], _11011100010100011111[1]
 LOCAL _01001100011000001111, _01101100011100000111 AS INTEGER
 CD f:\desktop\ofusquito
 _01101100011100000111 = ALINES(_01101100001000101111, _00001111000111001101_("80827377698244836971857868654484698267698265", .T.), 1, ",")
 DIMENSION _11011100010100011111[_01101100011100000111]
 _11011100010100011111 = ""
 FOR _01001100011000001111 = 1 TO _01101100011100000111
    _11011100010100011111[_01001100011000001111] = _01011110011100001011(_01101100001000101111+" "+_00001111000111001101_("76766577656865", .T.))
    IF _11011100010100011111(_01001100011000001111)==_00001111000111001101_("67657867697679")
       EXIT
    ENDIF
 ENDFOR
 FOR _01001100011000001111 = 1 TO _01101100011100000111
    _11001101011100000101(_01101100001000101111(_01001100011000001111), _11011100010100011111(_01001100011000001111))
 ENDFOR
ENDPROC
**
FUNCTION _01011110011100001011
 LPARAMETERS _01001100111100001010
 RETURN INPUTBOX(_00001111000111001101_("7378718269836932686584798358", .T.), _01001100111100001010, _00001111000111001101_("837378326865847983", .T.), 5000, _00001111000111001101_("7879328269838079786869"), _00001111000111001101_("67657867697679"))
ENDFUNC
**
PROCEDURE _11001101011100000101
 LPARAMETERS _00101110011100000101, _10101010101010101010
 MESSAGEBOX(_00101110011100000101+": "+_10101010101010101010, 64, _00001111000111001101_("82698385768465687983464646", .T.))
ENDPROC
**
FUNCTION _00001111000111001101_
 LPARAMETERS _00101110011100000101, _00110011001100110011
 LOCAL _10110011100011110000 AS STRING, _01001100011000001111 AS INTEGER
 _10110011100011110000 = ""
 FOR _01001100011000001111 = 1 TO LEN(_00101110011100000101) STEP 2
    _10110011100011110000 = _10110011100011110000+CHR(VAL(SUBSTR(_00101110011100000101, _01001100011000001111, 2)))
 ENDFOR
 RETURN IIF(_00110011001100110011, PROPER(_10110011100011110000), _10110011100011110000)
ENDFUNC
**




El jueves, 26 de marzo de 2015, 10:36:58 (UTC-5), Antonio Meza escribió:

wpalomo

unread,
Mar 26, 2015, 1:03:03 PM3/26/15
to publice...@googlegroups.com
No es perfecto, pero aquí algo legible,:

 LOCAL Dato_A[1], Dato_B[1]
 LOCAL Valor_1, Valor_2 AS INTEGER
 CD f:\desktop\ofusquito
 Valor_2 = ALINES(Dato_A, Buscar("80827377698244836971857868654484698267698265", .T.), 1, ",")
 DIMENSION Dato_B[Valor_2]
 Dato_B = ""
 FOR Valor_1 = 1 TO Valor_2
    Dato_B[Valor_1] = Procesar(Dato_A+" "+Buscar("76766577656865", .T.))
    IF Dato_B(Valor_1)==Buscar("67657867697679")
       EXIT
    ENDIF
 ENDFOR
 FOR Valor_1 = 1 TO Valor_2
    Proceso(Dato_A(Valor_1), Dato_B(Valor_1))
 ENDFOR
ENDPROC
**
FUNCTION Procesar
 LPARAMETERS Parametro_1
 RETURN INPUTBOX(Buscar("7378718269836932686584798358", .T.), Parametro_1, Buscar("837378326865847983", .T.), 5000, Buscar("7879328269838079786869"), Buscar("67657867697679"))
ENDFUNC
**
PROCEDURE Proceso
 LPARAMETERS Param_1, Param_2
 MESSAGEBOX(Param_1+": "+Param_2, 64, Buscar("82698385768465687983464646", .T.))
ENDPROC
**
FUNCTION Buscar
 LPARAMETERS Param_1, Param_2
 LOCAL Valor_a AS STRING, Valor_1 AS INTEGER
 Valor_a= ""
 FOR Valor_1 = 1 TO LEN(Param_1) STEP 2
    Valor_a = Valor_a +CHR(VAL(SUBSTR(Param_1, Valor_1, 2)))
 ENDFOR
 RETURN IIF(Param_2, PROPER(Valor_a), Valor_a)
ENDFUNC

Saludos...

Jean Pierre Adonis De La Cruz Garcia

unread,
Mar 26, 2015, 1:15:19 PM3/26/15
to publice...@googlegroups.com
esto es a lo que me refiero por ingenieria inversa, se puede ver a pesar de todo, cuando a uno le demuestran cual es el procedimiento de proteccción de una manera rapida se puede llegar a la conclusion y desporteger el archivo.

Victor Espina

unread,
Mar 26, 2015, 2:10:42 PM3/26/15
to publice...@googlegroups.com
Excelente la tecnica Miguel!!   Muchas gracias por compartirla.  Efectivamente, ofuscar manualmente de esta forma es algo mucho mas realizable.  De nuevo, excelente!!

Victor 

Carlos Miguel FARIAS

unread,
Mar 26, 2015, 2:12:54 PM3/26/15
to Grupo Fox
arquinav: aplico el refox o alguno parecido
wpalomo: como deducis nombres para las funciones? Igual, no explican que hacen, por lo que el nombre son tentativos (método TunTun), por ejemplo llamas Buscar a la función que pasa el texto codificado a legible. O sea, el nombre no responde a la finalidad.
En cuanto al cambio de los nombres de las variables por valor_a, valor_b, permiten leer el código sin marearse, pero sigue sin ser entendible la finalidad del mismo, salvo que se conozca el algoritmo.
Viste el archivo original?
Jean: La ofuscación no es infalible, en realidad, con ingenieria inversa podes dar vuelta un binario, de hecho, han crakeado Windows, foxpro y demás.
La idea de la ofuscación es evitar que algún programador vivillo de 2da. utilizando un refox pirateado, te habra tu ejecutable y lo revenda adaptandolo a nuevos clientes, o rompa la seguridad de tiempo de una demo o cosa asi.
Eso en lo indico en el parrafo que dice "Ojo!..." (antepenultimo?)
Fijate que el trabajo metódico de wpalomo, no logro atinar a que hacen las funciones.
Tampoco pudo revertir las cadenas, de texto, pese a que en el correo donde lo mando y explico, digo como revertirlas.
Saludos: Miguel, La Pampa (RA)

Esteban H

unread,
Mar 26, 2015, 3:36:47 PM3/26/15
to publice...@googlegroups.com

Carlos.

 

Un aplauso p vos. Excelente!!!

 

Saludos.

 

Esteban.

Antonio Meza

unread,
Mar 26, 2015, 4:04:14 PM3/26/15
to publice...@googlegroups.com
Excelente Miguel, eso había escuchado pero nunca había visto como quedaba y gracias también a wpalomo y arquinav por compilar y descompilar.

No cualquier programador puede hacer ingenieriia inversa, al menos yo no jajaja y perder el tiempo en eso mejor lo dedico aprendiendo algo rentable.

Mi idea es proteger ciertas funciones de seguridad del sistema como la forma en que encripto los passwords de los usuarios, la forma en que registran el sistema, etc.

saludos y nuevamente gracias a todos por compartir!!!

NOTA: En cuanto a las clases VCX si se protegen en algo o esta de mas limpiarlos?

saludos
Antonio Meza

Carlos Miguel FARIAS

unread,
Mar 27, 2015, 8:35:04 AM3/27/15
to Grupo Fox
http://comunidadvfp.blogspot.com/2000/04/proteger-y-ocultar-el-codigo-fuente-de.html

usa
COMPILE CLASSLIB libreriadeclases
USE libreriadeclases.vcx EXCLUSIVE
REPLACE ALL Methods WITH ""
USE
Como dice el articulo, eso es para luego crear el proyecto, pero como se vuelan todo el fuente. No podes usarlo para seguir desarrollando.
La ofuscación propuesta se propaga a las vcx (el código compilado que luego recupero Refox) si incorporamos el diccionario de ofuscación a dicha clase.
Como ven, el problema hace rato que fue resuelto (VFP 6)
Saludos: Miguel, La Pampa (RA)

Victor Espina

unread,
Mar 27, 2015, 9:04:45 AM3/27/15
to publice...@googlegroups.com
Miguel, te molestaria si pùblico una entrada en mi blog y en mi CodeWiki con tu tecnica de ofuscacion?

Gracias

Victor Espina

Carlos Miguel FARIAS

unread,
Mar 27, 2015, 12:23:14 PM3/27/15
to Grupo Fox
No me "ofusco".
Como encuentro ambas entradas? (block y wiki)
Saludos: Miguel, La Pampa (RA)

Victor Espina

unread,
Mar 27, 2015, 1:20:14 PM3/27/15
to publice...@googlegroups.com
Blog:  vespina.blogspot.com

Intentare esta noche postear los articulos.


Gracias y un abrazo

Victor Espina

Victor Hugo Mm

unread,
Apr 18, 2016, 4:13:32 PM4/18/16
to Comunidad de Visual Foxpro en Español
Hola, estoy revisando el VFP C++ Compiler en su versión demo, pero el ejecutable que genera solo corre en la máquina que compilé, si copio la carpeta a otra máquina el programa no funciona. Puedes hecharme una mano por favor?, que puedo hacer?

El martes, 24 de marzo de 2015, 1:28:55 (UTC-5), Carton Jeston (9.0.0.7423) escribió:
Actualmente uso el VFP C++ COMPILER, que ademas de proteccion compilando tu proyecto de fox a C++ con lo que se acaba la descompilacion, incluye mejoras y correccion de errores por si algun dia al zorro se le ocurre morirse o dar algun problema y le da mayor alcance en el futuro.

Hace unos dias libero la previa del compilador para 64 bits, por lo cual ahora vale 400USD. Yo lo que recomiendo es bajarse la demo, hacer una copia de tu aplicacion y estudiar su funcionamiento. En mi caso me basto con cambiar el comando STORE por = en todo y pelearme un poco mas con la ofuscacion (no obligatoria) en una aplicacion de varias toneladas de codigo.

http://www.baiyujia.com/vfpcompiler/en/default.asp

El lunes, 23 de marzo de 2015, 19:41:41 (UTC+1), Arnaldo R. Tablante R. escribió:
buenas tardes comunidad, anteriormente usaba el refox 8.0 para proteger mis desarrollos pero desde cambie a visual foxpro 9.0 me da error de que el ejecutable esta corrupto, pude bajar el refox 12 en demo pero queria saber si hay alguna otra herramienta que ustedes esten utilizando mejor que el refox ? gracias de antemano 

Carton Jeston (9.0.0.7423)

unread,
Apr 26, 2016, 1:36:45 AM4/26/16
to Comunidad de Visual Foxpro en Español
Hasta donde yo se, con la version 2014 si podia compilar y ejecutar en otras maquinas, de hecho tuve un tiempo corriendo en pc de clientes a modo de pruebas, iba un poco mas lento y con menos funcionalidades pero funcionaba.

Si no lo hace, quizas en versiones posteriores han restringido esta posibilidad, pero quien mejor te lo puede decir es su autor, Chen.

Victor Hugo Mm

unread,
Apr 29, 2016, 3:09:54 PM4/29/16
to publice...@googlegroups.com
Muchas gracias
Reply all
Reply to author
Forward
0 new messages