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ú

Temas - karmany

#46
Hola.

Estoy utilizando el DataReport conectado a una base de datos.
Tengo un campo que lo he definido en la base de datos como single(coma flotante, precisión simple).

Si el número es(las comas son los decimales): 3,346 puedo previsualizarlo en el DataReport de dos formas:
1) 3,346 que es sin dar ningún formato
2) 3,35 que es dando formato con dos decimales.

Para conseguir esta segunda forma, basta con poner la propiedad format así: "0.00"

El código para el que esté interesado es simplemente éste:
Código (vb) [Seleccionar]
Dim Formato As New StdDataFormat
Formato.Format = "0.00"
Set Sections("detalle").Controls("Texto4").DataFormat = Formato


Mi pregunta es:
Quiero conseguir que el DataReport me muestre solamente 3,34, sin redondeo. ¿Existe alguna forma de poner este formato con "Format"?
Os puedo asegurar que he probado de todo: "##.##", "##.#0". No se me ocurre nada más...

A ver si alguien sabe hacerlo.

PD. Es una pena, pero si no se puede hacer con format, la solución será crear un nuevo campo de texto en la base de datos y manejar ese valor....
Muchas gracias
#47
Os comento brevemente mi experiencia por si a alguien le puede servir de ayuda... y ver dónde cometí el fallo.

Empezó todo simplemente al intentar limpiar un ordenador. Era de un amigo y de vez en cuando se apagada, estaba plenamente convencido que era por temperatura porque tenía polvo... una barbaridad.

Era una placa base Gigabyte, con un procesador AMD athlon a 64 bits. Así que apagué todo y empecé a desconectar dispositivos y a limpiar: Tarjeta gráfica, placa base, etc... hasta que llegué al procesador.
El disipador estaba tan pegado al procesador que aunque lo saqué suavemente salió directamente el disipador pegado a la cpu. No le di más importancia. Lo despegué lo limpié bien y lo volví a colocar todo correctamente.

Después de colocar todo enciendo el ordenador y me encuentro los siguientes síntomas: se mueve todo correctamente, parece que leen los HDD y DVD pero no aparece nada en pantalla y en el teclado no se enciende el led... umm algo pasa.
Cada uno tiene su forma de trabajar, así que empiezo a descartar componentes y me quedo con que el problema es de:
-el procesador o
-placa base

Después de un buen rato más, saco de nuevo el procesador(ya llevaba unas 3 veces) y lo examino concienzudamente y veo el error: cuando saqué el procesador AMD con el disipador pegado, una de las patillas se dobló... grrrrrrr y el ordenador no es mío....!!!!! Al ponerlo de nuevo, seguramente la puse doblada.
Así que con sumo cuidado la desdoblé y la volví a poner.... otra vez grrrrrr!! nada de nada. En este momento estaba seguro que había sido mi culpa y que posiblemente la patilla doblada habría hecho un corto en el procesador o algo similar...

Casualmente hoy mismo ha pasado algo similar en un pentium y no ha pasado nada... Este AMD no quería ponerme las cosas fáciles.

Finalizando: por intentar hacer un favor y ayudar a un amigo, me ha tocado buscarme la vida, bajar el manual de la placa y encontrar un procesador amd compatible. Al final lo he encontrado en una tienda y me ha tocado pagarlo(suerte que no ha sido mucho)...

Espero que sirva a alguno de ayuda...

PD. Ahora ya el ordenador no se apaga...
#48
Aunque el tema lo he posteado en Seguridad Informatica en este foro, considero este tutorial excelente y quiero compartir con todos Ud.

Os acordáis del posible ataque a la web de la Presidencia Europea de España
2010, donde aparecía la imagen de Mr Bean...

"Realmente el problema era un XSS o Cross-site scripting , un problema de seguridad basado en la explotación de vulnerabilidades del sistema de validación de HTML incrustado en la web de la Presidencia Española"

Este tutorial que os presento, está realizado de forma magistral por un colega de CrackSLatinoS y no tiene desperdicio, como su autor dice en el tutorial:
-"En mi caso, yo voy a intentar jugar un poco con Cross-site scripting de varias maneras e intentar aclarar todas las posibilidades que puede dar esta vulnerabilidad, de manera que ayude a entenderla y a protegernos;"

Seguro que os va a gustar, os dejo el enlace:
http://www.4shared.com/file/253697545/d748d6da/Jugando_con_XSS_JuanJose.html

Salu2
karmany
#49
Nivel Web / Jugando con XSS por Juan José
6 Abril 2010, 00:21 AM
Os acordáis del posible ataque a la web de la Presidencia Europea de España
2010, donde aparecía la imagen de Mr Bean...

"Realmente el problema era un XSS o Cross-site scripting , un problema de seguridad basado en la explotación de vulnerabilidades del sistema de validación de HTML incrustado en la web de la Presidencia Española"

Este tutorial que os presento, está realizado de forma magistral por un colega de CrackSLatinoS y no tiene desperdicio, como su autor dice en el tutorial:
-"En mi caso, yo voy a intentar jugar un poco con Cross-site scripting de varias maneras e intentar aclarar todas las posibilidades que puede dar esta vulnerabilidad, de manera que ayude a entenderla y a protegernos;"

Seguro que os va a gustar, os dejo el enlace:
http://www.4shared.com/file/253697545/d748d6da/Jugando_con_XSS_JuanJose.html

Salu2
karmany
#51
Lionel es una persona que hace un tiempo destripó de forma verdaderamente magistral, el tema de mochilas HASP. Llegó a analizarlas de tal forma que en algunos casos consiguió incluso emularlas sin tener la propia mochila. Ahora nos deleita con dos nuevos tutoriales que no tienen desperdicio sobre Sentinel, su descarga:

1.- Eliminando shell de Sentinel por Lionel

2.- Otra mochila Sentinel por Lionel

Sé que hay mucha gente que pregunta diariamente sobre mochilas, así que estos dos tutes actuales pueden resultar de utilidad.

Que los disfrutéis.
karmany

PD. Son magistrales. Gracias Lionel.
#52
Sencillo e interesante tutorial realizado por Manuel Fernández.
Con este tutorial aprenderemos cómo modificar código NET y ejecutar código propio.

Es un tutorial bastante interesante, su página:
http://www.windowstecnico.com/archive/2010/02/09/modificaci-243-n-e-inyecci-243-n-de-c-243-digo-en-ensamblados-net.aspx
#53
Como se ha comentado muchas veces, IDA es un impresionante debugger, desensamblador etc... que cada día más gente utiliza. Para muchos Newbies puede resultar complicado el manejo, ya que a primera vista es algo complejo.

Estos tutoriales ya comenzaron hace tiempo, pero he querido mostrarlos ahora ya que ahora hay una gran base para empezar a desenvolvernos con esta magnífica herramienta.

Quiero dar las gracias a su autor: Bigundill@ que con estos tutoriales nos muestra desde cero el manejo de IDA.

El enlace de los tutoriales, gracias a la página del maestro Ricardo Narvaja, lo tenemos aquí:
http://ricardonarvaja.info/WEB/OTROS/IDA%20BIGUNDILLA/

Recomiendo que todo el mundo le eche un vistazo y vaya practicando, merece la pena.
Un saludo
karmany
#54
Programación General / Add PE bytes v0.1.1
29 Octubre 2009, 18:32 PM
Aunque lo he posteado también en ingeniería inversa, lo pongo aquí ya que puede resultar de mucha utilidad a cualquier programador para embeber archivos o bytes o lo que quieran...

Hace un tiempo en el siguiente enlace:
Compromiso de karmany
me comprometí a hacer un programa que sirviera para añadir bytes a la última sección. Lo he ido mejorando poco a poco y lo envío ahora ya que pienso que puede ser de utilidad.

Bueno, por fin después de corregir ciertos fallos (que sólo se producían en Windows XP chino) he conseguido sacar la versión estable 0.1.1



Características:
-Sólo trabaja con datos hexadecimales
-Permite añadir bytes (o embeber archivos) en cualquier sección de un ejecutable, incluído el PE Header!
-Permite añadir bytes (o embeber archivos) al final de cualquier ejecutable, fuera de las secciones.
-Permite añadir cuantas secciones se quieran (hay que tener en cuenta el tamaño del PE Header ya que sino podemos sobreescribir la primera sección).
Flag: E0000020 nombre:karmany
-Multilenguaje. He enviado 3 lenguajes: Chino simplified, inglés (por defecto y no hace falta librería) y español. Simplemente hay que poner la librería language.dll que corresponda junto al programa.
-La librería language.dll en inglés es simplemente para que cada uno la modifique y ponga el idioma que uno quiera.
-El archivo de ayuda ha sido EMBEBIDO con "Add PE bytes". Este es por ej. uno de los usos que podemos utilizar.
-Tiene soporte UNICODE y permite abrir cualquier archivo con este formato.
-El archivo de ayuda está embebido y pienso que el programa es tan fácil de usar que no requiere del mismo.
-Está programado en VC++ 8.0 pero los movimientos de bytes están en ensamblador para aumentar la velocidad al máximo.
-Cuando se pulsa el botón para añadir bytes aparece un messagebox contra lamers. Es código virtualizado.

Este programa lo hice porque a un forero se lo prometí y he intentado hacerlo lo mejor posible. Espero que os sea de utilidad y sin dudarlo, cualquier problema que os salga comentarmelo por email, estaré agradecido.

Un saludo.

PD. Quiero dar las gracias especialmente a crfan que me ha ayudado a descubrir varios bugs importantes. Gracias desde aquí.
Quiero destacar que estoy trabajando en la nueva versión 0.1.2. Se corregirán varios bugs y lo más importante es que crearé un instalador evitando usar Molebox ya que saltan varios falsos positivos.

Datos del rar:
Tamaño: 196.092 bytes
HASH md5-128: D83132275D899CB07C70DA2D3EC96022
Contraseña: karmany

Enlace:
Add PE bytes 0.1.1 por karmany
Otro enlace:
Add PE bytes 0.1.1 por karmany

Actualización librería idioma Chino simplified:
Chinese Simplified Update
Otro enlace:
Chinese Simplified Update
#55
Ingeniería Inversa / Add PE bytes v0.1.1
29 Octubre 2009, 18:28 PM
Hace un tiempo en el siguiente enlace:
Compromiso de karmany
me comprometí ha hacer un programa que sirviera para añadir bytes a la última sección. Lo he ido mejorando poco a poco y lo envío ahora ya que pienso que puede ser de utilidad.

Bueno, por fin después de corregir ciertos fallos (que sólo se producían en Windows XP chino) he conseguido sacar la versión estable 0.1.1



Características:
-Sólo trabaja con valores hexadecimales.
-Permite añadir bytes (o embeber archivos) en cualquier sección de un ejecutable, incluído el PE Header!
-Permite añadir bytes (o embeber archivos) al final de cualquier ejecutable, fuera de las secciones.
-Permite añadir cuantas secciones se quieran (hay que tener en cuenta el tamaño del PE Header ya que sino podemos sobreescribir la primera sección). Flag: E0000020 nombre:karmany
-Multilenguaje. He enviado 3 lenguajes: Chino simplified, inglés (por defecto y no hace falta librería) y español. Simplemente hay que poner la librería language.dll que corresponda junto al programa.
-La librería language.dll en inglés es simplemente para que cada uno la modifique y ponga el idioma que uno quiera.
-El archivo de ayuda ha sido EMBEBIDO con "Add PE bytes". Este es por ej. uno de los usos que podemos utilizar.
-Tiene soporte UNICODE y permite abrir cualquier archivo con este formato.
-El archivo de ayuda está embebido y pienso que el programa es tan fácil de usar que no requiere del mismo.
-Está programado en VC++ 8.0 pero los movimientos de bytes están en ensamblador para aumentar la velocidad al máximo.
-Cuando se pulsa el botón para añadir bytes aparece un messagebox contra lamers. Es código virtualizado.

Este programa lo hice porque a un forero se lo prometí y he intentado hacerlo lo mejor posible. Espero que os sea de utilidad y sin dudarlo, cualquier problema que os salga comentarmelo por email, estaré agradecido.

Un saludo.

PD. Quiero dar las gracias especialmente a crfan que me ha ayudado a descubri varios bugs importantes. Gracias desde aquí.

Datos del rar:
Tamaño: 196.092 bytes
HASH md5-128: D83132275D899CB07C70DA2D3EC96022
Contraseña: karmany

Enlace:
Add PE bytes 0.1.1 por karmany

Actualización librería idioma Chino simplified:
Chinese Simplified Update
#56
VB6
Tengo una base de datos con una sóla tabla: "Tabla1" y con un sólo campo: "Campo1" lo hago lo más sencillo para entender mi problema... (Control de datos Data)

1º) Quiero buscar todos los registros vacios de "Campo1" y perfectamente sale de este modo:
Código (vb) [Seleccionar]
Data1.RecordSource = "SELECT * FROM Tabla1 WHERE Campo1 = NULL"

2º)Ahora pongo el criterio de que quiero que aparezcan todos los registros que comienzen por "A". También sale perfectamente de este modo:
Código (vb) [Seleccionar]
Data1.RecordSource = "SELECT * FROM Tabla1 WHERE Campo1 LIKE '" & criterio & "'"

3º) Ahora viene mi DUDA... Quiero que cuando el criterio sea = "" me aparezcan todos los registros, es decir, TODOS incluídos los registros nulos. Sin embargo cuando el criterio sea <> "" pues que no aparezcan los registros nulos.
Una solución sencilla pero que no quiero hacer es la siguiente:
Código (vb) [Seleccionar]
if criterio = "" then
    "SELECT * FROM Tabla1 WHERE (Campo1 LIKE '" & criterio & "') OR (Campo1 = NULL)"
Else
    "SELECT * FROM Tabla1 WHERE Campo1 LIKE '" & criterio & "'"
End If


Sin embargo, no lo quiero hacer así porque mi consulta es realmente bastante más amplia y tendría que poner muchísimas condiciones...

Mi pregunta es... ¿Se podría poner la condición criterio="" dentro de la consulta SQL?
Pongo un ejemplo, se podría intentar hacer algo así: porque no lo consigo y sería para mi perfecto:
Código (vb) [Seleccionar]
"SELECT * FROM Tabla1 WHERE (Campo1 LIKE '" & criterio & "') OR ((Campo1 = NULL) AND ('criterio' = ""))"

A alguien se le ocurre la forma de hacerlo???? existe alguna forma de ver TODOS los registros, incluídos los nulos de otra forma diferente...
Cualquier sugerencia que se os ocurra por favor comentármela..

Un saludo y gracias.
karmany

#57
Os presento esta herramienta gratuita que puede ser muy útil.
-Permite calcular los tres tipos de direcciones: Virtual Address, Relative Virtual Address, Offset
-Compatibilidad con Windows XP, Windows Vista, Windows 7.
-Tiene incorporado un editor hexadecimal(original de yoda)
-Shell menú extensión
-Botón privilegios (gracias ny0x)

Datos del archivo ejecutable:
Hash MD5= 84b3d0b800dffa440393768840860289
Tamaño = 579853 bytes

Descarga:
http://tuts4you.com/download.php?view.2790
Gracias a Teddy Rogers por subirlo a su página.

Image interfaz:
#58
Ingeniería Inversa / Cómo encontrar el OEP
27 Julio 2009, 11:48 AM
Para muchos Newbies es muy difícil pararse en el OEP (Punto de Entrada Original) de un programa. Recibo muchos mensajes sobre este tema.
Realmente en algunos compiladores como Visual Basic 6.0, es muy fácil porque es muy característico.

Un programa empacado (comprimido, protegido por un packer, empaquetado o como lo queráis llamar) su primera instrucción es el EP(Punto de Entrada). A partir de este momento el programa va descomprimiendose, va haciendo chequeos de cualquier tipo y finalmente cuando se ha descomprimido del todo va directo al OEP.(Como norma general).

¿Cómo se llega al OEP? ¿Cómo podemos pararnos en el OEP? Aquí entra a jugar la experiencia de cada uno, las pruebas que hagamos y muchísimas cosas que se nos ocurran.

Como muchos Newbies preguntan cómo detenernos en el OEP, pues voy a poner el enlace de un programa realmente bueno, que muchísimas veces atina realmente en el verdadero OEP. Por supuesto no es fiable al 100% pero os puede ayudar muchísimo. Se llama OEP Finder y lo realizó Human.

Enlace:
http://www.tuts4you.com/download.php?view.396
#59
Nueva versión en:
http://foro.elhacker.net/ingenieria_inversa/file_location_calculator_v032_por_karmany-t262979.0.html

Bueno os presento esta tool para el que le pueda ser útil:


-La he programado según mis necesidades
-Le he añadido un editor hexadecimal
-He corregido varios bugs
-He introducido una "mini calculadora", yo la llamo así que viene de perlas
para calcular el offset en un NET.(ver archivo ayuda que ahí explico cómo
hacerlo)
-Se puede añadir/quitar del menú explorer.
-Le he puesto una mini protección contra lamers

Datos ejecutable:
Tamaño: 481.612 bytes
Hash MD5= 6acd13e9e218ce5259cad5876e5475d1

Lo que más me interesa es que le funcione a todo el mundo correctamente, así que lo único que pido es que si a alguien no le funciona que me lo diga para poder corregirlo.
Sólo funcionará en Windows XP, Windows Vista y Windows 7. Tiene un archivo de ayuda bastante completo con indicaciones para Newbies y un ejemplo para NET.

Cualquier cosa comentármelo.
karmany

Enlaces:
[eliminados por karmany]

PD. Ya ha habido dos personas que le ha dado un DLL Corrupted. Después de analizarlo el problema es culpa de la librería embebida. Estoy pensando qué hacer para solucionarlo.
Por lo tanto, el archivo en descarga es compatible con Windows XP pero de momento puede dar problemas a usuarios con Windows Vista SP1-SP2 o Windows 7.
El error ya ha sido corregido en el enlace anterior.
#60
Lo prometido es deuda.
Como varios foreros nos comentaron, los enlaces a determinados crackmes desaparecieron, y claro es imposible saber lo que explica un tutorial...
así que hemos recopilado todos los que tenemos guardados y los hemos subido a un alojamiento gratuito para que se puedan descargar de nuevo. Algún crackme ha sido difícil de encontrar.

Cada nuevo crackme se irá subiendo allí para que esté todo bien ordenado y no se dependan de host gratuitos que acaban borrando los archivos.


El enlace de la página es el siguiente:
Descarga de Crackmes


#61
Resulta que hay una palabra que cuando se escribe en un mensaje, al visualizarla es cambiada.

La palabra es: H a c i é n d o n o s
Sin espacios...del verbo hacer

La pongo aquí ahora literal y es "traducida" por:
Haciéndonos

Solamente es una curiosidad.
#62
Photoshop CS3
Cuando se utilizar la herramienta de selección rectangular (Herramienta Marco rectangular) y seleccionamos cualquier parte en una capa, ¿Cómo puedo saber el tamaño de esa selección?
Me refiero a la anchura y altura en píxeles. Tiene que haber alguna forma.

He buscado por todos los menús y por la red y no sé cómo hacerlo.

Gracias.
#63
Como habéis comentado alguno, varios de los enlaces a los crackmes ya no existen y por la red tampoco están.

No os preocupéis porque como tenemos varias copias de seguridad  ;D en breve los subiremos a algún sitio donde puedan permanecer algún tiempo más.

Un saludo

PD. Hablo de los crackmes de esta sección:
Crackmes y tutoriales
#64
INTRODUCCIÓN

Hace unos meses, MadAntrax hizo un crackme curioso, en el que el registro se hacía mediante un keyfile. Como nadie más parece haberse interesando en él, publico ya el tutorial que hice entonces.

Dicho autor es moderador del subforo de Visual Basic y yo he descargado varias de sus colaboraciones, con lo que ya me imaginaba que este crackme iba tener bastante complejidad.

El crackme está compilado con Visual Basic en P-Code, así que este tutorial puede resultar de utilidad para saber analizarlos.
El post original de este crackme es el siguiente:
http://foro.elhacker.net/ingenieria_inversa/madcrack_crackme_v1_by_madantrax-t225985.0.html



TUTORIAL

La verdad que los programas compilados en Visual Basic con P-Code suelen ser más difíciles de analizar. Voy a mostrar cómo examiné este primer crackme de MadAntrax y seguro que para muchos P-Code puede ayudar.

Si utilizamos RDG Packer Detector 0.65 vemos que está empacado con UPX y nos muestra que ha sido compilado con Visual Basic. Si se ejecuta el crackme vemos que aparece un archivo oculto llamado "iexplore.exe" y tenemos un cuadrado de color rojo que para que esté crackeado tiene que estár de color verde, según el autor.

Descompilar UPX es sencillo y en Crackmes y tutoriales hay un link de cómo descomprimir UPX para ReNewbies, realizado por Shaddy.

Yo descomprimí UPX pero al ejecutarlo ví que el archivo "iexplore.exe"(que no le gusta OllyDBG) no aparece y algunas cosas más que no voy a comentar, así que debe de hacer algo el crackme para saber que ha sido descomprimido. Por este motivo sólo debuggeé el crackme directamente desde OllyDBG con un simple plugin para ocultarlo. El OEP es muy sencillo de descubrir: 401130

Por otro lado, como ya tengo el crackme descomprimido con UPX, lo analicé con P32Dasm v2.3 y lo desensambla perfectamente, y se obtiene muchísima información:

VB6 Aplicación detectada ... PCode

Form1 Eventos:
2. splet
3. lel
6. crypt
8. Check_KeyFile

clsCRC Eventos:
2. AddBytes
3. AddString
4. Algorithm
5. Algorithm
6. CalculateBytes
7. CalculateFile
8. CalculateString
9. Value
10. Value
12. Clear


El autor nos deja mucha información.
Hay muchas cosas interesantes, por ej.
00003DE3:  0D   VCallHresult App.Get_Path()
...
00003DEB:  1B   LitStr: "edocyek\"
00003DEE:  0B   ImpAdCallI2 StrReverse()
...
00003DF6:  2A   ConcatStr


Es muy fácil de entender. Primero toma la ruta del crackme. Después de una cadena "edocyek\" hace la inversa (StrReverse) obteniendo "\keycode" y lo une a la ruta. Después con ese archivo hace unas determinadas operaciones y finalmente tenemos un salto (BranchF) que nos pone el cuadrado rojo o verde.

La dificultad de P-Code es que se trabaja con opcodes y puede resultar muy lioso pero con un poco de práctica se entiende todo fácilmente.

Voy a hacer un ejemplo. La subrutina que nos interesa es la que nos pone el cuadrado verde o rojo. Esta subrutina es la Form1 1.8 (Check_KeyFile-->nombre muy llamativo jeje) y comienza en 00003DA0.
He mostrado que nos da la ruta de un archivo denominado "keycode". Y después de esto viene lo más difícil, aparece lo siguiente:

00003E3A:  1B   LitStr: "edocyek\"
00003E3D:  0B   ImpAdCallI2 StrReverse()
00003E42:  23   FStStrNoPop var_D0
00003E45:  2A   ConcatStr
00003E46:  46   CVarStr var_B4
00003E49:  25   PopAdLdVar
00003E4A:  04   FLdRfVar var_A4
00003E4D:  FF3E VarLateMemCallLdRfVar
00003E55:  04   FLdRfVar var_100
00003E58:  0A   ImpAdCallFPR4 Hex()


Lo más difícil es saber qué hace la función VarLateMemCallLdRfVar. Ni P32Dasm ni VB Decompiler nos da información, así que tiene que ser OllyDBG quién nos tenga que ayudar.
Como se observa, la función comienza por los opcodes FF3E y está en el offset 3E4D. Voy a cargar el crackme original en el OllyDBG.
Como el OEP es 401130 pongo un Hardware Breakpoint allí y pulso F9. Ahora estoy parado en el OEP.
Ahora tengo que parar antes de VarLateMemCallLdRfVar que está en 3ED4, por lo tanto como la image base está en 400000 pues la dirección final es 403ED4.
Parado en el OEP, voy a la ventana de dump, botón derecho goto --> 403ED4 (ahí tienes que ver ya los bytes FF 3E) y pongo un Breakpoint --> memory on access. Pulso F9 y se detiene en un

MOV AL,BYTE PTR DS:[ESI+2]

que está dentro de MSVBVM60.dll. Estamos justo antes de la llamada a VarLateMemCallLdRfVar.

Ahora simplemente hay que ir traceando con F7 hasta llegar a una Call ... y si miramos la pila observaremos algo parecido a esto:

0013F7EC   00402694  UNICODE "CalculateFile"
0013F7F0   00000001
0013F7F4   0013F804
0013F7F8   80000003
0013F7FC   0013F8D4
0013F800   0013F920
0013F804   00000008
0013F808   00000000
0013F80C   00174EF4  UNICODE "C:\Documents and Settings\usuario\Escritorio\keycode"


Como se observa, la función a la que hace referencia es a "CalculateFile"

Ya he mostrado cómo acceder desde el OllyDBG a cualquier opcode que nos muestre VB Decompiler Lite, así que cada uno ya puede examinar el código que quiera. Se pierde bastante tiempo sabiendo lo que hace cada cosa... también me ha costado a mi.

Si vamos ahora a VB Decompiler veremos que "CalculateFile" llama a la subrutina "CalculateBytes" y ésta última a su vez llama a la subrutina "AddBytes", que es la importante que interesa.

Ésta (AddBytes) tiene una función muy conocida y muy curiosa:

loc_4039A9: ImpAdCallFPR4 CallWindowProc(%x1, %x2, %x3, %x4, %x5)

A la que se le pasan 5 parámetros.
Ya sabéis parar antes de esta CallWindowProc, así que vamos a hacerlo.

Cuando estéis ahí, poner un BP en CallWindowProcA, F9 y mirar la pila:
0013EAB4   660FD37B  /CALL to CallWindowProcA from MSVBVM60.660FD379
0013EAB8   0016E130  |PrevProc = 0016E130
0013EABC   00160628  |hWnd = 00160628
0013EAC0   00174E58  |Message = MSG(174E58)
0013EAC4   00176C48  |wParam = 176C48
0013EAC8   00000004  \lParam = 4


Hay que observar ese interesante PrevProc = 0016E130, así que vamos en la ventana de desensamblado a esa dirección y nos encontramos con lo siguiente:

0016E130    55              PUSH EBP
0016E131    89E5            MOV EBP,ESP
0016E133    57              PUSH EDI
0016E134    56              PUSH ESI
0016E135    50              PUSH EAX
0016E136    53              PUSH EBX
0016E137    51              PUSH ECX
0016E138    8B45 08         MOV EAX,DWORD PTR SS:[EBP+8]
0016E13B    8B00            MOV EAX,DWORD PTR DS:[EAX]
0016E13D    8B75 0C         MOV ESI,DWORD PTR SS:[EBP+C]
0016E140    8B7D 10         MOV EDI,DWORD PTR SS:[EBP+10]
0016E143    8B4D 14         MOV ECX,DWORD PTR SS:[EBP+14]
0016E146    31DB            XOR EBX,EBX
0016E148    8A1E            MOV BL,BYTE PTR DS:[ESI]
0016E14A    30C3            XOR BL,AL
0016E14C    C1E8 08         SHR EAX,8
0016E14F    33049F          XOR EAX,DWORD PTR DS:[EDI+EBX*4]
0016E152    46              INC ESI
0016E153    49              DEC ECX
0016E154  ^ 75 F2           JNZ SHORT 0016E148
0016E156    8B4D 08         MOV ECX,DWORD PTR SS:[EBP+8]
0016E159    8901            MOV DWORD PTR DS:[ECX],EAX
0016E15B    59              POP ECX
0016E15C    5B              POP EBX
0016E15D    58              POP EAX
0016E15E    5E              POP ESI
0016E15F    5F              POP EDI
0016E160    89EC            MOV ESP,EBP
0016E162    5D              POP EBP
0016E163    C2 1000         RETN 10


Éste es todo el código que utiliza para obtener un CRC del archivo "keycode". Después hace ya una última operación que es un NOT.

¿Y con qué se compara?
Bueno, es también bien fácil...

Subrutina Check_KeyFile
...
00003E7D:  3A   LitVarStr: "2@G855G"
00003E82:  4E   FStVarCopyObj var_B4
00003E85:  04   FLdRfVar var_B4
00003E88:  10   ThisVCallHresult --> %x2 = crypt(%x1) ;aquí está el truco
00003E8D:  04   FLdRfVar var_F0
00003E90:  FB33 EqVarBool =
00003E92:  36   FFreeVar var_B4 var_F0
00003E99:  1C   BranchF   00003EAA


Con toda esta explicación pienso que ya están destripadas las entrañas del crackme, espero que se entienda.
Yo a partir de este momento creé un programa en ensamblador que fuera examinando CRC's y descubrí que si el archivo keycode tiene los siguientes caracteres: "4R)@" queda el cuadrado perfectamente de color verde... objetivo logrado.


Un saludo
karmany
09 - septiembre - 2008






#65
Ingeniería Inversa / Windows API Reference
12 Diciembre 2008, 10:37 AM
API: Interfaz de Programación de Aplicaciones

http://es.wikipedia.org/wiki/API_de_Windows:
La Interfaz de Programación de Aplicaciones, cuyo acrónimo en inglés es API (Application Programming Interface), es un conjunto de funciones residentes en bibliotecas (generalmente dinámicas, también llamadas DLLs por sus siglas en inglés) que permiten que una aplicación corra bajo el sistema operativo Windows.

Realmente son muy útiles y hacen que el trabajo del programador sea muchísimo más sencillo.
Desde el punto de vista de Ingeniería Inversa, nos puede mostrar información muy importante sobre lo que una aplicación está ejecutando. Por ejemplo, si una aplicación nos muestra un mensaje de advertencia, es muy posible que la API utilizada sea MessageBox.

Existen muchísimas API en Windows y gran cantidad también que están poco o casi nada documentadas, por este motivo, si no conocemos alguna en especial, tendremos que buscar simplemente en Internet.

Para todo programador o persona que depura aplicaciones, existen ayudas para conocer el funcionamiento de determinadas API, así simplemente abrimos el archivo de ayuda, buscamos la API en cuestión y vemos rápidamente los valores y datos que admite y el resultado que nos devolverá.
Podemos descargar este archivo desde aquí:
WinAPI32

Shaddy subió a su Web otro archivo que puede contener alguna API diferente:
http://shaddy.co.nr/win32.rar

Y finalmente y pienso que es la mejor guía, tenemos la que nos ofrece Microsoft:
http://msdn.microsoft.com/en-us/library/aa383749%28VS.85%29.aspx

Un saludo
#66
A partir de este momento, vamos a ser más serios y vamos a vigilar con más detalle que no se abran posts hablando de alguna aplicación comercial. Asimismo no se permitirá tampoco insertar imágenes reales de dicha aplicación.

En Ingeniería Inversa queremos mostrar las entrañas de cada software, pero siempre respetando las leyes. Nunca hemos subido ningún crack a la red y seguiremos luchando por este camino contra toda ilegalidad.

Si alguien incumple esta norma, es muy posible que dicho post sea eliminado.

Un saludo
#67
PRÓLOGO

Después de recibir varias consultas sobre este tema, hemos decicido abrir este nuevo post, dando a conocer principalmente a los programadores los distintos sistemas para proteger sus aplicaciones:

-Protecciones que pueden implementar ellos mismos en sus programas...
-Programas gratuitos que pueden utilizar para empaquetar sus aplicaciones
-Programas de pago..
-Consejos...

Nosotros sabemos que a una persona con buenos conocimientos, cualquier protección le es indiferente, porque no hay nada infalible, pero vamos a mostrar las distintas formas que conocemos.

¿Por qué abrimos este post? Pues porque la gente que diariamente trabaja con Ingeniería Inversa es la gente que se enfrenta con las protecciones actuales y sabe cuáles son las más difíciles (que no imposibles) y cuáles puede aconsejar...

Un saludo y esperamos que os pueda servir de guía antes de decidiros por una u otra opción...





INTRODUCCIÓN

Varias de las preocupaciones de un programador a la hora de distribuir su aplicación pueden ser:

-Disminuir el tamaño de la misma todo lo posible
-Crear licencias para usuarios registrados
-Crear versión DEMO
-Proteger la aplicación para que no sean usadas licencias ilícitas

         

Primeramente, y antes de todo, hay que comentar unos detalles que todo programador debe saber:
-Ningún programa es incrackeable.
-Hay protecciones fáciles,...., difíciles, ...., muy difíciles y muy muy difíciles, pero no imposibles.
-Muchos programadores piensan que por no tener el código fuente, al cracker le va a resultar más complicado estudiar la aplicación. Ya les puedo asegurar a todos los que piensen así: que se equivocan al 100%. Si analizaramos cualquier programa compilado con cualquier lenguaje de programación, llegaríamos a ver secuencias de 0 y 1 que el procesador entiende directamente. Pero existen muchos programas denominados desensambladores que lo que hacen es convertir esa secuencia de 0 y 1 en código ensamblador. El cracker domina este lenguaje.
-A parte de la ayuda que es un desensamblador, se unen los debugger que son herramientas para la depuración del código. Estos debuggers a día de hoy, están muy desarrollados y les puedo asegurar que su aplicación será incapaz de detectarlos.
-Las personas que comienzan su andadura por el mundo de la Ingeniería Inversa son denominadas Newbies. Y no hay que subestimar a nadie.
-Existen en la actualidad muchísimos programas para proteger y/o reducir tu aplicacion, estos programas se denominan empacadores, empaquetadores o en inglés packers.
-En este tutorial vamos a hablar principalmente de aplicaciones a 32 bits en ejecutadas en Microsoft Windows.

Después de todo esto seguro que ya sabrás que tienes dos opciones:
    -Implementar tú mismo la protección en tu aplicación
    -Utilizar uno de los muchos empacadores que existen


Implementar uno mismo la protección:
Como ya se puede uno imaginar, hay que crear licencias y una versión demo. Es realmente una labor un tanto costosa, pero con toda la información que hay en Internet seguro que puedes conseguir una base para comenzar. Hay muchas personas que ya tienen el código fuente preparado para distintos software y lo que hacen es modificar ciertos parámetros y así los nombre-contraseña también son diferentes.

Utilizar un packer:
La utilización de estos programas tiene una gran ventaja: que en la mayoría de ellos se pueden ya crear licencias, versiones demo, protecciones contra desensamblados/debuggers, e incluso la disminución del tamaño de la aplicación consideramente.
Por contra, si quieres crear una aplicación comercial, en la mayoría de ellos deberás comprar el producto, lo que requiere que tu aplicación aumente también de precio.
También se debe tener en cuenta que los packers que hace unos años eran muy complicados, actualmente han sido analizados hasta su último bit y gente Newbie es capaz incluso de enfrentarse a este tipo de protecciones. Pero todo esto lo veremos con más detenimiento después.

Hablaremos un poco de los métodos anti debugger/desensambladores
#68
Ingeniería Inversa / ResCode Imagen v2.0.4
15 Mayo 2008, 10:16 AM
Después de un largo tiempo he conseguido actualizar este programa que estoy desarrollando. Alguno ya me pidió su ampliación.
El archivo ayuda tiene todo bien explicado.

ResCode Imagen es un programa de ayuda a los Editores de Recursos para poder añadir o modificar imágenes (gráficos) a programas que hayan sido compilados en Delphi o Borland C++.

Sé que todavía quedan bastantes cosas por añadir...

Bueno espero que a alguien le sirva.
Y todas las críticas, sean buenas o malas serán bienvenidas.

Un saludo.

DESCARGA:
(Gracias a Ricardo Narvaja):
ResCode Imagen v.2.0.4

karmany
#69
Parece ser que desde hace ya unos días, la página http://www.pic2up.net/ está sufriendo algún tipo de problema y no permite ver las imágenes alojadas en el host.

Esto también es un problema para nuestro foro, ya que muchas imágenes fueron alojadas en dicho host y no se pueden ver.

Esperaremos un tiempo prudente a ver si se solucionan estos problemas y aparecen de nuevo las imágenes, si no, buscaré un nuevo host y poco a poco iré subiendo de nuevo todas las imágenes que tengo guardadas..

Un saludo
karmany
#70
Este tutorial ha sido realizado por karmany el 10 de noviembre de 2007 como solución al CrackME04 de x4uth. Descarga del crackme y más información en:
http://foro.elhacker.net/index.php/topic,180720.msg860578.html#msg860578


TUTE 'Crackme04 de x4uth' por karmany

Herramientas utilizadas: OllyDBG 1.10

INTRODUCCIÓN:
Viendo que nadie más se apunta a resolverlo, y porque se me está olvidando su solución pues creo conveniente realizar el tute de este fantástico CrackMe.
La verdad que el crackme no es que sea fácil, pero veremos cómo encontrarle puntos débiles que harán que todo sea mucho más sencillo.
Si analizamos el crackme con RDG Packer Detector, nos dice que no está empacado y que ha sido compilado con Microsoft Visual C++ 6.0. x4uth es un programador y cracker con experiencia así que podemos esperar muchas maldades.


TOMA DE CONTACTO:
Lo primero que voy a hacer es analizar el crackme y a escribir las cosas más importantes que veo:
1.- Después de examinarlo y ejecutarlo con el OllyDBG, observo que termina todo en un Exit Process. Así que cierro el OllyDBG y veo que el crackme se sigue ejecutando...
Ummm. En este punto mi lógica me dice que debe de haber algún proceso ejecutándose, así que simplemente pulso Ctrl+Alt+Supr y en procesos observo que se está ejecutando uno llamado: "Crackme04.exe"... ya te tengo...
2.- El crackme pide un UserName y un Keycode, así que yo voy a buscar la solución para UserName = "karmany".
Si introduzco un nombre-serial inválido me saldrá una nag de:
-Título: "!!!!!!!!"
-Mensaje: "Invalid KeyCode"
3.- Curiosamente, si pulso la tecla "Enter" mientras tengo el cursor en cualquier TEdit veo que el crackme se cierra... ¡Vaya!


MANOS A LA OBRA:
Como he dicho en el punto 1, hay un proceso ejecutándose así que voy a atachearlo. Ejecuto directamente el "crackme04.exe" y posteriormente abro el OllyDBG y voy a: File --> Attach y selecciono el proceso "crackme04.exe".
OllyDBG ya me avisa abajo: "Attached process paused at ntdll.DbgBreakPoint".
Pulso F9 para que se ejecute correctamente ya debugeado. Como se puede uno imaginar.


MI FORMA DE ALCANZAR LA "ZONA CALIENTE":
Ahora muchas formas de continuar, así que cada uno que elija o pruebe la que más le guste. Mi idea es la siguiente para este crackme:
Voy a buscar la API con la que toma el UserName y el Keycode y siguiendo el código probablemente me lleve a la zona "caliente".
Hay varias forma de tomar los datos de un TEdit, así que con el plugin "CommandBar" pongo varios Breakpoints y después de probar unas cuantas veces descubro que lo que interesa poner en la CommandBar es lo siguiente:
"BP GetWindowTextA".

Pongo de nombre: "karmany" y de serial "1234567890", pulso en Verificar y efectivamente se detiene el OllyDBG en GetWindowTextA pero para poder continuar hay que pulsar "Ctrl+Atl+Supr". Paso la función y retorno seguidamente al código aquí:
407597    MOV ECX,DWORD PTR SS:[EBP+10], que es justo después de la llamada a GetWindowTextA.

Llego hasta el RET, lo paso con F7 y llego a:
4014F7  ADD ESI,7C
En este punto ya veo que las dos CALL que aparecen obtienen: una el nombre (4014F2  CALL 00407562) que es la que acabo de pasar y la otra el serial (401501  CALL 00407562) que es la que voy a pasar ahora.
Llego hasta el RET, lo paso, vuelvo a llegar hasta el siguiente RET lo vuelvo a pasar y ya por fin caigo en el código caliente en:
4016EF   XOR EAX, EAX

Esta ha sido una forma sencilla de caer rápidamente en la zona que nos interesa.
La subrutina que hay que analizar por lo tanto:
Comienza en: 4016A0  PUSH EBP
Termina en:   402227 RETN


ANÁLISIS DE LA GRAN SUBRUTINA:
Para analizar esta gran subrutina hay que ir poco a poco entendiendo las trampas que nos ha hecho x4uth.

Tras analizarla detenidamente y traceando muchas veces por el código, podemos echar un vistazo al final y observar lo siguiente:


Ahí donde está el BP, tenemos el byte a 1 que nos registra.
Pero para que llegue a ejecutarse ese código x4uth nos ha puesto una serie de obstáculos que hay que saltar, ya que nos mandan después de MOV BYTE PTR SS:[EBP-1],1 y por lo tanto no estaremos registrados... son los JMP 004021FC

Yo en un primer momento intenté solucionarlo por Fuerza Bruta, que no voy a explicar aquí, pero me cansé de esperar tanto tiempo y ya que tenemos un buen debuger pues accedí a analizar todo el código...

Voy a estudiar los saltos:
Pongo de nombre: karmany
Pongo de serial: 12345678

401778     JE SHORT 00401793 Probando descubrí que salta cuando dejamos vacío el UserName. Así que ya sé: dejo de nombre "karmany"
401789     JE SHORT 00401793 Aún dejando el serial vacío no salta, así que como karmany no salta pues karmany me vale.
401791     JE SHORT 0040179D Tiene que saltar y salta, así que no me preocupa más.
4017C3     JE SHORT 004017CF Tiene que saltar. Se ve cómo toma los valores de mi nombre pero aún poniendo el serial vacío salta perfectamente. Sigo.
401B14     JE SHORT 00401B17 Hasta llegar aquí, ha realizado una barbaridad de operaciones, pero lo que me interesa es que hace un XOR EDX, EAX y una comparación CMP  EDX, 17. Me detuve en el XOR EDX, EAX y observé el valor de los registros: EAX = 37 y EDX = 36. Ummm parece que son los valores ASCII de mis 2 penúltimas cifras!!! O sea que XOR EAX, EDX tiene que ser 17. hay muchas combinaciones. Yo puse varias pero cuando va trascurriendo el CrackMe te das cuenta que no vale así que para no alargar voy a poner la que descubrí al final: "+<":
+ = 2B
< = 3C
XOR 2B, 3C = 17
Queda un serial ahora: "12345+<8"

Ahora nos encontramos con 4 malignos saltos. No se tienen que cumplir porque nos mandan a un RET. Toca investigar.


1º Salto.
Si me pongo en la comparación en 401F19 veo que el dato es FFFFFFF5. Así que por probar voy a ir modificando valores de mi serial y observo que ese valor (FFFFFFF5) se modifica al variar la 2ª cifra. Si pongo de serial "10345+<8" el valor cambiará a FFFFFFF3. Se puede hacer a mano pero yo hice una sencilla Fuerza Bruta y me dió el siguiente resultado: "=" (símbolo igual)
Así que queda de serial: "1=345+<8"

2º Salto.
Esta vez veo que se modifica la 1ª cifra así que descubro esta vez que es la letra "R".
Serial: R=345+<8

3º Salto.
Corresponde a la 3ª letra. Encontré que podía ser la "O".
Serial: R=O45+<8

4º Salto.
Este salto me hizo modificar los valores del XOR EDX, EAX. Por eso los cambié. Lo hice por Fuerza Bruta. Recuerdo que paró enseguida.

401FF1   JE SHORT 00401FFD Se tiene que producir. Modificando la 4ª cifra cambiaba de valor, así que descubrí: ">".
Serial: R=O>5+<8

402026     JE SHORT 00402032 Se tiene que producir. Modifiqué la 5º cifra y descubrí un valor posible: "i"
Serial: R=O>i+<8 (sale con este serial una ventana curiosa jeje)

4020B0     JE SHORT 004020BC Tiene que saltar. Y salta.

4021F2     JE SHORT 004021F8 Por fín el último salto que nos registra. Se tiene que producir. Modifico la última cifra que queda y compruebo que salta con: "p".

Serial Final: R=O>i+<p

Voy a probar el serial a ver:


Espero que a alguien le pueda ayudar.
Seguro que se puede resolver de muchas otras formas.

Un saludo
karmany
#71
Ingeniería Inversa / Noticias
30 Septiembre 2007, 15:32 PM
Noticias


10 de septiembre de 2007 - Actualización foro Ingeniería Inversa

A partir de esta fecha, nos juntamos ShaDDy y karmany para la reestructuración, ordenación y actualización del foro de Ingeniería Inversa en elhacker.
Esperamos sea de vuestro agrado.







23 de septiembre de 2007 - Nueva cara a la web!!

Después de un tiempo en el que se comentaba el posible cambio de imagen de la Web http://www.ech2004.net/, por fin podemos deleitar nuestros ojos con este fantástico resultado:
-Todo muy bien ordenado y estructurado
-Nuevas descargas
-Grandísima cantidad de herramientas, plugins...
-Toda herramienta actualizada a su última versión.

Un sitio muy recomendable de visitar.

#72
Este tutorial ha sido realizado por el forero Nanocity el 17 de agosto de 2007 como solución al Crackme1 de Nitr0k1ller. Descarga del crackme y más información en:
http://foro.elhacker.net/index.php/topic,180720.msg860578.html#msg860578


Tutorial Crackme1 de Nitr0k1ller por Nanocity

Bueno se trata del crackme de Nitr0k1ller, el tuto es muy simple y esta hecho con intención de que lo entienda el que este justo empezando con esto:

Lo primero que hacemos es ejecutar el crackme para mirarlo un poco por encima:
Vemos que nos pide un serial y que para poder introducirlo tenemos que activar un botón, además navegando por los menús vemos que parece ser que está escrito en VB.

Para asegurarnos corremos el PeiD y efectivamente nos dice que es así. Para activar el botón podemos usar algún descompilador de VB pero como no tengo ninguno por aquí usaremos el Olly que nos sirve igual.

Un método de hacerlo es buscar el bit que determina si la propiedad Enabled está o no activa, asique cargamos el Olly y buscamos la caption del botón en este caso "&Check" (Search for -> All referenced text strings, Search for text), la encontramos y pinchamos en el texto para que nos lleve a la zona de memoria donde está, caemos en una zona donde parece que se han cargado todos los objetos y dentro de las propiedades del botón. Ahí buscamos un solo bit que este a 0 (ya que el botón esta desactivado), y vemos que hay unos cuantos (con un poco de práctica se puede saber cuál es el correspodiente) así que probamos cambiando el primero (Modify byte) a un 1. Corremos el crackme y vemos que el boton sigue inactivo pero que ha cambiado de posición, hemos cambiado lo que no era... No pasa nada, reiniciamos el olly, probamos con el siguiente y apuntamos la dirección por si acertamos... Bien! Esta vez el botón esta activo, ya sabemos que bit debemos cambiar. Para hacerlo damos click derecho, Copy to executable->All modifications, aparece otra ventana, la cerramos y nos da la opción de guardar nuestro programa modificado, asique lo guardamos con otro nombre.

Ahora viene la segunda parte, sacar el serial. Cargamos nuestro crackme modificado, sabemos que esta en VB, en esos casos es interesante ver en el olly las funciones que se han usado (Crtl+N), ahi vemos que hay funciones de concatenación de strings y sobre todo una de comparación (vbaVarTstEq), colocamos un breakpoint cada vez que se llame a esa función y ejecutamos otra vez el crackme. Introducimos un serial cualquiera y vemos donde para el Olly, es posible que ahí se haga la comparación entre nuestro serial y el válido asique comprobamos que se ha hecho algunas instrucciones antes. Vemos que hay muchas funciones para ver la fecha del sistema, quizá sea interesante. Colocamos con F2 algún breakpoint después de esas instrucciones y volvemos a ejecutar para tracear qué se hace con esa fecha. Vamos avanzando con F8 y nos damos cuenta de que justo antes de la comparación hace un PUSH EAX, traceamos en la pila EAX y vemos una cadena sospechosa y nuestro serial un poco más arriba. Además si nos fijamos esa cadena es el mes, el año, el dia, guión, la hora y los minutos en un formato concreto. Todo esto es suficiente para hacernos pensar que puede ser un serial válido asique lo probamos, teniendo cuidado de introducir bien el minuto y no estar demasiado lentos. Y sí, funciona! ya hemos crackeado el programa Cheesy.

Espero que a alguie le sirva de algo.

Un saludo.
Nanocity
#73
Este tutorial ha sido realizado por karmany el 15 de julio de 2006 como solución al crackme1 de frankener1986. Descarga del crackme y más información en:
http://foro.elhacker.net/index.php/topic,180720.msg860578.html#msg860578


TUTE 'Crackme1 de frankener1986' por karmany

Programas utilizados:
   -OllyDBG
   -Numega SmartCheck 6.03.
   -Ultraedit


INTRODUCCIÓN
Al ejecutar el Crackme1 de frankener1986, vemos la siguiente interfaz:


Es decir, se trata de activar el botón Comprobar Serial, introducir un nombre, un serial y pulsar Comprobar Serial.
Quiero hacer algo sencillo y no es mi intención extenderme mucho... Si algo no se entiende, preguntarme en el foro.

QUITAR QUE RECONOZCA AL OLLY
Cuando abrí por primera vez el crackme con el Olly, apareció un messagebox de título: Je, je y que decía buen intento..
Analizando un poco el principio del código se ve claramente que el salto se produce en:
00402E72 --> JE Crackme1.00402F4B
Si salta no reconoce al olly, entonces le quito la comparación y le pongo un salto definitivo:
00402E72 --> JMP Crackme1.00402F4B
00402E77 --> NOP
Y solucionado lo del Olly.

ACTIVAR EL BOTÓN
En VB podemos desactivar el botón de dos formas: una por defecto al diseñar nuestra interfaz, en las propiedades y la otra forma es utilizando código al ejecutar el programa.
Cuando es por defecto, se puede buscar con el Olly por ej. el nombre del botón y unas líneas más abajo uno de los bits 00 se pone a 01 y el botón aparecerá activado: enabled true. Sé que esto así no se entiende, pero hacer lo que hice yo: hice un programa con un botón activado y otro con el botón desactivado y véis el código y modificáis.

En este crackme modifiqué todos los botones que vi (que hay más de uno, no sé si para despistar) y los puse activados. Pero no resultó, así que decidí abrir el programa Numega SmartCheck 6.03. (A partir de aquí NSC).
Abres el crackme con el NSC, lo ejecutas, pulsas en el + del hola_Load y se observa esto:


XDDDDDDDD.Enabled <- False (Boolean)
AQUÍ ESTÁ.. aquí en el Load del form es donde desactiva el botón.. y se ve también que pone "Comprobar Serial" un poco antes.

A la derecha podemos ver: CRACKME1ORIGINAL.EXE!000031F9
Lo de CRACKME1ORIGINAL se lo puse yo.
Bueno lo que interesa es el 31F9. Le sumamos el 400000 y queda:
4031F9 y esta es la dirección a la que voy a ir en el Olly:


Subo un poco para ver los PUSH (pone en la pila los valores) y se ve rápidamente cómo en:
004031E7 --> PUSH 0
Lo sustituyo por PUSH 1 y arreglado lo del botón..

Ahora lo que hice es crear un nuevo crackme donde no reconociera al Olly y donde estuviera activado el botón, para hacerlo todo más cómodamente, como he explicado en los dos apartados anteriores.. Utilizando para esto último el Ultraedit.

Crackearlo es fácil, pues buscando referencias llegamos rápidamente a "Enhorabuena, lo conseguiste etc...". Y de ahí solamente hay que mirar los cuatro saltos que hace el programa y modificarlos...

DESCIFRANDO LA cifrado
No lo he dicho antes pero con el NSC, se ven perfectamente las cadenas encriptadas...así que por este motivo decidí indagar desde el principio con el Olly...

Ejecuté el programa con el Olly, puse
nombre: abcd
serial: karmany
y pulsé en el botón "Comprobar serial" y caí aquí:
00403400
Analicé un poco el código y lo primero que encontré que me llamara la atención fue este código:


00403489 --> PUSH EAX
va a calcular el len de EAX, que es "abcd"

00403492 --> CMP EAX, 3
compara el len con 3

00403495 --> SETG CL
Activa un bit si es mayor..

004034B1 --> JE SHORT Crackme1.004034C5
Salta si el len del nombre es igual o menor que 3.

Es decir que el nombre tiene que tener más de 3 caracteres, y que la cifrado se hace en:
004034B7 --> CALL Crackme1.004038AO
voy a seguir esta CALL.

Me manda a dos subrutinas más y al final a una tercera que es donde lo hace todo:
004039E0 --> PUSH EBP
Este es el comienzo de la tercera subrutina..
Analizando el código llego a esto:


Donde se ve claramente un bucle.
SI toma el valor del len del nombre(lo hace un poco más arriba) y EAX=1. Cuando SI sea =0 saltará..
Este bucle lo que hace es poner el nombre al revés, es decir, abcd lo pone: dcba.
Lo puedes ver poniendo por ej. un BP en 00403BD9 y mira en EAX.

Después de esto hay una nueva llamada. Yo he entrado en ella y la he investigado. Esta llamada se repite también más abajo.
Después de probar también con varios nombres, llegué a la conclusión de que esta CALL lo que hace es codificar una cadena sumándole al valor hex. de un carácter un valor constante, y poner mediante otra call dentro de esta, el primero en mayúsculas, segundo minúsculas.. etc...
En el ej. que he puesto más abajo se entiende todo esto perfectamente.

Esta llamada es esta:
00403C1C --> CALL Crackme1.00403510
Puedes observar el resultado de esta primera CALL poniendo un BP en 00403C27 y mirando en EAX.
La cadena que utiliza es el nombre, al revés.
La constante es el len del nombre.
Me he fijado que aparecen dos cadenas dentro de esta CALL:
abcd
dcba
Después de descifrar todo ya me dí cuenta que la primera cadena abcd se le calcula el len y es la constante. La segunda cadena dcba es la que se utiliza para codificar.

Si el nombre es abcd el resultado que verás en EAX será: HgFe


Razonemos esto hasta aquí:
-Nombre: abcd
1º Le da la vuelta: dcba
2º Lo codifica sumándole el len a cada carácter:
d = 64 hex. + 4(len) = 68 que corresponde a --> h
c = 63 hex. + 4 = 67 --> g
b = 62 hex. + 4 = 66 --> f
a = 61 hex. + 4 = 65 --> e

3º Pone mayúsculas, minúsculas...
Resultado = HgFe

Continuemos...
Luego en 00403C39 Me despistó un montón el "abc". No tenía ni idea de para qué podría servir...

Y después viene otra vez la CALL Crackme1.00403510
Esta vez la constante que le suma es 3, no como antes len del nombre.
Y la cadena que utiliza es el nombre.
Me he fijado también esta vez que utiliza estas dos cadenas:
abc
abcd
Aquí me extrañé al comprobar que aparecía "abc".
(Como comento al final, y en la misma call de arriba, tras descifrar todo, supe que a la cadena abc se le calcula el len y es la constante, y la cadena abcd es la que se utiliza para codificar)

El resultado de esta segunda codificación se puede ver poniendo un BP en 00403CE5.
El resultado es DeFg.
Razonándolo igualmente:
-Nombre: abcd
1º Codifica sumándole 3.
    abcd --> defg
2º Pone mayúsculas, minúsculas.
    defg --> DeFg

Hasta aquí un resumen de lo que logré ver:
-Nombre: abcd
-Dos codificaciones: HgFe, DeFg
-Una cadena: abc

A partir de aquí, aparecen 4 saltos que nos mandan fuera del mensaje: "Enhorabuena, lo conseguiste..."
Entonces se trata únicamente de descifrar qué quieren decir esos saltos y así lograremos saber cómo codifica el serial...

Primer salto:
00403CE4 --> JNZ Crackme1.00403E59

Se ve claramente que en 00403C76 pone en pila el valor EAX, para calcularle el len.
En EAX se ve HgFe. El programa coge 4.
Después pone este 4 en memoria y seguidamente calcula el len a la cadena: DeFg. También 4.

Luego muy atentos, porque en:
00403C9A --> MOV DX, WORD PTR SS...
Lo que hace es poner en DX el valor del primer len que hemos cogido...el de HgFe que puso en memoria.
Es decir quedaría en DX el primer len y en AX el segundo len. Se entiende no?
Después en:
00403CA1 --> ADD DX,AX
Pone el DX la suma de los dos y en:
00403CAD --> ADD DX, 1
Le suma 1 a DX. El resultado de DX es por lo tanto: 9.

En este punto es donde me quedé un poco trabado.. Porque no sabía qué es lo que compara.. Sí, compara DX pero, con qué??
DX es el doble de caracteres del nombre más uno..
El problema es que no sé exactamente qué hace vbalenvar.
Aquí, frankener1986 sin quererlo me resolvió la duda, pero quise buscar la lógica.
Lo único lógico que se puede ocurrir en este momento es que el serial tenga de len=DX.
Es decir para abcd tendrá 9.. Así que volví a cambiar mi serial por: karmany12 y
Perfecto.. ya no salta.. eso era.

Segundo salto:
00403D84 JNZ Crackme1.00403E59
A primera vista se ve que utiliza la función Mid. A ver con qué...!!
Si haces un BP en la dirección 00403D1A, podrás observar que esa función Mid, lo que hace es coger los len(nombre) primeros caracteres del serial..
Ej. Nombre: abcd
      Serial:   karmany12
Cogerá : "karm"

La segunda función Mid, coge los últimos len(nombre) del serial. En este caso, lo puedes ver poniendo un BP en 0043D66. El resultado es:
"ny12"

Después en 00403D78 va a hacer una comparación de String.
Compara EAX con ECX.
Si pones un BP en 0043D78, verás que las cadenas que va a comparar son:
EAX --> "karm"
ECX --> "HgFe"
Es decir, va a comparar los cuatro primeros caracteres del serial con la primera codificación que hizo.. Eso quiere decir que mi serial karmany12 no es correcto.. Reinicio el programa pero esta vez pongo:
Nombre: abcd
Serial:    HgFeany12

Compruebo y veo que no salta!! :-). Vamos bien..

Tercer salto:
00403D96 --> JNZ Crackme1.00403E59

Muy sencillo igual.. La comparación la va a hacer entre los dos valores que ponemos en la pila: PUSH EDX y PUSH EAX.
Si ponemos un BP en 00403D92, podemos ver estos valores en la pila:
DeFg
ny12
Es decir, compara los últimos len(nombre) del serial con la segunda codificación..
Pues voy a probar de nuevo:
Nombre: abcd
Serial:    HgFeaDeFg

Pruebo y... no salta.. sigue la cosa bien, y ya solo queda un salto..

Cuarto y último salto:
Bueno, viendo el resultado del serial y viendo que el len del serial es doble más uno, lo único que se me ocurre es que este salto es para averiguar el carácter que va en medio del serial..
Repasé una y mil veces el código intentando ver  algo que me diera alguna solución, y no encontré nada... ya sólo me quedaba este último paso que es lo que puse en el foro que me quedaba...

Así que, como no sabía qué hacer hice un programa en VB y comparé un carácter utilizando la función Mid..
El programa se basa en un formulario, con un Textbox y un botón. Al pulsar el botón puse este código:

Private Sub Command1_Click()
Dim a As String
a = Text1.Text
a = Mid(a, 2, 1)
If a = "u" Then Stop
End Sub


Sencillo, muy sencillo. Escribo algo en el textbox y si el segundo carácter es una u, se detiene con un stop.
Me fui al Olly y empecé a ver dónde comparaba y dónde aparecía la "u" y por supuesto que la encontré..
Aparece cuando el programa intenta leer un valor en la memoria del programa..
Por ej. cuando pone en la pila el valor:
PUSH Proyecto1.004017D8

Para confirmarlo dumpeé la dirección 004017D8 y modifiqué la u por otra letra y el resultado fue perfecto.

Volví al crackme, e intenté ahora sí buscar dónde lee algún valor en su memoria y el único que hay es este:
00403DDF --> MOV DWORD PTR SS:[EBP-AC], Crackme1.00402930
Dumpeé esa dirección (00402930) y encontré: 2D que corresponde al carácter "-".
Por supuesto lo modifiqué para comprobarlo y fue perfecto..


Con todo esto que acabo de explicar ahora ya es muy fácil hacer el keygen..

PD. Volviendo a leer mi tute, me dije... y qué era esa cadena que había por ahí (abc)??
Viendo la solución parece que no valiera para nada!! Como expliqué más arriba en la segunda codificación la hace sumando 3 que es el len de abc!! Me lo confirmó frankener1986.

Espero que a alguien le sirva de ayuda todo esto...ya que yo lo poco que sé lo he aprendido de leer tutoriales de otras personas..y por supuesto de poner en práctica la lógica..

Un saludo..
#74
Ingeniería Inversa / Crackmes / Tutoriales
16 Septiembre 2007, 13:33 PM
Crackmes / Tutoriales

En este post se irán añadiendo ordenadamente los enlaces a los distintos crackmes o tutoriales que propongan los usuarios de elhacker.
Los crackmes constarán de tres enlaces: Descarga del crackme,  post original y tutorial con la solución.
Si fallara la descarga, me he guardado una copia de todos los crackmes de este post. No dudar en pedirme cualquiera, que lo volveré a subir.

ROJO: Crackme todavía sin resolver
AMARILLO: Crackme resuelto por algún forero pero todavía pendiente de realizar el tutorial.
VERDE: Crackme resuelto con tutorial incluido.


TUTORIAL: modificar programas
Autor: karmany
Tutorial bastante completo donde se explica principalmente cómo modificar los recursos de un programa. Si estás buscando cómo modificar la interfaz, menús, cadenas de texto, habilitar algún control o modificar sus propiedades y un largo etc.., debes visitar este enlace.
Hay bastantes ejemplos y en distintos lenguajes de programación.
http://foro.elhacker.net/index.php/topic,134513.0.html




CRACKME:  Crackme1 de frankener1986
Autor: frankener1986
Nombre: Crackme1
Fecha: 12 de julio de 2006
Tamaño: 28,0 KB
Compilador y/o Packer: Visual Basic
Objetivos:
   1º parchearlo para encender el boton
   2º encontrar la serial para un nombre, o ir al paso tres directamente xDD
   3º hacer un keygen ^^
Dificultad: 3 (1-10)
Descarga del crackme:
De momento lo descargaremos de aquí, es el crackme1.zip:
http://ricardonarvaja.info/WEB/CONCURSOS%202004-2006/CONCURSO%2095/CONCURSO%2095.rar
Post Original:
http://foro.elhacker.net/index.php/topic,131302.0.html
Tutorial con la solución:
Tutorial hecho por karmany el 15 de julio de 2006
http://foro.elhacker.net/index.php/topic,180728.0.html





CRACKME:  Crackme1 por Nitr0k1ller
Autor: Nitr0k1ller
Nombre: Crackme1
Fecha: 18 de agosto de 2007
Tamaño: 52,0 KB
Compilador y/o Packer: Visual Basic
Objetivos:
    1- Activar un botón
    2- Encontrar un serial válido.
Dificultad: 2 (1-10).
Descarga del crackme:
https://mega.nz/#!HtBiAbqa!eReYrnW3UhG9J2MXtsREEu_wRwjYGdsV7qy7wwCpbJc
Contraseña del archivo zip: elhacker.net
Post Original:
http://foro.elhacker.net/index.php/topic,174863.0.html
(5ª respuesta)
Tutorial con la solución:
Tutorial realizado por Nanocity el 17 de agosto de 2007
http://foro.elhacker.net/index.php/topic,181144.0.html
Tutorial realizado por .:UND3R:.
http://foro.elhacker.net/ingenieria_inversa/tutorialcrackme1_por_nitr0k1ller-t337915.0.html






CRACKME:  Renascense de skapunky
Autor: skapunky
Nombre: Renascense 1
Fecha: 13 de septiembre de 2007
Tamaño: 80,0 KB
Compilador y/o Packer: Visual Basic
Objetivos:
    Encontrar un ID/pass válidos
Dificultad: 1 (1-10) Para todo Newbie
Descarga del crackme:
https://mega.nz/#!L1AHVTjI!dMtiEw8cQJZSDVqIOouBqMcbZXthyGZ4GBIo2353tmw
Contraseña del archivo zip: elhacker.net

http://www.crackmes.de/users/skapunky/renascense_crackme/
Post Original:
http://foro.elhacker.net/index.php/topic,180354.0.html
Tutorial con la solución:
Tutorial realizado el día 20 de septiembre de 2007 por el mismo autor. (Por esta vez lo vamos a permitir...)
http://foro.elhacker.net/index.php/topic,181151.msg862539.html#msg862539





CRACKME:  Skrackme 1 de skapunky
Autor: skapunky
Nombre: Skrackme 1
Fecha: 18 de septiembre de 2007
Tamaño: 32,0 KB
Compilador y/o Packer: Visual Basic
Objetivos:
    1- Eliminar una nag
    2- Activar un botón
    3- Encontrar un ID/pass válidos
Dificultad: 2 (1-10). La mayor dificultad es eliminar la nag. Cualquier duda, preguntar en el post original.
Descarga del crackme:
http://www.megaupload.com/?d=TECBE0N9
Post Original:
http://foro.elhacker.net/index.php/topic,180834.0.html
Tutorial con la solución:
Tutorial realizado por .:UND3R:.
http://foro.elhacker.net/ingenieria_inversa/tutorial_skrackme1-t335509.0.html






CRACKME:  Crack Me If You Can by Karman
TUTORIAL PENDIENTE          -          TUTORIAL PENDIENTE          -          TUTORIAL PENDIENTE          -          TUTORIAL PENDIENTE          -          TUTORIAL PENDIENTE          -          TUTORIAL PENDIENTEAutor: Karman
Nombre: Crack Me If You Can
Fecha: 24 de septiembre de 2007
Tamaño: 32,3 KB
Compilador y/o Packer: Dev-C++
Objetivos:
    Usuario-clave a partir de un serial
Dificultad: 3/4 (1-10) - Crackme curioso, no para recién iniciados, en donde para encontrar la clave correcta hay que analizar antes el código. Como todo... tiene su truco.
Descarga del crackme:
http://h1.ripway.com/karman/Files/crackme.rar
Post Original:
http://foro.elhacker.net/index.php/topic,181724.0.html
Tutorial con la solución:
Pendiente de hacer el tutorial.






CRACKME:  CraCKmE - Molesto por <~>FeRcHu<~>
Autor: <~>FeRcHu<~>
Nombre: CraCKmE - Molesto
Fecha: 04 de octubre de 2007
Tamaño: 20 KB
Compilador y/o Packer: Visual Basic
Objetivos:
    1º Conseguir user-pass (nombre-contraseña)
Dificultad: 2/3 (1-10)
Descarga del crackme:
http://www.gigasize.com/get.php?d=p8dg3hk0bjb
Post Original:
http://foro.elhacker.net/index.php/topic,182810.0.html
Tutorial con la solución:
El miniTutorial ha sido realizado por x4uth el 07 de octubre de 2007, está en el mismo post:
http://foro.elhacker.net/index.php/topic,182810.0.html






CRACKME:  CrackMe04 by x4uth
Autor: x4uth
Nombre: CrackMe04
Fecha: 08 de octubre de 2007
Tamaño: 284 KB
Compilador y/o Packer: Visual C++ 2005
Objetivos:
    Conseguir una combinación user/keycode válida
Dificultad: 4 (1-10) Un buen crackme para usuarios avanzados.
Descarga del crackme:
http://upload2.net/page/download/79CCTbxsbWBB6q1/CrackMe04.rar.html
Post Original:
http://foro.elhacker.net/index.php/topic,183308.0.html
Tutorial con la solución:
Tutorial realizado por karmany el 10 de noviembre de 2007.
http://foro.elhacker.net/index.php/topic,187779.0.html






CRACKME:       Crackmes 1 y 2

Autor: ^STR|DER^
Nombre: CrackMe#1 y CrackME#2
Fecha: 18 de octubre de 2007 (23 de mayo de 2006 en el enlace)
Tamaño: 9,50 KB y 12,0 KB
Compilador y/o Packer: Visual Basic 5
Objetivos:
    1.- Introducir una Contraseña de acceso
    2.- Número Clave - Contraseña de acceso
Dificultad:
    1.- 0 (1-10) Es tan sencillo que todo el mundo tendría que echarle un vistazo.
    2.- 1/2 (1-10) Es muy sencillo pero trabaja con variables Doubles que hacen utilizar los registros ST0-ST7 y puede despistar un poco.
Descarga de los 2 crackmes:
http://s7r1d3r.blogcindario.com/2006/05/00008-crackme.html
Post Original:
http://foro.elhacker.net/index.php/topic,184596.0.html
Tutorial con la solución:
Crackme#1: Solucionado por sempus y Vingilot el día 23-24 de diciembre de 2007, en el mismo post original.
Crackme#2: Solucionado por JSHN el día 17 de octubre de 2008:
http://foro.elhacker.net/ingenieria_inversa/resuelto_el_crackme2_de_strder-t231760.0.html;msg1149370#new





TUTORIAL: Mis trece tutoriales por AmeRiK@nO
Autor: AmeRiK@nO
Trece interesantes tutoriales, que explican de forma clara y sencilla cómo el autor ha conseguido vencer las limitaciones de varios programas.
PostOriginal:
http://foro.elhacker.net/index.php/topic,186599.0.html
Descarga (doc):
http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/901-1000/942-Trece%20Tutoriales_AmeRiK@nO_(.doc).rar



#75
Hilo actualizado el día: 10 de mayo de 2013

CrackSLatinos:
Gran Grupo dedicado al arte de la Ingeniería Inversa.  Se habla lengua hispana y actualmente está en continuo desarrollo. Yo particularmente aprendí aquí todo lo que sé.
Google Groups:
http://groups.google.com/group/CrackSLatinoS


Ricardo Narvaja:
Él mismo se presenta:
http://ricardonarvaja.info/#QUIENES
Autor de "Introducción al cracking con OllyDBG desde cero", cuya lectura es indispensable para toda persona. Su página contiene muchísima información, es de obligada visita.
Páginas:
http://ricardonarvaja.info/
http://ricardonarvaja.googlepages.com/


NoxSoft
Excelente página sobre el arte de la ingeniería inversa, actualizada periódicamente y con nuevos y originales artículos que no debes perderte.
http://www.noxsoft.net/


karmany.NET
Una web, donde se puede hablar de lo que quieras: de ingeniería inversa, protección de software, programación (software y web), opinión personal y cualquier cosa etc...
Enlace:
http://www.karmany.net


Karpoff:
Página actualmente desactualizada y cerrada que hace unos años tuvo muchísimo éxito. Fue una página con un grandísimo número de visitas. Gracias a personas que no quieren que quede en el olvido podemos acceder a parte de su contenido de entonces:
http://karpoff.galeon.com/


yashira.org:
Página interesante con descargas de herramientas, tutoriales etc... y foro.
http://www.yashira.org/


crackmes.de:
Sitio cerrado temporalmente.
Los usuarios realizan crackmes y cuando alguien lo resuelve realiza un tute en inglés que se pondrá junto al crackme resuelto. Hay muchísimos crackmes y tutoriales en inglés. Intenta resolver alguno...
http://www.crackmes.de/


ARTem:
Una página en inglés con muy buena información y tutoriales. Muy buen material.
http://www.accessroot.com/arteam/forums/index.php
En este enlace que encontré de casualidad, podemos acceder a todas sus herramientas, tutoriales... etc:
http://xchg.info/ARTeam/Tutorials/


quequero.org:
Página Italiana sobre cracking con bastante material. Se preocupan y está actualizada a día de hoy.
http://quequero.org/

kania.evilgirls.net:
Aunque desactualizada, página con bastantes herramientas, algunas difíciles de conseguir, y algunos tutoriales. ESET lo cataloga como sitio no seguro.
http://kania.evilgirls.net/inversa/index.html


darkfall.demon.co.uk:
Página en inglés sobre cracking. Creo que no se actualiza desde 2004.
http://www.darkfall.demon.co.uk/fallen/crack/index.htm


exetools.com:
Página con bastante material, en inglés. Última actualización: 17-agosto-2002
http://www.exetools.com/index.htm


sleepersbrains.com:
Actualmente está caida. Saccopharynx's es un fuera de serie.
Interesantísima página. Digo lo de interesantísima porque en ella  Saccopharynx's (admiro verdaderamente sus tutes) nos enseña el mundo del anillo0 (ring0). Un tema muy difícil. Lástima que los últimos tutoriales sean en inglés.
Tiene también otros muy buenos sobre cracking, destacando el inline patching a un armadillo. Muy bueno.
Saccopharynx's y Shoulck hicieron hace unos años un difícil crackme basado si no me equivoco en un driver que todavía sigue sin tener su merecido tutorial, por si alguien se anima.
http://ricardonarvaja.info/WEB/OTROS/TUTES%20SACCOPHARYNX/

Nota (Shaddy): Pensaba que no estaba y la iba a poner, incido en ésta página porque Saccopharynx es un cracker al que respeto muchisimo, y al que admiro verdaderamente. Creo que es una fuente muy importante de conocimientos, algo increíble.


Mr Silver:
El día 09 septiembre de 2001 dijo adiós a la ingeniería inversa para "dedicar su tiempo a recuperar su vida", como él mismo dice. Dejó unos fantásticos tutoriales que antes de que desaparezcan hay que guardar. También habla sobre ring0. Lástima pero su página no funciona y he tenido que borrar el link. Me gustaría que quedara aquí por todo lo que contribuyó.


elhacker - Curso de cracking por ratón:
Hace unos años "ratón" hizo unos tutoriales interesantes sobre ingeniería inversa. Con el paso del tiempo son difíciles de conseguir, así que el-brujo los subió a elhacker para compartirlos.
Este es el enlace de material sobre ingeniería inversa en elhacker.
http://www.elhacker.net/hacking-programas-hack.htm#crackmes


Foro hackhispano.com:
Foro de ingeniería inversa en hackhispano.com.
http://foro.hackhispano.com/f9/


The Decompilation Page:
Una página curiosa que habla sobre descompiladores para distintos lenguajes.
http://www.program-transformation.org/Transform/DeCompilation


RDG Packer Detector - RDG Tejon Crypter:
Esta es la página web del archiconocido programa RDG Packer Detector del autor  RDGMax. Un programa indispensable, actualizado y muy fiable.
Como este programa usa una protección particular, muchos antivirus dan falso positivo.
Enlace RDG Packer Detector:
http://www.rdgsoft.net/


Tuts4You:
Página en inglés muy interesante con bastante información y herramientas. Es una de las webs sobre ingeniería inversa que más viva está.
http://www.tuts4you.com


VXCHAOS FILE SERVER
Buenísima página con muchísimo material, creo que a nivel de contenido es la más extensa que se conoce.
http://vxchaos.6x.to/
(Enlace a veces disponible, otras no)


reversengineering
Página en inglés. Destaco la gran cantidad de OllyDBG modificados que podemos descargar. Las descargas por contra, son de Rapishare.
http://reversengineering.wordpress.com/


RCE Forums
Interesante página en Inglés. Los enlaces corresponden al foro de OllyDBG y plugins.
Podemos descargar plugins para OllyDBG muy bien ordenados y actualizados.
Foro:
http://www.woodmann.com/forum/forumdisplay.php?f=37
Plugins OllyDBG:
http://www.woodmann.com/forum/forumdisplay.php?f=38


BeatriX - Reverse Engineering
Gran página francesa de Ingeniería Inversa. BeatriX, autor de la misma, nos deleita con unos fantásticos tutoriales y ejemplos muy bien explicados. Toca también temas de ring0. Tienen foro y distintos enlaces:
http://beatrix2004.free.fr/index.html


Web de Stomper
Made in Spain. Tiene información bastante desactualizada.
http://www.angelfire.com/de2/Stomper/index.htm


Página de Alan Moreno
Página del peruano ^A|An M0r3N0^. Tiene muy buena información.
Nuevo enlace, gracias a apuromafo y Иōҳ:
http://apuro.net23.net/alanm/


ech2004
Excelentísima página con muchísima información y material. Es un lugar de obligada visita. Además en español y el autor/es se preocupan de tenerla bien actualizada. Una de mis preferidas.
http://www.ech2004.net/


La página de Erwin
Ésta página es una de las que puedes sacar muchos frutos, tiene una información muy completa y unos trabajos muy laboriosos, desde luego un gran tipo.
http://erwin.ried.cl/


nodongle.biz (mochilas-dongles-llaves USB)
Actualmente, y cada día más, los softwares comerciales prefieren proteger sus aplicaciones con dongles (mochilas). A veces, teniendo incluso la licencia lícita, nos encontramos con problemas a la hora de ejecutar dichas aplicaciones en otros ordenadores, ya que necesitamos de la mochila para poder ejecutarlas.
Esta página, muy interesante, tiene distintos programas para intentar emular dichas dongles.
http://nodongle.biz/


WASM.RU
Página en ruso con bastante información. Tendréis que traducir la página para entender algo... :-P
http://www.wasm.ru/


Página web de Colin Wilson's
Buena página de Colin Wilson donde podemos encontrar componentes gratuitos para Delphi:
http://www.wilsonc.demon.co.uk/index.htm

Dicho autor es también el creador del fantástico programa editor de recursos: XN Resource Editor que podemos descargar del siguiente enlace, incluído el código fuente:
http://www.wilsonc.demon.co.uk/d10resourceeditor.htm
http://www.wilsonc.demon.co.uk/index.htm


CrRaCkInGlAnDiA
Página web de +NCR/CRC! [ReVeRsEr]. Tiene muy buena información sobre ingeniería inversa. Me ha hecho ilusión ver que está actualizada:
http://crackinglandia.blogspot.com/


Página web de stzwei
Página web de stzwei, CrackSLatinoS.
Tiene muchísimos tutoriales propios y de muy buen nivel. Un gran "ingeniero inverso" del que se puede aprender muchísimo:
http://stzwei.comze.com/


NTCore's Homepage
Muy buena página que contiene distintos programas gratuitos enfocados a la ingeniería inversa en NET.
Destaco el programa CFF Explorer que es "en principio" un editor de encabezado (editor de PE header) pero tiene la particularidad de que es capaz de leer en el PE header lo concerniente a programas en NET.
http://www.ntcore.com/index.php


ClS | AbsshA [Reverse Engineering]
Página de ingeniería inversa, análisis de malware, Vulnerabilidades y Exploits (creación), retos, etc... en castellano. Poco a poco actualizándose, incluye todos los tutoriales de AbsshA.
Su página web:
http://abssha.blogspot.com


Mirror página Karpoff
Como ya se ha comentado, hace unos años exístía una página con mucho material relacionado con la ingeniería inversa. Gracias a foreros como ojady podemos disfrutar de toda esa información.
Su página web:
http://www.mirrorkarpoffespanishtutor.comxa.com/


Protector y Crytor de Yoda
Yoda es un excelente programador y cracker. Dejó muchísimas utilidades que a día de hoy son muy útiles, simplemente con nombrar el programa LordPE sobra. Mucha gente está interesada en crear sus propios packers y en este enlace se pueden descargar los packers que creó Yoda con su código fuente.
Yoda parece ser que dejó todo este mundo aparcado porque no ha sido visto por este mundo...
Enlace packers:
http://yodap.sourceforge.net/


Página de sequeyo
Un excelente CrackSLatino que nos obsequia con unos tutoriales propios que no tienen desperdicio. Trata en bastantes tutoriales el tema NET.
Enlace:
http://www40.brinkster.com/sequeyo/PaginaSequeyo/index.htm


La Web de Guan de Dio
Otra persona archiconocida en el mundo de la ingeniería inversa que cada vez que saca algo nuevo nos facilita enormemente las cosas.
http://guandedio.no-ip.org/
http://guandedio.reversingcode.com/

P32Dasm VB5/VB6 PCode Decompiler
P32Dasm es un excelente descompilador para Visual Basic 5 y 6. Es una buena herramienta sobre todo para compilados en p-code. Tiene incluso un plugin para IDA.
http://progress-tools.x10.mx/p32dasm.html


Hay muchos enlaces para elegir, esperamos que los disfrutéis.
#76
Viendo que a día de hoy, el foro de ingeniería inversa está algo desordenado, desactualizado y sin una idea clara, ShadowDark y yo solicitamos hace un tiempo, poder moderar el mismo e intentar ordenar todo este desbarajuste.

Por este motivo, estamos analizando cómo estructurarlo y en breve y poco a poco será modificado, actualizado y ordenado.

Por mi parte espero cualquier comentario, sugerencia o crítica.

Un saludo.
karmany
#77
He hecho un tute sobre excepciones recopilando toda la información que pude.
Pienso que ha quedado muy interesante y completo.
Quería compartirlo con ustedes:

Descarga SEH por karmany

Espero que os guste. Pienso que es un tute para gente con conocimientos avanzados.
Un saludo.

PD. No ejecutar el SEH.exe ya que está hecho así a propósito y ejecuta un bucle infinito. Para más info, leer el tutorial que está explicado todo al detalle.

Muchisimas gracias a el-brujo por subirlo a este host.
#78
Este es un magnifico tute muy bien explicado y con todo lujo de detalles que todo newbie que empieza debería tener y leer y entender.
Ha sido realizado por Shaddy de CrackSLatinoS. Está bien actualizado a día de hoy.


DESCARGA

Otro link:
Descarga

PD. Me parece tan buen tute que lo he guardado por si en un futuro alguien lo necesita o falla la descarga.
#79
Programación General / Tutorial de Inno Setup 5.1.8
12 Noviembre 2006, 20:13 PM
Llevo utilizando este programa para crear instaladores desde hace un par de años.
La verdad que querer manejarlo bien desde el principio es complicado y además no hay en español muchos tutoriales que expliquen algo específico de este programa. La mayoría de los tutes que hay por la red en español son muy básicos..

Mi intención, que no depende sólo de mi, es adentrarme en este impresionante programa y generar código para modificar la instalación de nuestros programas. Viendo por la red, esta podría ser la primera página en español que se adentrara en este programa.
Explicar esto que acabo de comentar, es un poco extenso porque el Inno Setup tiene muchas opciones, y todas es imposible verlas. Pero yo lo que quiero hacer es enseñar todo lo que yo he conseguido aprender y así entre todos estoy seguro que se podrán hacer cosas muy interesantes.

Como dice el refrán, una imagen vale más que mil palabras, así que os dejo un instalador simple que he creado y a ver qué opináis (A ver si sabéis desinstalarlo?) :
Corregido el enlace:

INSTALADOR
(Arriba a la izquierda pone Download File)

Dejaré este post unos días para ver cuánta gente está interesada en aprender el Inno Setup. Dependiendo de la gente que esté interesada haré el tutorial o no.

Imágenes del instalador:
PANTALLA PRINCIPAL


OTRA IMAGEN DEL INSTALADOR


MENÚ INICIO TRAS INSTALACIÓN


DESINSTALADOR CON CONTRASEÑA


Un saludo
#80
Hola a todos..
A ver si alguno tiene experiencia en esto: he utilizado para mis aplicaciones bastantes instaladores: Setup Factory, Installshield, Create Install Free, etc..

Bueno, desde hace tiempo me olvidé de todos esos y siempre utilizo el Inno Setup. El problema que le veo a este programa es que si lo quieres personalizar, tienes que insertar código que debe ser Delphi o Pascal, no lo sé y la verdad no tengo mucha idea para programar correctamente y acabo con el Inno Setup dándome fallos por todos los lados...

Rollos aparte, mi intención es intentar crear un programa en VB6 capaz de instalar mi aplicación en un ordenador.
El problema es el siguiente: ¿cómo consigo hacer funcionar una aplicación VB6 en un ordenador que no disponga de los archivos necesarios de VB6.?
Msvbm60.dll, Stdole32.tlb, Oleaut32.dll, Olepro32.dll

Estos archivos no se instalan por ej. en W2K, o W Millenium ¿no?
Entonces cómo puedo hacer funcionan un instalador en compilado en VB6 en un SO W2K o W Millenium??..

Acepto todas las sugerencias que se os ocurran...
MUCHAS GRACIAS
#81
Hola..

Por defecto, cuando utilizamos un msgbox, éste aparece centrado en la pantalla.
El problema es que necesito el msgbox en la parte inferior derecha,

¿Alguien sabe cómo hacerlo?

PD. La idea es no utilizar formularios
#82
Esta es una pregunta que llevo mucho tiempo intentando resolver y sin éxito..
A ver si alguno sabe cómo centrar texto en un listbox..

Hasta ahora lo que he hecho es utilizar la letra Courier que es proporcional y así calculo el centro sabiendo los caracteres que caben en un listbox.
A ver si a alguien se le ocurre algo mejor..
Gracias
#83
INTRODUCCIÓN
[/size]

Como no lo he visto por ningún lado en el foro, voy a hacer un pequeño tute paso a paso de cómo dar la apariencia visual de Windows XP desde Visual Basic 6.

Lo primero y lógicamente hay que tener instalado Windows XP.

Imaginemos que ya tenemos nuestro Proyecto terminado y estamos a punto de compilar. Si ejecutamos el programa desde VB6 veremos cómo los botones, scrollbar, controles... tienen una apariencia muy clásica y muy distinta de la apariencia de Windows XP:


Para conseguir la apariencia de Windows XP tenemos que seguir estos pasos:

1- Lo primero que hay que hacer es añadir al proyecto la función InitCommonControls() del API de Windows.
Esta función carga previamente en memoria la librería de controles comunes de Windows, Microsoft Windows Common Controls (comctl32.dll).
Yo he probado sin utilizar esta función y el programa me ha funcionado bien, pero hay gente que le da error, así que me quito posibles problemas añadiéndola.
¿Cómo la declaramos?. Poniendo en declaraciones:

Private Declare Sub InitCommonControls Lib "comctl32" ()

2-Llamar a esta funcion en el inicio del programa desde el evento Initialize del Formulario o desde Sub Main. Si lo pones en el form_load tampoco funcionará. Yo lo hago así:

Private Sub Form_Initialize()
    InitCommonControls
End Sub



3- Ya podemos compilar nuestro proyecto y generar el ejecutable. Yo lo he llamado: Proyecto1.exe.

4- Ya sólo queda una cosa. Se trata de añadir a nuestra aplicación un recurso con nuestra apariencia XP. Voy a hacerlo muy sencillo y a utilizar un programa gratuito.

Si quieres saber algo más sobre recursos lee mi "tutorial para editar recursos" que es muy interesante:
http://foro.elhacker.net/index.php/topic,134513.0.html

Para hacer esto que he comentado voy a utilizar un programa que es gratuito:
XN Resource Editor. Lo podéis descargar de su página oficial:
http://www.wilsonc.demon.co.uk/d10resourceeditor.htm

Abrimos el XN Resource Editor vamos a File --> Open y seleccionamos nuestro Proyecto1.exe.
Ahora vamos a Resource --> Add resource (Añadir recurso) y seleccionamos
XP Theme Manifest:


Pulsamos OK y nos tiene que haber aparecido una carpeta con nuestro nuevo XP Theme Manifest:



Ya lo hemos hecho todo, ahora sólo tenemos que guardarlo con el nombre que queramos. Lo ejecutamos y...


Ahora ya tenemos el archivo manifest incorporado a nuestra aplicación.

En este punto puede resultar muy curioso y útil poder trabajar en VB6 en modo diseño con estilo XP.
Puedes hacer exactamente todo lo que acabo de explicar: abres el VB6.exe con el XN Resource Editor y sigues los pasos..
Pienso que es la forma más sencilla..
Basado todo en lo mismo, también se puede hacer de esta forma:

Hay que copiar este código XML siguiente en un bloc de notas:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1"
manifestVersion="1.0">
<assemblyIdentity
    name="Woozle.PEResourceExplorer.XPManifest"
    processorArchitecture="x86"
    version="1.0.0.0"
    type="win32"/>
<description>Windows Shell</description>
<dependency>
    <dependentAssembly>
        <assemblyIdentity
             type="win32"
             name="Microsoft.Windows.Common-Controls"
             version="6.0.0.0"
             processorArchitecture="x86"
             publicKeyToken="6595b64144ccf1df"
             language="*"
        />
    </dependentAssembly>
</dependency>
</assembly>


Y hay que guardarlo con el nombre de la aplicación a la que se va a poner estilo XP + ".manifest".
En este caso de VB6.exe será: VB6.exe.manifest

Solo queda poner este archivo en el mismo directorio que VB6.exe y arreglado..

CONCLUSIONES:
[/size]
La verdad es que es bastante curioso todo esto. Me resultó extraño que en VB posteriores tampoco estuviera el estilo XP, así que preguntando me dijeron que el VB 2005 tenía ya este estilo. Lo probé y es cierto.

Todo esto explicado es para VB6, pero y para VB.NET ¿¿cómo se hace??
Lo he visto muy bien explicado en esta página así que os doy el enlace. Vale tanto para VB.NET como C#:

http://www.elguille.info/NET/dotnet/temasXP.htm

Espero os resulte útil toda esta información..
Un saludo de karmany.

#84
INTRODUCCIÓN

Primeramente decir que este tutorial está encaminado principalmente a saber modificar los recursos  del programa que queremos analizar. Sin embargo, a veces modificar un recurso requiere tener conocimientos de ingeniería inversa... pero no siempre...

Hace ya bastante tiempo, en el foro de Uptodown que ya ni existe, hice un sencillo tutorial del manejo de un programa para editar recursos: Resource Hacker 3.4.0.79.
Nada más publicar aquel tutorial, recibí muchos mensajes de gente que me pedía ayuda para modificar los recursos de algunos programas, cosa que a veces era muy complicada y muchas veces imposible (desde un editor de recursos, sin usar debugger y dada mi poca experiencia de entonces).
Ese tutorial lo modifiqué con el tiempo guardándolo en mi ordenador, agregando información también de otros programas y de la experiencia que iba adquiriendo, y hoy después de todo este tiempo, y después de que varias personas hace poco me hayan pedido que les envíe el tutorial vuelvo a reeditarlo para colgarlo aquí.

Todos estos programas son muy parecidos en su manejo, así que con este tutorial lo que pretendo es:

1) Saber qué son los recursos de un programa.
2) Por qué es interesante poder modificarlos.
3) Explicaré con bastante detalle el manejo de un programa y posteriormente explicaré algunas características muy interesantes, de otros dos programas que también utilizo mucho.
4) Cuando un editor de recursos no puede modificar un recurso, ¿qué puedo hacer?


Para que no se pierda ninguna descarga con los hosting gratuitos y temporales, os pongo este enlace a mi Web de un archivo zip bien ordenado con todas las descargas de este tutorial:
Enlace


En los ejemplos 1 y 2, he usado un antiguo packer denominado Embryo Patcher. Dicho software es actualmente considerado por los antivirus como malware, aunque de forma errónea (falsos positivos). Pero como son necesarios para seguir el tutorial y como alguno me lo ha solicitado, os dejo un enlace con un archivo rar cifrado en descarga:
Descarga ejemplo 1 y 2
Contraseña del archivo rar: elhacker.net

karmany
#85
Mi primera intención era crear un sencillo crackme y ponerlo en desafíos para encontrar una contraseña..pero en vez de hacer las 10 líneas de código que pretendía me he extendido un poco más haciendo para mi gusto un programa bastante interesante.

No es difícil pero tampoco lo he puesto nada fácil. No lo he protegido ni nada, se puede abrir perfectamente con el Olly..

La interfaz del programa es ésta:



Se introduce una contraseña y se pulsa en aceptar. Si la contraseña es incorrecta se podrá leer No correcto. Si la contraseña es correcta se leerá Correcto.

Como sé que va a ser muy pero que muy difícil encontrar la contraseña, daré de vez en cuando alguna pista..Y si veo que nadie la encuentra, con el tiempo escribiré la contraseña..

El programa se puede descargar de aquí:
Crackme 3.0 por karmany

07/07/2006 -> Inicio del post
07/07/2006 -> El programa está en VB, y tiene un módulo.
16/07/2006 -> A esta versión 3.0 le he añadido algo más de código, transformándola en 3.1. Esta versión 3.1 está en el concurso 95 de la web de Ricardo. La versión 3.0 sigue siendo la de elhacker.
#86
Ya sé que el enunciado parece un poco extraño.

Creo que fue sobre el año 1992/93, que salió un Visual Basic para crear aplicaciones en MS-DOS.
Es el Visual Basic 1.0 para Dos. Hay dos versiones: la Standard que es la que yo tengo y la professional.
Es fácil de descargar en internet y es curioso porque creas tus propios formularios que después ejecutas desde Dos. Lo único que hay que hacer es cargar al inicio los drivers del mouse y el programa funciona perfecto..

Mi problema:
Estoy intentando declarar una variable que sea global para todo el proyecto. Pero en VB 1.0 me es imposible hacerlo.
Con el VB 6 es muy sencillo: creando un módulo y declarándola como pública; public.
En VB 1.0 he intentado de todo: crear un módulo, pero nada..
La variable es sencilla es esta:
Public unidad as string
En la ayuda las palabras que se pueden utilizar son:
DIM, SHARED, COMMON, $FORM, LOCAL

Alguien tiene alguna información de esto??? se lo agradecería eternamente ;)
#87
Hola.
Sabéis alguno, qué tengo que hacer a mi programa para poder acceder a una partición oculta...??

Por ej. tengo dos particiones en un disco duro, una oculta y otra con WXP. Quiero hacer un programa en VB para entrar en esa partición oculta y poder modificar los archivos. Un programa ejemplo de lo que intento hacer es el programa Partition Explorer:
http://spanish.partitionsmanager.com/glossary/explorer.htm

He probado utilizar el commond dialog para abrir un archivo, pero no accede a una partición oculta. Hay alguna configuración para esto...
Gracias..
#88
Diseño Gráfico / Una firma
29 Abril 2006, 21:16 PM
Hola a todos..
Yo soy muy pésimo dibujando, así que pediría a alguien, si me puede hacer una firma para utilizar en este foro.
Solamente me gustaría algo abstracto, lo que se os ocurra...

Muchas gracias..
#89
Hola a todos..
Generé y empaqueté mi programa hecho en VB6 en mi ordenador (Windows XP SP2) y me ha surgido un problema curioso:

1) He intentado ejecutar el programa de instalación de mi programa en windows 98 y me dice: no puede continuar con la instalación porque hay que actualizar su sistema de archivos de sistema. Acepto, se reinicia el ordenador pero los archivos no se actualizan y vuelvo a estar como al principio sin poder instalar el programa.. ¿Cómo puedo instalarlo en windows 98?

2) Después de probar con varios sistemas operativos descubrí que sí podía instalar mi programa, pero sólamente en windows 2000 con SP4 y en windows XP con SP2, es decir, con los Service Pack. Mi pregunta es: ¿Tiene todo esto que ver con que hice el programa y generé el .exe en mi ordenador que tiene Windows xp con SP2?

Entonces, si hubiese hecho el programa por ej. en Windows 98, ¿no tendría ningún problema, y me funcionaría en cualquier sistema operativo?

Muchas gracias por vuestra ayuda..
#90
Ingeniería Inversa / CrackMe 2.0 por Karmany
26 Marzo 2006, 20:06 PM
No tengo intención de hacer ningún CrackMe más...
Siempre he tenido en la cabeza, que si un programador no quiere dejar que le crackeen el programa, tiene que poner obstáculos.. y la verdad, la mayor parte de los programas de hoy día, el programador no pierde nada de tiempo en proteger su propio software.. Por esto yo creo que tiene que haber razones terceras..por ej. si es fácil crackear un programa la gente lo utilizará...al revés no..no lo sé.

Mi intención con todo esto y espero que me salga bien, es demostrar que por ej. un programa en VB (lenguaje que todo el mundo critica, pero que casi todo el mundo utiliza), depende de las protecciones que le quiera dar el programador..
Este ej. que pongo ahora, es un pequeño laberinto dentro de un castillo..no he querido hacer el laberinto muy profundo, pero es un laberinto engorroso...el problema de este CrackMe no es no saber crackearlo, sino que he dejado muchas puertas abiertas en los pasillos y hay que cerrarlas todas.. y eso es muchísimo trabajo... os dejo este 2º CrackMe y no es como el anterior de adivinar sólo la contraseña, este es para crackearlo o adivinar la contraseña..

Yo creo que es difícil y no me voy a poner con el Olly por la complicación. Dejo que lo intentéis.. A ver si alguien me sorprende...

Descarga:
http://rapidshare.de/files/16498008/CrackMe_2.0.exe.html

Crackeado por:
                      -OberonCracker
                      -x4uth