Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - karmany

#1101
Ejemplo 06

Sobre Visual Basic 6 (I)

Muchísima gente sigue utilizando todavía el querido (queridísimo) Visual Basic 6. Por este motivo existen en la actualidad cientos de programas compilados en este lenguaje.

¿Quién no ha tenido alguna vez la curiosidad de abrir un programa compilado en Visual Basic (VB) con un editor de recursos?¿Qué observaremos?.
-Pues normalmente sólo veremos dos carpetas: Icon Group y Version.

¿Por qué?
-Pues porque como comenté al principio de todo, los editores de recursos analizan la sección de recursos (.rsrc) pero en los programas compilados con VB6, los recursos NO se encuentran en esa sección.

Un programa compilado con VB6 normalmente tiene 3 secciones:
-text (aquí el Entry Point)
-data
-rsrc (y es la que los editores de recursos leen)

Entonces, ¿dónde se guardan los recursos?
-Se guardan en la sección .text.

Buscar determinados recursos a mano por la sección .text, es una locura así que voy a utilizar un programa muy bueno que nos va a indicar dónde está cada cosa:
VB Decompiler Lite

Lo primero es configurarlo, así que en el menú Tools-Options en los apartados Form y Disasembler señalamos todas las tildes.

Ahora ya podemos abrir cualquier programa compilado en Visual Basic. Yo voy a abrir uno de ejemplo que acabo de hacer. Es éste:


Imagen33

Como se observa el botón no está centrado.
Veo en VB Decompiler lo siguiente:

Begin VB.CommandButton Command1 'Offset: 00001230
   Caption = "Caption"
   Left = 480
   Top = 240
   Width = 1335
   Height = 495
   TabIndex = 0
 End


Me está diciendo que:
-Se trata de un botón: CommandButton
-Su "caption": Caption
-Su posición en el formulario: Left y Top
-Sus dimensiones: Width y Height
-El índice del Tab: TabIndex = 0
-Y lo más importante de todo: Que se encuentra en el offset 00001230. (¡Qué buena información!. Esta información nos va a ayudar en nuestro cometido y pocos programas la dan).

Lo que voy a hacer es modificar por ejemplo:
-La posición del botón para centrarlo.(Solamente horizontal)
-Y voy a modificar también el texto mostrado ("Caption") por "Aceptar". En este último caso no tendré problemas ya que los dos textos constan de 7 bytes.

Voy a abrir el ejecutable en VB con cualquier editor hexadecimal. A la izquierda los editor hexadecimales nos indican el offset así que nos dirigimos a 00001230 y tendremos que ver lo siguiente:

1230   0000 0001 0800 436F 6D6D 616E 6431 0004   ......Command1..
1240   0107 0043 6170 7469 6F6E 0004 E001 F000   ...Caption..à....
1250   3705 EF01 1100 00FF 0204 0000 5000 0000   7.......ÿ....P.....


Lo primero que voy a hacer es cambiar lo más fácil en este caso :el texto. Así que modificamos "Caption" y escribimos encima "Aceptar".
Ahora voy a mover el botón a la derecha para centrarlo. Sé por el VB Decompiler que el Left = 480. Utilizo la calculadora de Windows y convierto 480 decimal en hexadecimal: 480d == 01E0h.
Como sé que los datos se guardan al revés, sé que tengo que buscar por E001, así que en el código que he puesto arriba lo localizo rápidamente en la segunda linea (los dos penúltimos bytes).

Ahora hago unos cálculos matemáticos sencillos para centrar el botón:
Ancho formulario = 4185; 4185/2 = 2093
Ancho botón = 1335; 1335/2 = 668
Posición resultante para centrar: 2093 - 668 = 1425

1425 decimal = 0591 hex por lo tanto tengo que modificar los bytes E001 por 9105.
El final del código es el siguiente:
1240   0107 0041 6365 7074 6172 0004 9105 F000 ...Aceptar..`...

Lo guardo como ejemplo.exe, lo ejecuto y...

Imagen34

Esto es similar en todos los controles...

Ahora para finalizar viene de nuevo mi pasión por las imágenes, es un poco diferente.

Cómo modificar una imagen:

Voy a ir directamente al ejemplo. He creado una aplicación que sólo consta de una imagen. El acerca de, puede ser el siguiente:


Imagen35

Consta de una imagen. Vamos a ver cómo la podemos modificar.
Para extraer las imágenes voy a utilizar otro programa excelente, se trata de VBreformer su página web es la siguiente:
http://www.decompiler-vb.net/

Voy a abrir el programa en VB con este VB reformer. En mi caso, yo he utilizado el programa Trial Edition v.4.2. Y tras analizar la aplicación aparecen a la izquierda las siguientes carpetas:

*Informations-headers (para este tutorial nos olvidamos de ella)
*Forms-objetcs:
        -Form1 - VB.form:
                   -Mi_imagen - VB.Image
*Visual Basic resources:
        -Form1.frx:
                   -Form1.frx: 00000000

Ahora miro a la derecha y veo el siguiente código:

'address 00001178
Begin VB.Form   Form1
...
...
   Begin VB.Image   Mi_imagen
           'Object ID: 0x0001
           Picture="Form1.frx":00000000
           Left..
           Top..
           ....
   End
End


Yo me fijo en estos detalles:
1º El nombre de la imagen: Mi_imagen
2º El offset que me indica el formulario. Ya que la imagen estará  más abajo de ahí: 'address 00001178
3º La imagen en cuestion. A la derecha me indica que la imagen es esta: Picture="Form1.frx":00000000. Así que voy a la izquierda (donde las carpetas) y selecciono la imagen correspondiente: -Form1.frx: 00000000

Ya tengo la imagen que quiero modificar. VBreformer tiene una opción valiosísima que nos permite extraer la imagen tal cual aparece en el código, así que lo voy a hacer: "File --> enregistrer l'image sous"


Yo la he llamado: imagen.bmp.
Ahora voy a buscar un dato importantísimo:
-El tamaño: 102734 bytes

Con toda esta información ya puedo modificar la imagen o crear otra a mi gusto. La única condición es que la imagen nueva NO DEBE sobrepasar de 102734 bytes. No he probado a modificar el formato pero supongo que dará error así que lo dejo igual: .bmp. La imagen que he creado la he llamado imagen_modificada.bmp

Yo he hecho esta imagen de igualmente 102734 bytes:


Imagen36

Ahora viene la parte más difícil de todo. Insertar esa imagen.

Voy a abrir el programa con un editor hexadecimal cualquiera y me voy a ir al offset antes marcado: 00001178.
Ahora bien, yo sé que una imagen en formato mapa de bits comienza por BM, así que un poco más abajo de ese offset voy a buscar esto comentado:


Offset           ASCII
1220        ..........Mi_ima
1230        gen.............
1240        ..BMN..........


Ahí está el nombre de mi imagen, y después aparece lo comentado:BM. Ya tengo el inicio.

Ahora abro en otra pestaña del editor hexadecimal la imagen_modificada.bmp y copio todos sus bytes.

Ahora tengo que pegarlo pero sin que se agrege ningún byte de más, así que hay que hacer cálculos matemáticos:

Offset de inicio: 00001242 hex
Tamaño de la imagen: 102734 dec = 1914E hex
Offset final imagen: 00001242 + 0001914E = 0001A390 hex
Pero como el offset 00001242 ya contiene un byte pues hay que restarle 1. ¡IMPORTANTE!

Por lo tanto:
offset inicial: 00001242
offset final:   0001A38F

Ahora solamente y con mucho cuidado hay que seleccionar los bytes que hay entre esos offsets y pegar los que habíamos copiado. Sé por experiencia que seleccionarlos para un bitmap puede ser complicado, así que algunos editores hexadecimales permiten seleccionar pulsando la tecla Shift o simplemente lo que hago yo: visualizo 128 bytes por columna y en un momento lo selecciono todo.

Bueno, tras pegar lo que acabo de comentar ya tiene que aparecer lo siguiente:


Imagen37

Ciertamente si no se tiene experiencia, puede ser complicado realizar este último ejemplo que acabo de hacer.

#1102
Cita de: argvc en 20 Junio 2007, 19:46 PM
me los puedes pasar por favor.

Si me haces esa pregunta pienso que es porque no has buscado mucho, ¿verdad?

Mira solamente poniendo en Google: "Introducción al OllyDBG" sale en la segunda página de la búsqueda este fantastico enlace que además de tener los tutes de Ricardo tienen más información... (Antes de pedir este tipo de ayuda... buscar un poco.. jolín) que no cuesta nada buscar el Google...
http://www.lamejorinfo.com/inicio/modules.php?name=Content&pa=showpage&pid=19&page=1

PD. Ya le he comentado a Ricardo el problema. He probado con otro descompresor gratuito y lanza el mismo error, en cuanto sepa algo lo comento.
#1103
Sí efectivamente hay algunos archivos que parecen dañados, pero permite descargar el archivo doc en la mayoría de los casos. Lo preguntaré a ver si hay que hacer algo especial..

De todos modos si buscáis un poco por la red, se pueden encontrar...

Por ej. los tutes del 1 al 10 se pueden descargar de aquí en formato pdf.:


http://file024.mylivepage.com/chunk24/753969/512/INTRODUCCION%20AL%20CRACKING%20CON%20OLLYDBG%20PARTES%201%20a%2010%20en%20PDF.ra
r

Si alguno no lo encontráis pedírmelo.
#1104
Todos los archivos están aquí:
http://ricardonarvaja.googlepages.com/
(de introducción al Olly).

#1105
Ingeniería Inversa / Re: Duda Sobre SICE
18 Junio 2007, 12:57 PM
Hola Real_Nova...
Mira el Softice ya casi nadie lo utiliza, (yo la última vez que lo utilizé y sin éxito fue en una unidad virtual donde instalé en W98 para analizar un crackme en DOS).
El relevo se lo dió el OllyDBG.
Para poder manejarte con el OllyDBG desde cero tienes esta página:
enlace

Existen todavía actualmente muchos programas que no requieren la utilización de un debugger, como dices para crackearlo, utilizando para ello otras herramientas específicas.
Pero si no quieres utilizar un debugger o un desensamblador, ¿cómo quieres analizar el programa? Hay programas para desensamblar muy buenos como el IDAPro.

Hay programas muy sencillos que incluso abriéndolos con un editor hexadecimal te diriges al final del archivo (buscando la sección de recursos normalmente al final) y ahí puedes tener información muy valiosa.

Un debugger o desensamblador son muy necesarios.
#1106
Hay muchos códigos en internet para pasar decimal a binario.
El siguiente código que te pongo no es mío pero lo probé y funciona perfectamente. Convierte un dato tipo long en una cadena que será el binario final.
Es una función muy sencilla:

Function Binario(ByVal valor As Long) As String
Dim mayor As Integer
Dim retorno As String
Dim a As Integer

'Busca el mayor exponente
mayor = 0
Do While True
    If 2 ^ mayor > valor Then
        If mayor > 0 Then
            mayor = mayor - 1
            End If
        Exit Do
        End If
    mayor = mayor + 1
    Loop

'Calculo del valor binario
retorno = ""
For a = mayor To 0 Step -1
    If valor < (2 ^ a) Then
        retorno = retorno & "0"
    Else
        retorno = retorno & "1"
        valor = valor - (2 ^ a)
    End If
    Next a

'Pasa el valor como resultado de la función
Binario = retorno
End Function


Si quieres probarla, pon 2 textbox: text1 y text2 y un botón.
En text1 pones el decimal que quieras pulsas el botón y con este código ya verás el valor binario:

Private Sub Command1_Click()
   Text2.Text = Binario(Text1.Text)
End Sub


Un saludo

#1107
Hola Hendrix, la verdad que el Armadillo y más con CopymemII pues no es fácil. Yo he desempacado varios sin Copymem pero sólo uno con Copymem y con ayuda de varias herramientas.

Actualmente la página de Ricardo donde hay buenos tutes sobre esto está caída, así que voy a buscar un tute que tengo de un amigo y buen cracker(Solid) en el que explica de forma muy clara cómo desempacar Armadillo utilizando Tools únicamente. Lo busco y te pongo un enlace.

Tema del tute: Armadillo 4.62 + Debug Blocker + CopyMem II + Import Table Elimination + Code Splicing + Nanomites – PARA PRINCIPIANTES – USANDO TOOLS

descarga
#1108
¡Joer! tienes razón tena...
¿Por qué responde la gente a temas de 2 años?

Gracias tena, un saludo.

PD. Real_Nova ¡¡NO respondas a hilos de hace 2 años!!
#1109
Ya lo he pasado a VB6. Es necesario conocer el valor de text2, ya que influye en el resultado.
Si lo compilas mejor que mejor.
#1110
Hombre si tienes el programa compilado igual podemos echarle un vistazo mejor..

Lo primero de todo ¿has probado? 2547896245

EL código no tiene pinta de ser muy difícil:
n = thisform.text2.value ;n es el valor de un textbox llamado text2
r = r + ALLTRIM (STR(INT(n/(10^j)))) ;ALLTRIM se utiliza para quitar espacios. STR te convierte un número en cadena (pero te suele dejar creo un espacio delante), lo demás es sencillo
IF ALLTRIM(paux) = ALLTRIM(p) ; Creo que esta es la comparación para el número de permiso correcto. Si consigues compilar el programa lo debuggeamos y ponemos un BP aquí, a ver qué resultados nos arroja.

Mira voy a intentar una cosa: Voy a intentar escribirlo en VB6 y ver qué hace la comparación.

PD. Veo que hay dos textbox, me tienes que indicar qué hay que poner en cada uno. En text4 ya veo que hay que poner el serial y en text2?