Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Serapis

#1251
El 'algoritmo KMP' (de Knuth, Morris y Pratt) es un algoritmo para buscar subacadenas completas, como en tu caso la búsqueda es parcial...  puede ser readaptado para dicha situación.
https://es.wikipedia.org/wiki/Algoritmo_Knuth-Morris-Pratt

Hace ya como 8-9 años edité el algoritmo (en wikipedia) para expresar claramente el funcionamiento (era un galimatías incomprensible) y poner ejemplos más explícitos y paso a paso así como el pseudocódigo del mismo (había ineficientes implementaciones en varios lenguajes).
...fíjate que el algoritmo se compone de dos partes, en la primera se precomputa una tabla de saltos, que acelerarán las búsqueda.

Puede ser aún más aficiente si se conoce previamente que 'SIEMPRE' se darán ciertas condiciones, que si ha de ser universal (por ejemplo, saber que la subcadena a buscar siempre será máyor de x caracteres y si es menor se rechaza).

Aunque igualmente puedes readaptar el algoritmo de Boyer-Moore para el mismo propósito.

Claro la cosa está en si implementas el algoritmo o simplemente lo utilizas desde una librería, en cuyo caso no ha lugar a optimización, si no simples llamadas en un bucle.
#1252
St..Man... Eso es implementar una tabla indexado por otra.

Sea el ASCII. que como sabes va de 0 a 255 (que se supone es el punto de partida), donde (por ejemplo) la 'A' ocupa la posiciópn 65, pero en tu caso ocuparía la posición 0...

MiTabla(0) = ASCII(65)
igual para el resto...

Si van contíguos, podría usarse un bucle, por ejemplo supuesto el caso de una tabla con las 26 mayúsculas:

bucle para k desde 65 hastas 65 + 26
   MiTabla(n) = ASCII(k)
   n +=1
siguiente


Ahora 'Mitabla(7)' tendrá la 8ª letra, osea la 'H', el valor 72.
Posteriormente puede usarse en la forma: ASCII(Mitabla(7))


#1253
Programación General / Re: Creacion de un juego
27 Noviembre 2019, 15:39 PM
Cita de: sukokiin en 22 Noviembre 2019, 12:06 PM
Ni caso a los que dicen de conocimientos previos, eso es cuando quieres sobrepasar los limites del desarrollo a videojuegos y hacer buenas joyitas indies.

Te puedes especializar tanto en desarrollo de videojuegos como en desarrollo de Inteligencia Artificial, yo empece a programar videojuegos con 9 años ...
bla,bla, bla...

Alguien dice "Cración de un juego: facil y sencillo con el fin de aprender" con el fin de aprender  ...aprender  ...aprender ...aprender. Y ya se dispara la imaginación... y se habla de 'Inteligencia Artificial' y de '9 años' y bla, bla, bla...

cuando alguien no sabe ni andar, otros ya le ponen a escalar montañar.... a veces vale más que os calleis que decir sandeces.
#1254
Programación General / Re: Es posible?
27 Noviembre 2019, 15:31 PM
No. Lo que quiere es directamente introducir tarjetas falsas... es decir las quiere fabricar pero sin pasar ninguún control ni registro y puesto que después tampoco quiere registrarse como una empresa crediticia (y que sea aprobada, por supuesto), impostar como tal.

Pero además lo quiere 'por cojonex'... como si absolutamente todo el mundo fuera tonto, y absolutamente todo fuera posible de falsificar.

...en lo mismo que si dijera que quiere disfrazarse como el presidente de tal o cual país, y que admeás todos los ciudadanos le acepten como tal, para que él a su antojo pueda dictar leyes sin discusión...


Para ambos casos: ...solo existen dos formas, legítimamente siguiendo los cauces ordinarios, ilegítimamente tomando por la fuerza el control absoluto.
#1255
Tu problema básico es que la siguiente línea es incorrecta.:


Código (vb) [Seleccionar]

n = LOF(1) / Len(file)


En tu ' load', necesitas añadir esta línea:
Código (vb) [Seleccionar]

Private Sub Form_Load()
    '...

   ' lo que mide un registro en bytes:
   sizeTask = len(file) ' medir una instancia de la estructura task, file es un a instancia.


   ' la cantidad de registros que tiene el fichero:  
   n = (filelen(ruta)\sizeTask)   ' solo para esto... no hace falta abrir el fichero...

   '...
end sub


- Incrementa 'n' solo cuando añadas un registro, no cuando sobrescribas alguno existente.

- No he mirado a fondo el código, pero no veo la necesidad de pasar 'n' a un 'textbox' y viceveersa, en todo caso usa un control numérico como puede ser un 'scroll'... cuando añades un registro, añade en la posición que señala la propiedasd max del scroll. después de añadido (si no hubo problemas) cambias la propiedad 'max' del scroll (suma 1) después de crearlo. Para leer lee el el registro de la propiedad 'value' del scroll, etc...

- Procede dar nombres más consistentes a las variables que simplemente 'n'... muchos mejopr 'regNum' por ejemplo si no quieres 'gastar muchos caracteres'...

- De hecho usando directamente las propedades del scroll, no es preciso usar 'n', pasando a llamar al scroll algo como 'scrollPosRegistro' (por ejemplo). Y por tanto cambiando la asignación en el load de 'n' a 'scrollPosRegistro'.max = 'filelen'\'size1reg'

- La ruta del fichero, llámala así:
Código (vb) [Seleccionar]

dim ruta as string   ' en el formulario

ruta = "...."  ' en el load... y usas 'ruta cada vez que debas abrir el fichero en vez de la ruta completa (pués esta no varía).


- Si operas siempre con el mismo fichero en toda la sesión, procede abrir el fichero durante la carga de la aplicación y cerrarlo al cerrar la aplicación, en vez de abrir y cerrar contínuamente...
#1256
Cita de: Machacador en 13 Noviembre 2019, 21:34 PM

Según Fariñas, esta visita puede ser interpretada como una falta de respeto a ciudadanos españoles que murieron en España, víctimas de acciones cometidas por grupos que fueron entrenados en Cuba, como ETA o las guerrillas del Partido Socialista Obrero Español.

Fariñas también hace alusión a las burlas que públicamente realizaba Fidel Castro respecto a las reformas que Francisco Franco había emprendido para reinstaurar la monarquía española como parte del proceso de transición.
Creo que el tal Fariñas, no conoce bien del todo el carácter de los españoles (de la gran mayoría).
El modo de perpetuar las disputas, es ser intransigente, no saber perdonar, ni olvidar. A la mayor parte de los epañoles incluso insultos expresos, 'nos la resbalan' (palabro popular para decir que no le damos ninguna importancia), es por eso que todo ese movimiento de la 'Memoria Histórica', viene a romper la concordia con el pasado.

Francamente si España tuviera que estar dolida con respecto a algo relacionado con Cuba sin duda sería la bellaquía de USA cuando acusó a la armada española del 'hundimiento del acorazado Maine' y que dió lugar a la guera de Cuba del 98 entre España y EE.UU. ...y que yo sepa ningún presidente de USA ha entonado desde entonces el 'mea culpa' ni ha perdido perdón... pero ya no solo a España, es que ni siquiera a sus propios ciudadanos, los militares que asesinaron vilmente y que formaban la tropa del barco (de su propia flota) que hundieron para justificar una guerra con España tras la debida acusación.

...aparte de eso, pués si, los de un signo político u otro, siempre sacarán rencillas de las que querer sacar rédito político... pero aclaro que más por esos intereses políticos que por algún rencor en el corazón...






Cita de: crazykenny en 13 Noviembre 2019, 20:08 PM
la visita de dos energumenos los reyes a Cuba),
Puedo entender que uno decida ser 'republicano' igual que uno decida ser monárquico. Yo prefiero ser inteligente y mi inteligencia me dice que sale más barato mantener a una familia real de por vida que a una caterba de polícitcos que trabajan 4-8 años y a mantenerlos el resto de su vida, pero luego entran otros tantos y vuelven a salir con una paga d epor vida tras solo 4-8 años de trabajo... aparte d ela economía, la inteligencia también dicta que alguien que ejerce un cargo durante 8 años, los primeros 4 se las pasa enterándose de como funciona el asunto y no 'nos sale rentable como profesional',  y después de esos 8 años, como re retira con una pensión vitalicia, pués la experiencia adquirida en esos 4 últimos años, queda desperdiciada para el conjunto de españoles... vuelve a entrar otro inútil que perderá otros 4 años en aprender y 'hacerse' amigoes en la comunidad internacional...
Un tipo que entra a un puesto y toda su vida se mantiene en ese puesto se hace un verdadero profesional en sus funciones y acaba teniendo múltiples amigos en la comunidad del ramo en el que se mueve...

En fin, los idealistas se dividen en monárquicos o republicanos los prácticos en inteligentes o torpes. Deberías repensar tu postura de modo inteligente y no por comedura de cabeza.





Mod: No hacer doble post.
#1257
Mucho foro citas... pero te repito 'San Vaguel' tiene que ser SIEMPRE la primera opción... cuando no es así, es el nombre que s eaplica.

...y además más grave pués si bien para los jóvenes novatos es algo perdonable para que alguien que alega tener cierta antigüedad en estos bagajes, lo es menos.
#1258
Como veo que no has creado tema para el caso, te respondo en un tema tuyo de otra ocasión...

Cita de: whilmer en 13 Noviembre 2019, 18:31 PMBuenos 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...
#1259
Desconozco si estaba programado con anterioridad a la fecha en que Sánchez decidió la fecha de las elecciones. Porque si resulta ser que Sánchez usa esa visita como escudo de distracción, habría que añadir que si bien "el rey reina pero no gobierna", "el presidente debe presidir y no manipular", y hasta ahora Sánchez, solo ha demostrado inacción, terquedad y falta de tacto... parece que quiere que pase el tiempo sin hacer nada de nada...
#1260
Hacking / Re: Se puede hackear una red wifi con cmd?
13 Noviembre 2019, 18:44 PM
Cita de: engel lex en 10 Noviembre 2019, 22:41 PM
...e interactuar con programas cuyos prgramadores decidieron no hacerles interfaz grafica...
Una puntualización.
Aunque tengan interfaz gráfica, puedes seguir procesando comandos lo uno no es alternativo a lo otro, es más una alternativa que toma el programador.

Yo es raro que haga un programa (que tenga su interfaz gráfica), sin que además provea comandos para permitir por ejemplo realizar ciertas cosas desde la shell del sistema o mediante algún script que uno precise. No provees a través de comandos toda la funcionalidad que provee la interfaz porque podría llegar a ser muy complejo, pero si media/una docena de comandos con sus respectivos parámetros, de aquellas acciones que uno considera que puedan ser más frecuentemente usadas y necesarias tratadas de ese modo.
Por ejemplo: Si creas un programa que opera con imágenes (cn toda su interfaz), sería muy útil proveer un comando que dirima si un determinado fichero es del tipo que señale su extensión. o Incluso uno que convierta un fichero de un tipo a otro, etc...

La forma ahabitual de tratarlo es examinar la cadena de comandos... si está vacía (es una cadena nula) abres la interfaz, si no, entiendes que se ha recibido un comando lo procesas y al término cierras la aplicación.