Como veo que no has creado tema para el caso, te respondo en un tema tuyo de otra ocasión...
Buenos dias a todos, estoy tratando de habilitar estas opciones en un programa que necesito utilizar pero se encuantran desactivadas impidiendome gaurdar los trabajos que alli realize. y lo que intento hacer es lo siguiente, tengo dos programas de la misma empresa y que sirven para lo mismo. el primero corre sobre windows XP y en este si se encuentran activadas las opciones de gaurdar, el segundo corre sobre windows 7 pero no tiene habilitadas estas opciones. La interfaz, las funciones y el manejo del programa es el mismo en ambas versiones, logre conseguir un software que me permitio ver el codigo fuente de ambos programas, pero no logro identificar la parte en donde se programo estas funcines, para luego copiarlas y luego poderlas anexar al otro programa, si me pudieras ayudar tratando de explicarme un poco como se puede reconocer le agradeceria mucho
De entrada, no procede utilizar los mensajes privados para cuestiones generales de programación. Los mensajes privados son para cuestiones privadas que no atañe a nadie más. Y por dicha razón no te responderé el mensaje por privado, pués no contiene nada reamente privado... salvo para darte la dirección de este tema, incluso releyendo el tema original, guarda similitud con lo que vienes a preguntar, luego tampoco desencaja.
De seguido, faltan datos en tu exposición, como de qué programa y lenguejas se trata, o si dicho programa sea de evaluación con una fecha de expiración a partir de la cual (por ejemplo), sea por dicha razón que esté bloqueada cierta funcionalidad.
Y para terminar, (nota que te respondo exclusivamente a la parte remarcada en negrita).
Hay funcionalidades que un programa no realiza o bien en sí mismo que lo deriva a un tercero, sea una funcionalidad del S.O. (vía por ejemplo 'SendMessage'), o una librería propia (se podría pasar por ejemplo la ruta del fichero y un puntero a la ventana que mantiene el contenido vía portapapeles (por ejemplo) o de terceros, por otros diversos métodos. Tanto más probable sea esto cierto, cuando más probable estimen sus desarrolladores que alguien intente burlar la seguridad que ellos aplican. Así que si no encuentras una función llamada 'guardar', busca al menos donde se procesa el menú.
Por ejemplo: En alguna ocasión alguien me han contratado para hacer un programa y pedido expresamente que ofreciera un programa similar (que cuando venciera un plazo, quedara bloqueada cierta funcionalidad).
Te comento solo un par de soluciones de las que yo he aplicado (por supuesto no son infalibles ni nunca pretendieron serlo, solo satisfacer al cliente con alguna complejidad no apta para todos), por lo demás fácilmente burlables para cualquiera con los conocimientos suficientes y algo de paciencia:
A - El menú de la versión completa y otro menú con idéntica distribución que se importaban y cargaban desde sendas interfaces (que se implementaban y mantenían en sendas dll, la segunda era casi copia de la primera excepto que no contenía código en las partes desactivadas y en otras partes ligeramente cambiadas. Eso impide que aún buscando en el código se encuentre lo que se busca, por que simplemente no lo tiene, se mantiene en otra interfaz (es decir cargando otra dll)... la solución buscar el punto donde se carga dicha dll, y ver qué condiciona que se cargue esa u otra y hacer ahí los cambios que procedan...
...el pseudocodigo de esa parte a buscar (bajo dicho ejemplo) será algo parecido a esto:
IMenuX menuX
Si copiacapada = TRUE
menuX = nueva menuXCapada
sino
menuX = nueva menuXEval
fin si
IMenuX sería una interfaz con métodos como cargar, guardar, guardarComo... y menuXCapada y MenuXEval sería sendas implementaciones de la interfaz IMenuX, luego el código desemsamblado en ulterior sería el que contuviere la librería menuXCapada, que obviamente contiene los métodos d ela interfa, pero no provee código para ello más que desactivar el propio menú.
B - Había dos (en realidad 3) versiones del programa 1 la de pago y 2 de evaluación. De éstas, una de ellas completamente funcional (básicamente como la de pago, más algún extra) y otra copia de esta pero al que se le había retirado la funcionalidad capada. Esta versión una vez compilado es partido en 2, 3 , x ficheros sueltos y renombrados como se quiera. Es como si antes de terminar el programa, lo compilaras justo sin programar la funcionalidad que el cliente quiere que quede capada, luego lo completas y lo compilas y esa sería la versión completa de pago, la de evaluación es todavía añadir algo más de código, para enrevesar entre esta y la capada.
El proceso real que yo aplicaba era completar primeor la versión de pago, luego hacía la copia de evaluación y infalmente la copia capada (por puras cuestiones de eficiencia en tiempo y garantía de que los posteriores cambios para las dos copia sdd e la versión de evaluación no introduzcan errores en la prueba de pago).
La versión de pago, era básicamente copia de esa de prueba excepto que ya no conserva ninguna llamada a ningún otro programa para que revise nada. Piensa que a veces incluso el programa que aquí digo 'invocado' es el que hace la prueba (es mucho más corto), y se llama como debiera llamarse el ejecutable y es éste el que a su vez llama al que proceda, aunque este método no es el mejor porque es sumamente fácil detectar que no se trata de ejecutable real.
La parte añadida que diferencia la de pago de la de evaluación básicamente consiste en: Cuando la fecha caducaba, el programa invocaba a un tercero, aquel montaba/reconstruía a partir de los trozos la nueva versión capada y a su vez destruía la versión completa en esos 2,3 x ficheros... luego la versión original ya no existía en parte alguna a su vez queda una copia en la que no encontrarías el código esperado si lo descompilabas (por que nunca lo ha tenido). Una vez hecho el proceso de cambio, arrancabas el nuevo ejecutable que se había sobrescrito en la misma posición en disco que el original, por las fechas etc... para que el cambio se notara menos, se proveía que ambos ejecutables tuvieran exactamente el mismo tamaño en bytes, como la copia capada siempre será menor (por contener menos código), al final del mismo es fácil añadir lo que se quiera, incluso el trozo original del ejecutable original, sabido que las direcciones durante la carga no derivarán allí y que lo que allí se copie el cargador lo va a ignorar, porque el cargador sabrá distinguir donde acaba y por tanto el tamaño real del ejecutable y que no es el mismo que el que consta en disco...
La mayor dificultad era procurrar que la existencia de un antivirus no notara que había alguna intrusión, hoy esto mismo me temos que sería bastante más complicado de solventar...
De hecho cualquier programa que 'sepa' manejar ejecutables sabrá detectar fácilmente que hay un 'añadido' posterior al mismo, otra cosa es que informe si no ha sido especialmente concebido a tal efecto.
El modo de resolver el simple enigma es calcular el hash del ejecutable cuando es completamente funcional incluso guardar copia del mismo antes de usarlo (cuado se descarga o instala y antes de arrancarlo por vez primera), y cuando proceda (aparezca) la copia capada a entrar en vigor puede verificarse si tienen o no el mismo hash, si son distintos, se sabe que ha sido alterado, la comparación más o menos exhaustiva del nuevo con la copia que se guardó revelárá si el cambio es mínimo (bloqueo detectable en el código), o brusco (remplazo de ejecutables).
Y a partir de ahí, uno ya se las debe ingeniar por sí mismo para ver como solventa el caso encontrado.
p.d.: Un simple esquema de este otro ejemplo, para el programa montador:
Sea X toda la funcionalidad del programa capado pero sin la parte capada.
Sea Y toda la funcionalidad del resto del programa no capado.
Sea Z toda la funcionalidad de la evaluación de prueba:
X, Y y Z serían mantenidos en cualesquiera ficheros, cifrados de alguna manera...
Inicialmente el montador: Crea la copia de evaluación asi (esta parte lo más simple es que ya venga montada de origen):
exe = X + Y + Z
Cuando el período expira: El montador crea la copia capada así:
exe = X + relleno de Y.
Cuando el programa es completo y se ha provisto una clave (si no exige descargar el programa desde web): El montador crea la copia capada así:
exe = X + Y
Si se exige descargar desde web, posiblemente fuere igualmente "exe = X + Y", solo que la comprobación se verificara vía web ...
p.d.: remarco en negrita, la parte a la que te respondo, por claridad...