gracias por compartir tu experiencia
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.
Páginas1
#2
Off Topic / Re:Crisis existencial. Lo que tanto amaba ahora lo odio
Abril 15, 2022, 09:48:43 AMCitareres un crack felicidades y mis respetos
Me cito a mi yo del pasado (perdon por el reflote)
Increible como cambian las cosas con el tiempo. Casi cinco años y me han pasado muchas cosas desde que escribí esto. Recuerdo el día, dónde estaba y las sensaciones que tenía. Se podría decir que en ese momento estaba tocando fondo y no lo sabia, pensaba que quedaba mas caída pero ahora repaso todo lo acontecido desde entonces y veo que he ido cumpliendo sueño tras sueño. Objetivo tras objetivo y todo fue paso a paso, de forma sutil, sin darme cuenta de que llegaba a las metas.
"Si tienes un ojo puesto en la meta solo te quedará uno para el camino".
En resumen,
Al tiempo de escribir eso deje ese trabajo y encontre otro que me motivaba mas pero los jefes eran unos incompetentes. En 2019 me fui de mochilero por el mundo durante 13 meses y regrese por la pandemia. Encontre un trabajo de SysAdmin y hago teletrabajo. En breves seré Tecnico de Ciberseguridad en esa misma empresa. Todavía no me lo creo. LO CONSEGUÍ. Lo hice joder !!! jajajaja. Increible.
Es por esto que reaparezco por aqui y he visto los ultimos hilos que escribí.
Estaré ratoneando por la zona de reversing y analisis de malware. Toca desenpolvar los miticos manuales de ANTRAX.
Sin comunidades como esta no hubiese sido posible. Un saludo Underc0ders.
#3
Dudas y pedidos generales / Busco el titulo de un libro de hacking
Abril 15, 2022, 09:47:15 AM
Buenas underc0ders, les queria pedir una ayuda hace tiempo lei un libro de hacking del tipo "aprende desde cero" en la primera parte creo que tenia el famoso manifiesto, en los capitulos se podia aprender sobre fundamentos de informatica tipo redes (paquetes, tcp ip, etc) como funcionan las webs(algo de html), los sistemas operativos, despues hablaba de los tipos de malware y como funcionaban, acudi a ustedes porque quizas alguien lo haya leido, era comun en los "packs de libros de hacking" agradeceria su ayuda
#4
ASM / Instrucciones basicas en ensamblador [facil]
Diciembre 17, 2020, 07:32:15 PM
Al instalar emu8086 tenemos una guia a la que podemos acceder que nos brinda toda la informacion necesaria para empezar a programar en ensamblador, la guia esta en ingles y explica bien de forma resumida para que sirven las instrucciones
Esta corta guia es mi manera de haber entendido esas instrucciones con ejemplos faciles, espero les sirva
esta vez veremos algunas de las instrucciones basicas de ensamblador para el procesador 8086
Instruccion MOV: copia el operando 2 al operando 1
Ejemplo:

podemos usar esta instruccion con [registro,memoria],[memoria,registro],[registro,registro],[memoria,valor_inmediato],[registro,valor_inmediato] como operando1 y operando2
Instruccion ADD permite añadir el valor de OPERANDO2 a OPERANDO1 como una suma
Ejemplo:

Instruccion SUB esta instruccion permite restar, es similar a ADD
Ejemplo
Se puede utilizar con [registro, memoria], [memoria,registro], [registro,registro], [memoria,valor_inmediato], [registro,valor_inmediato] como operando1 y operando2

Instruccion MUL y DIV: Esta instruccion nos permite multiplicar o dividir un registro, pero solo contamos con un OPERANDO, debemos almacenar en AL el valor a multiplicar (En caso de que querramos multiplicar un BYTE) o en AX( En caso de que querramos multiplicar un WORD)
primero almacenaremos el valor que queremos multiplicar en AL
del mismo modo si trabajamos con div
movemos a AL[byte] o AX [word] el valor que deseamos dividir
Ejemplo:
Es como si hicieramos
Instruccion JMP esta instruccion realiza un salto no condicional, es decir ocurre si o si
Código: php
aqui un ejemplo:

Instruccion CMP: realiza una comparacion entre OPERANDO1 y OPERANDO2 si ambos operandos son iguales entonces se enciende un FLAG ZF=1 si no son iguales ZF=0 tambien se encienden otros flags dependiendo del caso
EJEMPLO:
Instruccion JE JG JL Estas instrucciones aprovechan la instruccion CMP, despues de la comparacion utilizamos
JE Si ambos son iguales OPERANDO1-OPERANDO2==0
JG Si Operando1 es mayor a Operando2 OPERANDO1-OPERANDO2>0
JL Si Operando1 es menor que Operando2 OPERANDO1-OPERANDO2<0
los utilizamos cuando queremos realizar comparaciones En el ejemplo compararemos la nota de fulanito con la nota necesaria de aprobacion e imprimiremos un mensaje de aprobacion o reprobacion

Instruccion LOOP: este es un ciclo repetitivo que ya explique en listas, pero la volveremos a ver, para indicar que numero de veces queremos que se repita una accion almacenamos un valor en CX, todo lo que este dentro de la etiqueta loop se repetira
por ejemplo si hacemos un MOV cx,5 las acciones se repetiran con cx=5, CX=4, CX=3, CX=2, CX=1
Ejemplo: imprimir 5 veces "debo hacer la tarea"
Código: php

y bien estas son las instrucciones basicas que se encontraran en todo el codigo assembler que vean
empece a estudiar assembler con el objetivo de introducirme al cracking y tambien para modear malware pero no tengo la idea si lo que he posteado hasta ahora es suficiente o se necesita mas conocimiento en assembler, en fin espero que aprovechen el contenido trate de hacerlo muy facil de entender
Esta corta guia es mi manera de haber entendido esas instrucciones con ejemplos faciles, espero les sirva
esta vez veremos algunas de las instrucciones basicas de ensamblador para el procesador 8086
Instruccion MOV: copia el operando 2 al operando 1
Ejemplo:
MOV OPERANDO1, OPERANDO2
Es como si hicieramos OPERANDO1=OPERANDO2

podemos usar esta instruccion con [registro,memoria],[memoria,registro],[registro,registro],[memoria,valor_inmediato],[registro,valor_inmediato] como operando1 y operando2
Instruccion ADD permite añadir el valor de OPERANDO2 a OPERANDO1 como una suma
Ejemplo:
ADD OPERANDO1,OPERANDO2
es como si hicieramos un OPERANDO1=OPERANDO1+OPERANDO2

Instruccion SUB esta instruccion permite restar, es similar a ADD
Ejemplo
SUB OPERANDO1, OPERANDO2
Es como si hicieramos OPERANDO1=OPERANDO1-OPERANDO2
Se puede utilizar con [registro, memoria], [memoria,registro], [registro,registro], [memoria,valor_inmediato], [registro,valor_inmediato] como operando1 y operando2

Instruccion MUL y DIV: Esta instruccion nos permite multiplicar o dividir un registro, pero solo contamos con un OPERANDO, debemos almacenar en AL el valor a multiplicar (En caso de que querramos multiplicar un BYTE) o en AX( En caso de que querramos multiplicar un WORD)
primero almacenaremos el valor que queremos multiplicar en AL
MOV AL,3 o AX MOV AX,20
MOV BL,10 o MOV BX,1225
Ejemplo: MUL BL o MUL BX
Es como si estuvieramos haciendo esta operacion AX=AL*OPERANDO o DX AX=AX*OPERANDO
del mismo modo si trabajamos con div
movemos a AL[byte] o AX [word] el valor que deseamos dividir
Ejemplo:
MOV AL,30 o MOV AX,5010
MOV BL,5 O MOV BX,5
DIV BL o DIV BX
MOV BL,5 O MOV BX,5
DIV BL o DIV BX
Es como si hicieramos
AL=BL/OPERANDO o AX= BX/OPERANDO
el modulo se guarda en AH o en DX
DIV y MUL funcionan unicamente con [registros] o [memoria]el modulo se guarda en AH o en DX
Instruccion JMP esta instruccion realiza un salto no condicional, es decir ocurre si o si
include 'emu8086.inc'
org 100h
mov AX,5
jmp etiqueta1
printn 'nada de esto se va a imprimir'
printn 'porque el jmp hace que el programa salta'
printn 'a lo que esta despues te etiqueta1'
mov ax,10
etiqueta1:
printn 'AX sigue valiendo 5 porque nunca se cumplio el segundo mov'
ret
aqui un ejemplo:

Instruccion CMP: realiza una comparacion entre OPERANDO1 y OPERANDO2 si ambos operandos son iguales entonces se enciende un FLAG ZF=1 si no son iguales ZF=0 tambien se encienden otros flags dependiendo del caso
EJEMPLO:
CMP OPERANDO1,OPERANDO2
es como si hicieramos OPERANDO1-OPERANDO2Instruccion JE JG JL Estas instrucciones aprovechan la instruccion CMP, despues de la comparacion utilizamos
JE Si ambos son iguales OPERANDO1-OPERANDO2==0
JG Si Operando1 es mayor a Operando2 OPERANDO1-OPERANDO2>0
JL Si Operando1 es menor que Operando2 OPERANDO1-OPERANDO2<0
los utilizamos cuando queremos realizar comparaciones En el ejemplo compararemos la nota de fulanito con la nota necesaria de aprobacion e imprimiremos un mensaje de aprobacion o reprobacion

Instruccion LOOP: este es un ciclo repetitivo que ya explique en listas, pero la volveremos a ver, para indicar que numero de veces queremos que se repita una accion almacenamos un valor en CX, todo lo que este dentro de la etiqueta loop se repetira
por ejemplo si hacemos un MOV cx,5 las acciones se repetiran con cx=5, CX=4, CX=3, CX=2, CX=1
Ejemplo: imprimir 5 veces "debo hacer la tarea"
include 'emu8086.inc'
org 100h
mov cx,5
repetir:
printn 'debo hacer la tarea'
loop repetir
ret

y bien estas son las instrucciones basicas que se encontraran en todo el codigo assembler que vean
empece a estudiar assembler con el objetivo de introducirme al cracking y tambien para modear malware pero no tengo la idea si lo que he posteado hasta ahora es suficiente o se necesita mas conocimiento en assembler, en fin espero que aprovechen el contenido trate de hacerlo muy facil de entender
#5
ASM / Introduccion a Ensamblador - Modos de Direccionamiento
Diciembre 17, 2020, 02:32:40 AM
En este tema veremos algunos modos de direccionamiento en la memoria, cuando hablamos de esto nos referimos a como podemos identificar una localizacion de memoria, en la memoria de la computadora tenemos mucha informacion almacenada, cuando un programa Software necesita recuperar esta informacion necesita localizar su ubicacion tambien cuando necesita almacenar informacion debe almacenarla en una direccion de memoria, asi mismo, cuando un dispositivo fisico Hardware necesita utilizar informacion o almacenarla necesita recuperar la direccion de memoria.
Cada celda de memoria esta identificada por un numero o direccion de memoria, estos espacios ocupan un byte = 1 conjunto de 8 bits, este es el tamaño minimo que se utiliza para almacenar datos o instrucciones
En este tema aprenderemos a:
El Destino es donde se deja el resultado de la operacion, en este caso se deja lo que esta almacenado en ORIGEN o su dirección
Existen algunas pocas instrucciones que solo funcionan con un operador y otros con ningun operador
Clases de Instrucciones: las instrucciones por su comportamiento se clasifican en:
Para el mejor entendimiento del tema se necesita que tengan conocimiento de la arquitectura del microprocesador 8086 u 8088 aunque en general utilizaremos toda la programacion orientada al 8086, en el siguiente link encontraran toda la informacion necesaria No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Modos De Direccionamiento de Memoria: existen varios modos de direccionamiento, nosotros veremos los 7 mas importantes, para los ejemplos de cada modo de direccionamiento utilizaremos un ejemplo en emu8086
Direccionamiento Inmediato: En la instruccion esta incluida directamente el operando, es muy util cuando queremos inicializar los registros con un valor constante
Ejemplo:

ahi podemos ver un ejemplo del direccionamiento inmediato; movemos 105hexadecimal al registro AX, 10octal al registro BL y un numero binario equivalente a 132hexadecimal en binario
Ejemplo 2:

En este ejemplo almacenamos b800h en AX y luego almacenamos lo contenido en AX en ES
En el ultimo ejemplo inicializamos una variable y luego la almacenamos en un registro

Direccionamiento de Registros: Para mover el contenido de un registro AMBOS deben ser del mismo tamaño
Ejemplo: movemos 1133h a AX, el valor contenido en AX en BX 1133h, la parte de AH = 33 a DH y la parte AL=11 a DL

Direccionamiento Directo: para explicar esto utilizamos algo como MOV OPERANDO1, [direccion_de_memoria] almacenamos en OPERANDO1 lo que este contenido en la direccion de memoria, tambien funciona con MOV [direccion_de_memoria],OPERANDO2 movemos lo que esta contenido en OPERANDO2 y lo almacenamos en la direccion de memoria especificada

Direccionamiento Indirecto de Registro: utilizamos los registros de segmento mas un registro base bx/bp o indice SI/DI para apuntar a una direccion de memoria, ampliamos nuestro rango de direccionamiento de memoria apuntada normalmente se usa para algunas funciones especiales en assembler

Direccionamiento Relativo de Base: la direccion del operando se obtiene de la suma del numero y el contenido de un registro base BX/BP, este direccionamiento es el mas usado para acceder a estructuras de datos complejas

Direccionamiento Indexado Directo: El operando se encuentra en una direccion dada por la suma de un registro de segemento*16, un registro indice SI o DI y un desplazamiento de 8 o 16 bits

Direccionamiento Indexado a Base: el operando se encuentra en una direccion especificada por la suma de un registro de segmento*16, uno Base, uno de indice y opcionalmente un desplazamiento de 8 a 16 bits
MOV AX,ES:[BX+DI+DESP] ó MOV AX,ES:desp[BX][DI]
MOV CS:[BX+SI+DESP],CX ó MOV CS:desp[BX][SI],CX
No todos los registros pueden combinarse entre si
Combinaciones de registros de segmento y desplazamiento En la siguiente tabla podemos ver todas las posibles combinaciones de registros de segmento y registros de desplazamiento

Con esto ya podremos utilizar los modos de direccionamiento de memoria en ensamblador, existen ciertas direcciones de memorias que no podemos utilizar ya que estan asignadas a funciones especiales
Mapa de Memoria de un 8086/8088
Cada celda de memoria esta identificada por un numero o direccion de memoria, estos espacios ocupan un byte = 1 conjunto de 8 bits, este es el tamaño minimo que se utiliza para almacenar datos o instrucciones

- Como trabaja cada modo de direccionamiento de datos en la memoria,
- Aprenderemos a formar instrucciones en lenguaje de ensamblador para utilizar los modos de direccionamiento,
- Utilizar el direccionamiento que sea mas apropiado para cada caso que necesitemos
INSTRUCCION DESTINO,ORIGEN
El Destino es donde se deja el resultado de la operacion, en este caso se deja lo que esta almacenado en ORIGEN o su dirección
Existen algunas pocas instrucciones que solo funcionan con un operador y otros con ningun operador
INSTRUCCION DESTINO
INSTRUCCION
Clases de Instrucciones: las instrucciones por su comportamiento se clasifican en:
- Instrucciones de Procesamiento: se realiza un proceso aritmetico o logico
- Instrucciones de Acceso a Memoria: se encargan de trasnferir informacion a la memoria o desde la memoria
- Instrucciones de Transferencia de Datos: nos ayuda a enviar y recibir informacion utilizando los dispositivos de entrada y salida
- Instrucciones de Control: alteran el flujo de control cuando un programa esta en ejecucion
Para el mejor entendimiento del tema se necesita que tengan conocimiento de la arquitectura del microprocesador 8086 u 8088 aunque en general utilizaremos toda la programacion orientada al 8086, en el siguiente link encontraran toda la informacion necesaria No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Modos De Direccionamiento de Memoria: existen varios modos de direccionamiento, nosotros veremos los 7 mas importantes, para los ejemplos de cada modo de direccionamiento utilizaremos un ejemplo en emu8086
Direccionamiento Inmediato: En la instruccion esta incluida directamente el operando, es muy util cuando queremos inicializar los registros con un valor constante
Ejemplo:
MOV BX,15
; movemos el valor 15 y lo almacenamos en el registro BX
ahi podemos ver un ejemplo del direccionamiento inmediato; movemos 105hexadecimal al registro AX, 10octal al registro BL y un numero binario equivalente a 132hexadecimal en binario
Ejemplo 2:

En este ejemplo almacenamos b800h en AX y luego almacenamos lo contenido en AX en ES
En el ultimo ejemplo inicializamos una variable y luego la almacenamos en un registro

Direccionamiento de Registros: Para mover el contenido de un registro AMBOS deben ser del mismo tamaño
MOV BX,AX
MOV AL,BL
Ejemplo: movemos 1133h a AX, el valor contenido en AX en BX 1133h, la parte de AH = 33 a DH y la parte AL=11 a DL

Direccionamiento Directo: para explicar esto utilizamos algo como MOV OPERANDO1, [direccion_de_memoria] almacenamos en OPERANDO1 lo que este contenido en la direccion de memoria, tambien funciona con MOV [direccion_de_memoria],OPERANDO2 movemos lo que esta contenido en OPERANDO2 y lo almacenamos en la direccion de memoria especificada

Direccionamiento Indirecto de Registro: utilizamos los registros de segmento mas un registro base bx/bp o indice SI/DI para apuntar a una direccion de memoria, ampliamos nuestro rango de direccionamiento de memoria apuntada normalmente se usa para algunas funciones especiales en assembler

Direccionamiento Relativo de Base: la direccion del operando se obtiene de la suma del numero y el contenido de un registro base BX/BP, este direccionamiento es el mas usado para acceder a estructuras de datos complejas

Direccionamiento Indexado Directo: El operando se encuentra en una direccion dada por la suma de un registro de segemento*16, un registro indice SI o DI y un desplazamiento de 8 o 16 bits

Direccionamiento Indexado a Base: el operando se encuentra en una direccion especificada por la suma de un registro de segmento*16, uno Base, uno de indice y opcionalmente un desplazamiento de 8 a 16 bits
MOV AX,ES:[BX+DI+DESP] ó MOV AX,ES:desp[BX][DI]
MOV CS:[BX+SI+DESP],CX ó MOV CS:desp[BX][SI],CX
No todos los registros pueden combinarse entre si
Combinaciones de registros de segmento y desplazamiento En la siguiente tabla podemos ver todas las posibles combinaciones de registros de segmento y registros de desplazamiento

Con esto ya podremos utilizar los modos de direccionamiento de memoria en ensamblador, existen ciertas direcciones de memorias que no podemos utilizar ya que estan asignadas a funciones especiales
Mapa de Memoria de un 8086/8088

#6
ASM / Macros en Assembler emu 8086 [Facil]
Diciembre 16, 2020, 09:43:45 PM
en assembler para usar una funcion utilizamos los procedimientos, pero los procedimientos no nos permiten usar parametros, para utilizarlos debemos hacer el uso de macros
definimos el macro de esta forma
nombre_macro macro [atributo21,atributo2,.....,atributon]
[aqui ponemos todas las operaciones]
endm
ahora veremos un ejemplo
Imprimir la bandera de Bolivia mediante macros en assembler
Código: php

definimos el macro de esta forma
nombre_macro macro [atributo21,atributo2,.....,atributon]
[aqui ponemos todas las operaciones]
endm
ahora veremos un ejemplo
Imprimir la bandera de Bolivia mediante macros en assembler
include 'emu8086.inc'
ejercicio5 macro esqsup,esqinf, col
mov ax,0600h
mov cx, esqsup
mov dx, esqinf
mov bh, col
int 10h
endm
org 100h
ejercicio5 1100h, 184fh, 020h
ejercicio5 0000h, 074fh, 040h
ejercicio5 0800h, 104fh, 0e0h
ret

#7
ASM / Re:listas en assembler ciclo loop emu8086 [facil]
Diciembre 10, 2020, 01:52:29 AM
gracias por las recomendaciones, estoy haciendo un curso de assembler para luego empezar con cracking quise compartir algunos ejercicios que habia resuelto para practicar algunos ejercicios
#8
ASM / Procedimientos en assembler emu8086 [facil]
Diciembre 10, 2020, 01:27:50 AM
En muchos lenguajes de programacion utilizamos las funciones, despues de declarar una funcion la invocacion n veces en la funcion principal, en assembler el equivalente a esto son los procedimientos, empezamos con un ejemplo facil
Programa para imprimir n veces una cadena en assembler utilizando un procedimiento
Código: php
podemos repetir n veces nuestro procedimiento cuando lo necesitemos lo que nos permite ahorrar mucho codigo en programas grandes
ejecutamos en emu8086
seguimos con otro ejemplo, la practica hace al maestro
Programa para imprimir una lista de n valores mediante procedimientos
Código: php
ejecutamos en emu8086
Otro ejercicio
Imprimir el mayor de una lista mediante procedimientos en assembler
Código: php

otro ejemplo
Buscar un numero en un vector con procedimientos en assembler
Código: php
haciendo la prueba en emu8086
Programa para imprimir n veces una cadena en assembler utilizando un procedimiento
include 'emu8086.inc'
org 100h
; utilizaremos un loop para imprimir 5 veces nuestro procedimiento
mov cx,5 ;movemos el valor 5 a cx para que el loop se repita 5 veces
repetir:
call programita ; llamamos a nuestro procedimiento
loop repetir
ret
programita proc; creamos un procedimiento llamado programita
mov ax,2 ; movemos a ax el valor de 2
call pthis ;
db 13,10,'mensaje',0 ; imprimimos la cadena 'mensaje'
ret
programita endp ; terminamos el procedimiento con endp
DEFINE_PTHIS
DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
END
podemos repetir n veces nuestro procedimiento cuando lo necesitemos lo que nos permite ahorrar mucho codigo en programas grandes
ejecutamos en emu8086

Programa para imprimir una lista de n valores mediante procedimientos
;imprimir una lista de n valores mediante procedimientos
include 'emu8086.inc'
org 100h
; DEFINIMOS VARIABLES
mov bx,0
print 'ejercicio 2'
printn ''
print 'ingrese el tamaño de la lista: '
call scan_num ;el se guarda en cx
printn ''
suma:
call ejercicio2
printn ''
loop suma
ret
ejercicio2 proc
mov ax,lista[bx]
print '['
call print_num
print ']'
add bx,2
ret
ejercicio2 endp
DEFINE_PTHIS
DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
lista dw 8,1,2,5,4
END
ejecutamos en emu8086

Imprimir el mayor de una lista mediante procedimientos en assembler
include 'emu8086.inc'
org 100h
mov bx,0
print 'ejercicio 3'
printn ''
call ejercicio3
ret
ejercicio3 proc
mov cx,5;definir tamaño de la lista
recorrer:
mov ax,lista[bx]
;call print_num
;printn ''
cmp ax,mayor
jg cambiar
jmp continuar
cambiar:
mov mayor,ax
continuar:
add bx,2
loop recorrer
mov ax,mayor
print 'el numero mayor de la lista es: '
call print_num
ret
ejercicio3 endp
lista dw 3,1,2,5,4
mayor dw 0
DEFINE_PTHIS
DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
END

Buscar un numero en un vector con procedimientos en assembler
include 'emu8086.inc'
org 100h
mov bx,0
print 'ejercicio 4'
printn ''
print 'ingrese un numero a buscar en el vector '
call scan_num
printn ''
call ejercicio4
fin:
ret
ejercicio4 proc
mov acomparar,cx
mov cx,5
recorrer:
mov ax,lista[bx]
call print_num
print ' '
add bx,2
cmp ax,acomparar
je esIgual
loop recorrer
printn ''
printn ' el numero no esta en la lista'
jmp fin
ejercicio4 endp
esIgual proc
lea si,mensaje1
printn ''
call print_string
ret
jmp fin
esIgual endp
lista dw 3,1,2,5,4
acomparar dw 0
DEFINE_PTHIS
DEFINE_PRINT_STRING
DEFINE_SCAN_NUM
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
mensaje1 db 13,10,' el valor buscado esta en el vector '
END
haciendo la prueba en emu8086

#9
ASM / leer por teclado e imprimir por pantalla librerias emu8086 [facil]
Diciembre 10, 2020, 12:38:56 AM
siguiendo con los ejercicios para familiarizarnos con assembler en el procesador 8086 mediante emu8086 haremos el uso de las librerias para capturar datos por teclado o imprimirlos por pantalla de forma sencilla
Código: php
utilizamos putc y print desde la libreria
ejecutamos
ahora que entendimos el funcionamiento con algo basico subamos de nivel
Programa que recoge un numero por teclado y lo imprime por pantalla
Programa que imprime una cadena por pantalla
Programa que recoge 2 numeros por teclado e imprime la suma de ambos por pantalla
Código: php
utilizamos definiciones, estas se declaran despues del RET
include emu8086.inc ; declaramos la libreria
org 100h
PRINT 'oh mae ya mo shindeiru'; podemos utilizar print para imprimir una cadena
gotoxy 10,5 ; nos vamos a la direccion 10 en x, 5 en y
putc 65 ; imprimimos el caracter 65 en ascii que es el caracter A
gotoxy 10,6
putc 'B' ; imprimimos B
utilizamos putc y print desde la libreria
ejecutamos

Programa que recoge un numero por teclado y lo imprime por pantalla
Programa que imprime una cadena por pantalla
Programa que recoge 2 numeros por teclado e imprime la suma de ambos por pantalla
include 'emu8086.inc'
org 100h
print 'ejercicio 1'
;recoger primer numero
printn ''
lea si, msg1
call print_string
call scan_num
mov ax,cx
; imprime las siguientes palabras
;call pthis
;db 13,10,'el numero que ingresaste es: ',0
;call print_num
mov bx,ax
;recoger el segundo numero
lea si,msg2
printn ''
call print_string
push ax
lea si, msg1
call scan_num
mov ax,cx
;call pthis
;db 13,10,'el numero que ingresaste es: ',0
;call print_num
mov bx,ax
pop ax
add ax,bx
; imprime la suma de los dos numeros guardada en ax
call pthis
db 13,10,'la suma total es : ',0
call print_num
ret
msg1 db 'ingresa el primer numero: ',0
msg2 db 'ingresa el segundo numero: ',0
DEFINE_SCAN_NUM
DEFINE_PRINT_STRING
DEFINE_PRINT_NUM
DEFINE_PRINT_NUM_UNS
DEFINE_PTHIS
END
utilizamos definiciones, estas se declaran despues del RET

#10
ASM / modo grafico caracteres emu8086 [facil]
Diciembre 09, 2020, 11:47:37 PM
hoy experimentaremos a imprimir en el modo grafico en assembler en emu8086
un ejemplo basico para entender como funciona
Programa para imprimir la letra a en el modo grafico emu8086
Código: php
ejecutamos en emu

Ahora practiquemos un poco mas
nuestra zona de memoria de la pantalla es lineal, va desde el 1 hasta el 2000 linealmente, cada direccion de memoria se expresa en hexadecimal
tendriamos algo parecido a esto
; zona de memoria es una especie de matriz o vector linea 0 ---------- 80
81--------- 160
161-------- 240
241-------- 320 (2000 caracteres en total)
ahora para practicar imprimiremos una cadena de caracteres A
Imprimir caracteres A --------------------->
<---------------------A
Código: php
viendo su ejecucion en emu8086
el modo de pantalla es de 80*25
entendiendo el funcionamiento cada posicion seria
Para practicar un poco mas, haremos una impresion de caracteres primero hacia abajo y luego hacia arriba
Código: php
como ven lo unico que cambia es el incremento, antes incrementabamos en 1 espacio, ahora añadimos +160 caracteres para imprimir en la siguiente linea, o decrementamos -160 para subir por la memoria de pantalla
movemos en CX el valor de 25 porque solo hay 25 lineas hacia abajo
ejecutemos en emu
ejecutemos

por ultimo les dejo un codigo que imprime las dos filas en direcciones contrarias al mismo tiempo
Código: php
a modo de curiosidad mario bros fue escrito en assembler
un ejemplo basico para entender como funciona
Programa para imprimir la letra a en el modo grafico emu8086
; si queremos modificar la direccion de pantalla es B800 contiene 2 bytes
; B800; 2 bytes (Caracter,Color)
org 100h
mov ax,0b800h; direccionando a memoria de pantalla 0b800h
mov es,ax; ponemos al segmento extra para poder acceder
mov es:[0],65; imprimimos el caracter A su valor en codigo ascii es 65 en la memoria de pantalla
ret
ejecutamos en emu

Ahora practiquemos un poco mas
nuestra zona de memoria de la pantalla es lineal, va desde el 1 hasta el 2000 linealmente, cada direccion de memoria se expresa en hexadecimal
tendriamos algo parecido a esto
; zona de memoria es una especie de matriz o vector linea 0 ---------- 80
81--------- 160
161-------- 240
241-------- 320 (2000 caracteres en total)
ahora para practicar imprimiremos una cadena de caracteres A
Imprimir caracteres A --------------------->
<---------------------A
org 100h
mov bx,0
mov cx,3 ; repetiremos 3 veces a->
; <-a
mov ax,0b800h; memoria de pantalla
ciclo: ; este es el ciclo global que imprimira ambas lineas
push cx
mov bx,contadord
mov cx,80; son 80 caracteres por linea que debemos imprimir lo guardamos en cx para repetir 80 veces
imprimirder: ; ciclo que imprime a la derecha
mov es,ax; movemos al segmento extra
mov es:[bx],65; imprimimos a en el indice 0
;mov es:[bx+320],65
;mov es:[bx+640],65
add bx,2
loop imprimirder
add contadord,320
pop cx
push bx
push cx
mov bx,contadori
mov cx,80
imprimirizq: ; ciclo que imprime a la izquiera
mov es:[bx],65
sub bx,2
loop imprimirizq
add contadori,320
pop cx
pop bx
loop ciclo
ret
contadord dw 0h ;iniciamos la primera linea en la direccion 0h para que empiece a imprimir desde ahi
contadori dw 318 ;iniciamos en la segunda fila 320-2 si tomamos en cuenta que es una direccion lineal
resta dw 2h ; utilizaremos la variable para el decremento
viendo su ejecucion en emu8086

entendiendo el funcionamiento cada posicion seria
Para practicar un poco mas, haremos una impresion de caracteres primero hacia abajo y luego hacia arriba
org 100h
mov ax,0b800h
mov es,ax
;mov bx,0
mov cx,3
inccolumna:
push cx
push bx
mov bx,posicionx
mov cx,25; repetir 2 veces columna
abajo:
mov es:[bx],65
;mov es:[bx+1],24h
add bx,160
loop abajo
pop bx
pop cx
push cx
push bx
mov cx, 25
mov bx,posiciony
arriba:
mov es:[bx+2],65
sub bx,160
loop arriba
pop bx
pop cx
add posicionx,4
add posiciony,4
loop inccolumna
ret
x dw 0
posicionx dw 0h
posiciony dw 3840
como ven lo unico que cambia es el incremento, antes incrementabamos en 1 espacio, ahora añadimos +160 caracteres para imprimir en la siguiente linea, o decrementamos -160 para subir por la memoria de pantalla
movemos en CX el valor de 25 porque solo hay 25 lineas hacia abajo
ejecutemos en emu
ejecutemos

por ultimo les dejo un codigo que imprime las dos filas en direcciones contrarias al mismo tiempo
org 100h
mov ax,0b800h
mov es,ax
;mov bx,0
mov cx,3
push ax
mov ax, posiciony ;inicializar resto
mov resto,ax
pop ax
inccolumnadoble:
push cx
mov bx,posicionx
mov cx,25; repetir 2 veces columna
abajo:
;mov ax,posiciony
; imprimir caracter hacia abajo
mov es:[bx],65
;mov es:[bx+1],24h
add bx,160
; imprimir caracter hacia arriba
push bx
mov bx,resto
mov es:[bx+2],65
sub resto,160
pop bx
loop abajo
pop cx
add posicionx,4 ; incrementar posicionx en 4 para siguiente columna
push ax ; copiar la direcion de posicionx y aumentar 3840 + 4
mov ax,posicionx
mov resto,ax
pop ax
add resto,3840
loop inccolumnadoble
ret
x dw 0
posicionx dw 0h
posiciony dw 3840
resto dw 0
a modo de curiosidad mario bros fue escrito en assembler
#11
ASM / listas en assembler ciclo loop emu8086 [facil]
Diciembre 09, 2020, 09:44:47 PM
El siguiente programa es un ejemplo sencillo de como funciona el ciclo de repeticion equivalente al for
Programa que imprime una lista y suma todos sus componentes
Código: php
Ejecutamos nuestro codigo en emu8086, viendo las variables

Ahora veremos otro ejemplo con listas
Programa para determinar el mayor de una lista
Código: php
Ejecutamos el codigo en emu8086

a modo de ejercicio intenten sacar el menor de la lista
Programa que imprime una lista y suma todos sus componentes
org 100h;iniciamos en la direccion 100h de la memoria
mov bx,0 ; utilizaremos un contador en bx para movernos dentro de la lista, este inicia en cero
mov cx,5; en cx se declara el numero de repeticiones del loop nuestra lista tendra un tamaño de 5 asi que con 5 repeticiones basta
repetir: ; aqui empezara el loop, tenemos nuestro loop con la etiqueta repetir:
; aqui debemos poner todas las acciones que queremos que se repitan
mov al,lista[bx]; copiamos el contenido almacenado en lista[posicion] en al
add suma, al ; sumamos a la variable suma el valor contenido en al, es como suma=suma+al
add bx,1; movemos nuestra posicion de la lista para la siguiente repeticion
loop repetir ; al llegar aqui saltara a la etiqueta repetir:
ret ; abajo de ret declararemos todos nuestras variables
lista db 4,3,5,78,1 ; declaramos nuestra lista en data byte con los valores 4,3,5,78,1
suma db 0; inicializamos una variable suma para almacenar el total de la suma de la lista
Ejecutamos nuestro codigo en emu8086, viendo las variables

Ahora veremos otro ejemplo con listas
Programa para determinar el mayor de una lista
org 100h
mov bx,0
mov cx,n
repeticion:
mov ax,lista[bx]
cmp ax,mayor
jg cambiar
jmp continuar
cambiar:
mov mayor,ax
continuar:
add suma,ax
add bx,2
loop repeticion
ret
n dw 5
lista dw 4,3,5,7,1
suma dw 0
mayor dw 0
Ejecutamos el codigo en emu8086

a modo de ejercicio intenten sacar el menor de la lista
#12
Dudas y pedidos generales / Re:Busco Material para aprender CTF
Marzo 11, 2020, 10:24:19 PM
gracias voy a revizarlos ahora mismo
#13
Dudas y pedidos generales / Re:Ayuda tarjeta de red no se pone en modo monitor
Marzo 11, 2020, 09:51:15 AM
verifica que el repositorio que agregaste sea el correcto, el update y upgrade sirven para actualizar la lista de actualizaciones y aplicarla
primero configuraste virtual box para que reconozca tu tarjeta de red? esta en sus configuraciones la opcion del tipo de red que vas a usar
segundo verifica si la tarjeta de red es compatible con kali, abre una terminal y escribe
Código: php
tendria que salir un mensaje con el nombre del dispositivo wifi
hay tarjetas inalambricas que no son compatibles con la auditoria inalambrica, con el nombre de tu chipset busca si es o no compatible con el modo monitor e inyeccion de paquetes
si has seguido el video creo que lo que hiciste mal es algo al añadir el repositorio, podrias eliminarlo y intentar hacer un update para ver si te sale algun error
primero configuraste virtual box para que reconozca tu tarjeta de red? esta en sus configuraciones la opcion del tipo de red que vas a usar
segundo verifica si la tarjeta de red es compatible con kali, abre una terminal y escribe
iwconfig
tendria que salir un mensaje con el nombre del dispositivo wifi
hay tarjetas inalambricas que no son compatibles con la auditoria inalambrica, con el nombre de tu chipset busca si es o no compatible con el modo monitor e inyeccion de paquetes
si has seguido el video creo que lo que hiciste mal es algo al añadir el repositorio, podrias eliminarlo y intentar hacer un update para ver si te sale algun error
#14
Dudas y pedidos generales / Busco Material para aprender CTF
Marzo 10, 2020, 11:43:30 PM
Hola, estoy tratando de conformar un grupo para competir en los Capture The Flag que se realizan en algunas conferencias de seguridad en mi pais, en una gestion anterior les enseñe a resolver dos retos el fg0s y otro simple que realice, abarcando retos simples y didacticos relacionados a la tematica de los CTF, he estado buscando retos activos y sencillos pero la verdad es que no los logro encontrar, me gustaria pedirles ayuda para ver si me pueden orientar cuales serian recomendados para principiantes que sean didacticos y faciles
Páginas1