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 - Slasher-K

#21
Cree una clase para editar archivos ejecutables portables. Les dejo todo el proyecto, el que no entienda y le interese me dice en este mismo post y explico función por función, pero primero quiero saber si a alguien le interesa así no escribo al pedo xD.

También cree una GUI para demostrar el funcionamiento de la clase, dejo unos screenshots. El proyecto de la GUI lo ya casi lo termino y lo posteo, me falta la parte de edición pero la clase está terminada.

A la clase me falta agregarle cosas, pero lo voy a hacer en la semana. Por ejemplo extraer y editar recursos, administrar símbolos y varias cosas más. Los archivos ejecutables tienen muchas cosas que analizar.

Postee esto acá porque había amigos que no podían verlo en el laboratorio.

Saludos.

EDITADO:
Posteo el proyecto actualizado, y con la GUI casi terminada. No la voy a terminar porque me aburrí xD, pero voy a actualizar la clase para ver recursos & stuff.
#22
Declaraciones de la API de WinInet
http://foro.elhacker.net/index.php/topic,85007.0.html

Está en la recopilación de post interesantes...

Saludos.
#23
Programación Visual Basic / Re: codigo IP en VB
20 Diciembre 2005, 18:02 PM
Conocer la IP real desde Visual Basic
http://foro.elhacker.net/index.php/topic,91663.msg437040.html#msg437040

Lean la recopilación de post interesantes... ahí hay casi todo lo que necesitan y por algo es un tema pegado -_-´

Saludos.
#24
Por empezar, el tamaño de un ejecutable no puede ser de 100KB porque tiene que ser múltiplo de 8.

Las secciones están alineadas en memoria en un offset que también es múltiplo de 8, y eso es por una cuestión de la arquitectura del microprocesador.

Cuando el loader del sistema operativo carga el ejecutable en memoria crea el thread principal y comienza a ejecutar el código del punto de entrada. El punto de entrada está especificado en el registro AddressOfEntryPoint de la cabecera opcional PE. Ese offset es relativo al inicio del archivo y está dentro de la sección de código (Sección .text)

Todas las secciones están descriptas en las cabeceras de sección, que están justo después de la cabecera opcional PE. Cada cabecera de sección ocupa 42 bytes de datos (no estoy seguro porque no tengo la documentación a mano, pero creo que era eso). Los primeros 8 bytes son el nombre de la sección, que es una cadena terminada en nulo por lo que puede tener un nombre de 7 bytes como máximo, incluyendo el "." (.text, .data)

En las cabeceras de sección están los datos de dicha sección, como el offset relativo al inicio del archivo (RVA o Relative Virtual Address), tamaño, tamaño de los datos crudos, etc. Los datos crudos (raw data) son los datos de la sección en cuestión, excluyendo las tablas que se encuentran en el inicio de la sección.

Si le agrego datos a un archivo queda "inutilizable" porque se desplazan los datos más bytes hacia adelante, por consiguiente cuando el programa busque determinados datos en una posición no los encontrará. En el caso que sea código el programa va a ejecutar instrucciones no válidas y se cerrará.

El código del programa está en la sección .text, que generalmente es la primera y está en el offset 4096 decimal, pero eso depende del linker. Dentro de la sección de código está el punto de entrada, como lo dije anteriormente.

Las variables y datos no inicializados están en la seccíón .data. Para modificar el "Hola mundo" hay que buscar la tabla de cadenas, porque si por ejemplo yo escribo el siguiente código:


Sub Main()
Call MsgBox("Hola mundo")
End Sub


Cuando se compila pone "Hola mundo" en una parte del archivo y en la llamada a MsgBox reemplaza la cadena por la dirección de "Hola mundo".

Ahora tengo poco tiempo y ando sin inet, cuando puedo extiendo un poco más este tema que es muy interesante, pero lo mejor es investigar con un editor hexadecimal (recomiendo mucho el WinHex) y un debugger (OllyDbg).

Leete los siguientes documentos que postee hace un tiempo en el foro de Programación general, pueden ayudarte mucho  a entender cómo trata Windows a los procesos y la memoria.

Administrador de memoria de Win32
Procesos y Subprocesos en Windows

Saludos.
#25
Mientras no hagan nada dañino o destructivo no veo que sea molesto, vamos que la programación es para jugar también  ;D. Se pueden hacer muchas cosas divertidas.

Dejemos algo en claro:

1. NADA DE LAMERADAS
2. NADA DE TROYANOS/VIRUS Y DERIVADOS.
3. ESTO NO ES UN CHAT, POSTEAN CODES, EL QUE NO ENTIENDA SE COMUNICA POR IM CON EL CREADOR, O ARREGLAN PARA HABLAR POR IRC O MSN, DA IGUAL.
4. NO VOY A PERMITIR DISCUSIONES DE CHICOS DE 9 AÑOS DICIENDO: "EL MÍO ESTÁ MEJOR", "ESO NO SIRVE" Y COSAS SIMILARES.

Por lo demás me parece buena idea :P, no le veo nada de malo a jugar con la programación, que de hecho yo lo suelo hacer cuando estoy aburrido y tengo tiempo xDDD.

En cuanto rompan las reglas de arriba cierro el tema, no voy a andar borrando 20 post por día en el que discuten un code, porque la idea original es otra.

Saludos.
#26
También puede usarse GetObject, para crear un objeto desde un archivo.

Saludos.
#27
Programación Visual Basic / Re: Usar Driver
16 Diciembre 2005, 19:45 PM
Hay una función, DeviceIoControl, te permite comunicarte con los drivers. Primero abres el dispositivo con CreateFile y luego le envías los mensajes mediante la estructura que corresponda al driver en cuestión.

Saludos.
#28
Programación Visual Basic / Re: Cambiar Icono
16 Diciembre 2005, 19:37 PM
BeginUpdateResource y UpdateResource, funciones de la API, investiga sobre ellas que no es tan dificil su implementación.

Saludos.
#29
La clase de los cuadros de texto de Windows se llama "EDIT". Usa la función EnumChildWindows para enumerar las ventanas hijas de una aplicación, como puede ser el bloc de notas por ejemplo.

Luego si el nombre de la clase de algunas de las ventanas hijas es EDIT, usas GetWindowText para obtener el texto que contienen. Para saber el nombre de la clase de ventana usa la función GetClassName.

Las clases predeterminadas del sistema son las siguientes:


ClaseDescripción
ButtonBotones de comando
ComboBoxListas desplegables
EditCuadros de texto
ListBoxCuadros de lista
MDIClientVentanas MDI hijas
ScrollBarBarras de desplazamiento
StaticEtiquetas (Label)

Saludos.
#30
Vas a tener que guardar en variables (o crear objetos) las coordenadas de cada elemento que crees, para luego recuperar esas coordenadas y ajustarlas como sea necesario (mover el objeto).

Saludos.