Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Temas relacionados > Seguridad
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-03-2007
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.142
Poder: 36
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Joroba... ahora me doy cuenta de que no he terminado de probar el asunto del modo que lo planteaba el compañero basti, es decir, lo hize como Seoane explicó, pero, no llegué a "actualizar" a lo que basti comentaba... y ahora no sé si hacerlo, puesto, que, llegando a estar el número de serie correcto en memoria incluso aunque no esté en una variable... ¿no invalida esto el método propuesto por el compañero basti?

Quiero decir, si tras intentar del mejor modo que he sabido lo que propone Seoane llego a la conclusión de que, efectivamente, el número de serie sigue permaneciendo en memoria (si estoy metiendo la pata me corregís por favor), puesto que en algún punto del programa ha de componerse para poderlo comparar con el que propone el usuario...

Parece que de todas formas la posible solución pasa (sin ir más allá...) por lo que dice Neftalí (¿o me equivoco?), es decir, no llegar nunca a formar el número de serie completo, sino hacerlo por partes... para que aunque aparezcan estas partes sea complicado reunirlas a todas y conocer así el número de serie.

Ahora bien, quedaría entonces cómo comparar el serial del usuario (por partes) con el serial correcto que hemos de generar (también por partes...)...

¡jo, jo, jo, jo!
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #2  
Antiguo 27-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.439
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por dec
Ahora bien, quedaría entonces cómo comparar el serial del usuario (por partes) con el serial correcto que hemos de generar (también por partes...)
Bueno, como he dicho, esta es una de las primeras cosas a hacer y que evita encontra el serial de forma trivial.

Lo siguiente es evitar comparaciones directas; Simplemente, porque no siempre se necesita encontrar el Serial, a veces basta con "Parchear".

Es decir, si yo no encuentro el Serial, pero veo tres comparaciones que dicen:
Código Delphi [-]
if A!='aasd' then ...
if B!='khgk' then ...
if C!='grfeu' then ...
En este caso optaría por "parchear" los tres != por tres =.

Ya se que el tema se va complicando, pero son cosas que hay que tener en cuenta; La mayoría de sistemas anticopia (serios) ya hechos tienen en cuenta estas cosas y muchas más...
En ese caso a la hora de comparar dos valores, podemos utilizar por ejemplo la resta para saber si da cero, funciones del tipo CHAR y Ord (aplicándolas a los dos) para no comparar los valores exactos, sumar y restar a ambos un valor,...
Aunque desde delphi parece una tontería hacer esto:

Código Delphi [-]
// en lugar de...
if ('A' = Str[1]) then
// usar...
if (char('A') = Char(Str[1])) then

Para el que está revisando el código en ensamblador supone uno o varios saltos, cosa que dificulta mucho a la hora de seguir el código (las llamadas a funciones); Pensad que si se van aplicando diferentes a cada comparación, al final la cosa se hace muy compleja para el que está revisando la pila y los registros.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.

Última edición por Neftali [Germán.Estévez] fecha: 27-03-2007 a las 18:30:48.
Responder Con Cita
  #3  
Antiguo 27-03-2007
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 24
ArdiIIa Va por buen camino
Cita:
Empezado por Neftali
Para el que está revisando el código en ensamblador supone uno o varios saltos, cosa que dificulta mucho a la hora de seguir el código (las llamadas a funciones); Pensad que si se van aplicando diferentes a cada comparación, al final la cosa se hace muy compleja para el que está revisando la pila y los registros.
Comenzó el hilo buscando y encontrando una cadena en memória y finalmente acabamos hablando de ingeniería inversa.
Llegados a este punto, creo que el menor de los problemas sería el como ocultar la forma y el modo de como cotejar una clave, dado que llegados a ese nivel y si resulta de interés, el invasor no se iba a preocupar de la clave, sino que se preocuparía de ver cual es el procedimiento que le hace salir del programa (por ejemplo) y que otras alternativas o saltos de programa tiene para que este funcione adecuadamente, para a continuación parchear y a disfrutar.... Creo yo...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #4  
Antiguo 27-03-2007
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Una pregunta en cuanto al borrado del dato:

¿Qué no puede usarse simplemente una variable global y asignarle otro valor? No hay stack donde quede nada y la variable se ha reescrito.

// Saludos
Responder Con Cita
  #5  
Antiguo 27-03-2007
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 19.439
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por ArdiIIa
...creo que el menor de los problemas sería el como ocultar la forma y el modo de como cotejar una clave, dado que llegados a ese nivel y si resulta de interés, el invasor no se iba a preocupar de la clave, sino que se preocuparía de ver cual es el procedimiento que le hace salir del programa (por ejemplo) y que otras alternativas o saltos de programa tiene para que este funcione adecuadamente, para a continuación parchear
Bueno, estamos hablando de hacer las dos cosas, evitar que la comparación sea evidente y que esté un único sitio; De ahí que la comparación se haga por partes y no del número completo. Y como segunda parte que esas comparaciones que se hacen por partes no sean evidentes. A nivel de Delphi es un poco más de trabajo (tampoco mucho).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 27-03-2007
Avatar de Casimiro Noteví
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.670
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Una vez participé en un proyecto de "seguridad" para evitar que "piratearan" los programas de la empresa donde trabajaba. Tuvimos en cuenta lo que habéis comentado y un montón de cositas más, el proyecto duró 7 meses y éramos 3 personas dedicadas únicamente a eso, en su día tuvo un presupuesto de 60.000 euros. Buscamos información de todos los métodos conocidos hasta la fecha, documentos, libros, consultas a algunos expertos, etc.
Entre nosotros había uno, no era yo, que decía constantemente: "no vale la pena tanto tiempo y dinero en protegerlo, lo mejor es que lo copien y lo usen aunque sea gratis y que no use el de la competencia".
Pues bien, a la semana de sacar el programa, un chaval ruso que además nos envió un gracioso email, publicó un keygen para el programa, que además de ser más simple que nuestro propio programa, era más rápido, pequeño, cómodo y seguro.
Nos quedamos con la boca abierta, nos miramos los unos a los otros y pensamos: "¡¡¡cómo podemos ser tan malos programadores!!!".

Moraleja: sin comentarios
Responder Con Cita
  #7  
Antiguo 27-03-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por Casimiro Notevi
Una vez participé en un proyecto de "seguridad" para evitar que "piratearan" los programas de la empresa donde trabajaba. Tuvimos en cuenta lo que habéis comentado y un montón de cositas más, el proyecto duró 7 meses y éramos 3 personas dedicadas únicamente a eso, en su día tuvo un presupuesto de 60.000 euros. Buscamos información de todos los métodos conocidos hasta la fecha, documentos, libros, consultas a algunos expertos, etc.
Entre nosotros había uno, no era yo, que decía constantemente: "no vale la pena tanto tiempo y dinero en protegerlo, lo mejor es que lo copien y lo usen aunque sea gratis y que no use el de la competencia".
Pues bien, a la semana de sacar el programa, un chaval ruso que además nos envió un gracioso email, publicó un keygen para el programa, que además de ser más simple que nuestro propio programa, era más rápido, pequeño, cómodo y seguro.
Nos quedamos con la boca abierta, nos miramos los unos a los otros y pensamos: "¡¡¡cómo podemos ser tan malos programadores!!!".

Moraleja: sin comentarios
Yo siempre he pensado que el aliento para pasar las barreras de una protección es que sea lo mas "dificil" posible, y no creo que hayan sido "malos programadores" solo que hubo uno mejor que ustedes.

Aqui en Mexico diriamos, "para chingon, chingon y medio".

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #8  
Antiguo 28-03-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 26
seoane Va por buen camino
Me voy a meter a cracker. Recordáis la protección de la que hablaba con el md5, esa tan maravillosa, pues con el OllyDbg del que hablaba Neftali me la salte en un momento, el tiempo que me llevo averiguar como guardar los cambios en ese programa endemoniado

La cosa fue tan sencilla como cambiar esto:
Código:
00459BF2  |. E8 4DCAFAFF    CALL <JMP.&kernel32.CompareStringA>
00459BF7  |. 83E8 02        SUB EAX,2
00459BFA  |. 85C0           TEST EAX,EAX
Por esto otro:
Código:
00459BF2  |. E8 4DCAFAFF    CALL <JMP.&kernel32.CompareStringA>
00459BF7     B8 00000000    MOV EAX,0
00459BFC  |. 0F94C0         SETE AL
Y toda mi superproteccion quedo inutilizada .... Lo que hace el aburrimiento
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
eliminar datos con dbgrid UREÑA Conexión con bases de datos 20 30-03-2007 23:41:32
Eliminar Datos eficientemente k_rito Conexión con bases de datos 5 27-11-2006 00:44:45
Cómo obtener ciertos datos de los archivos ejecutables y librerías StartKill Varios 1 14-08-2006 23:10:01
Eliminar del memoria los querys Aura OOP 4 01-04-2004 17:40:40
Eliminar datos de una tabla DBF vicvil Tablas planas 4 16-05-2003 21:17:46


La franja horaria es GMT +2. Ahora son las 02:55:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi