|
Mostrar Temas
|
Páginas: 1 2 [3] 4 5 6 7
|
21
|
Seguridad Informática / Criptografía / AES 128 bits Encrypt [ASM Bit slice]
|
en: 14 Mayo 2014, 13:11 pm
|
Hola Bueno al principio no tenia ganas de compartir el code, ya que es para un proyecto personal, pero como algunos usuarios querian verlo, y este sub-foro esta casi muerto aqui les traigo esta implmentacion, a ver si alguien la sabe apreciar. El code esta copiado directamente de mi editor, funciona bien, pero no es ensamblar y funcionar tienes que modificar algunas cosas. Seria una ronda de cifrado, si quieres las 8 serian hacer loops, y las 2 ultimas que son con SubBytes, Shifrows y AddRounkey pues modificar algo. Tambien algunas funciones como AddRounkey y SubBytes no son bit slice, creo que asi ya estaban bien. Bueno si alguien lo copia espero que se respete el primer autor, yo. [code=asm].section .data sbx_: .quad 0xc56f6bf27b777c63,0x76abd7fe2b670130 .quad 0xf04759fa7dc982ca,0xc072a49cafa2d4ad .quad 0xccf73f362693fdb7,0x1531d871f1e5a534 .quad 0x9a059618c323c704,0x75b227ebe2801207 .quad 0xa05a6e1b1a2c8309,0x842fe329b3d63b52 .quad 0x5bb1fc20ed00d153,0xcf584c4a39becb6a .quad 0x85334d43fbaaefd0,0xa89f3c507f02f945 .quad 0xf5389d928f40a351,0xd2f3ff1021dab6bc .quad 0x1744975fec130ccd,0x73195d643d7ea7c4 .quad 0x88902a22dc4f8160,0xdb0b5ede14b8ee46 .quad 0x5c2406490a3a32e0,0x79e4959162acd3c2 .quad 0xa94ed58d6d37c8e7,0x08ae7a65eaf4566c .quad 0xc6b4a61c2e2578ba,0x8a8bbd4b1f74dde8 .quad 0x0ef6034866b53e70,0x9e1dc186b9573561 .quad 0x948ed9691198f8e1,0xdf2855cee9871e9b .quad 0x6842e6bf0d89a18c,0x16bb54b00f2d9941 sq0_: .quad 0x000000ff000000ff,0x000000ff000000ff sq1_: .quad 0x0000ff000000ff00,0x0000ff000000ff00 sq2_: .quad 0x00ff000000ff0000,0x00ff000000ff0000 sq3_: .quad 0xff000000ff000000,0xff000000ff000000 bts_: .quad 0x8080808080808080,0x8080808080808080 dlb_: .quad 0x7f7f7f7f7f7f7f7f,0x7f7f7f7f7f7f7f7f xrb_: .quad 0x1b1b1b1b1b1b1b1b,0x1b1b1b1b1b1b1b1b rcn_: .quad 0x0000000200000001,0x0000000800000004 .quad 0x0000002000000010,0x0000008000000040 .quad 0x000000360000001b .section .text .globl _start _start: pushq %r11 pushq %r12 pushq %r13 pushq %r14 pushq %r15 pushq %r8 pushq %r9 pushq %rax ###movq $key_, %r11 ###movq $inp_, %r10 movq $rcn_, %r12 prefetch sbx_ prefetch sq0_ movq $-160, %r13 movdqu (%r11), %xmm0 movdqu %xmm0, -16(%rsp, %r13, 1) movl 12(%r11), %r11d movnti %r11d, (%rsp, %r13, 1) _KeyExpansion: rorl $8, (%rsp, %r13, 1) movzx (%rsp, %r13, 1), %r14 movzx 1(%rsp, %r13, 1), %r15 movzx 2(%rsp, %r13, 1), %r8 movzx 3(%rsp, %r13, 1), %r9 movzx sbx_(, %r14, 1), %r14 movzx sbx_(, %r15, 1), %r15 movzx sbx_(, %r8, 1), %r8 movzx sbx_(, %r9, 1), %r9 movnti %r14d, (%rsp, %r13, 1) movnti %r15d, 1(%rsp, %r13, 1) movnti %r8d, 2(%rsp, %r13, 1) movnti %r9d, 3(%rsp, %r13, 1) movl (%rsp, %r13, 1), %eax xorl (%r12), %eax addq $4, %r12 xorl -16(%rsp, %r13, 1), %eax movnti %eax, (%rsp, %r13, 1) xorl -12(%rsp, %r13, 1), %eax movnti %eax, 4(%rsp, %r13, 1) xorl -8(%rsp, %r13, 1), %eax movnti %eax, 8(%rsp, %r13, 1) xorl -4(%rsp, %r13, 1), %eax movnti %eax, 12(%rsp, %r13, 1) movnti %eax, 16(%rsp, %r13, 1) addq $16, %r13 jnz _KeyExpansion _Cipher: movdqu (%r10), %xmm0 pxor -176(%rsp), %xmm0 movdqu %xmm0, -208(%rsp) movq $-16, %r13 _SubBytes: movzx -192(%rsp, %r13, 1), %r14 movzx -191(%rsp, %r13, 1), %r15 movzx -190(%rsp, %r13, 1), %r8 movzx -189(%rsp, %r13, 1), %r9 movzx sbx_(, %r14, 1), %r14 movzx sbx_(, %r15, 1), %r15 movzx sbx_(, %r8, 1), %r8 movzx sbx_(, %r9, 1), %r9 movnti %r14d, -224(%rsp, %r13, 1) movnti %r15d, -223(%rsp, %r13, 1) movnti %r8d, -222(%rsp, %r13, 1) movnti %r9d, -221(%rsp, %r13, 1) addq $4, %r13 jnz _SubBytes _Shiftows: movdqu -240(%rsp), %xmm0 pshufd $0x39, %xmm0, %xmm1 pshufd $0x4e, %xmm0, %xmm2 pshufd $0x93, %xmm0, %xmm3 pand sq1_, %xmm1 pand sq2_, %xmm2 pand sq3_, %xmm3 pand sq0_, %xmm0 pxor %xmm1, %xmm0 pxor %xmm2, %xmm0 pxor %xmm3, %xmm0 _Mixcolumns: movdqa %xmm0, %xmm1 movdqa %xmm1, %xmm2 movdqa %xmm2, %xmm3 movdqa %xmm3, %xmm4 pand bts_, %xmm0 pcmpeqb bts_, %xmm0 movdqa %xmm0, %xmm5 pand %xmm0, %xmm1 pandn %xmm2, %xmm0 pand dlb_, %xmm1 pslld $1, %xmm0 pslld $1, %xmm1 pxor xrb_, %xmm1 pand %xmm5, %xmm1 pxor %xmm1, %xmm0 pxor %xmm0, %xmm2 movdqa %xmm2, %xmm6 psrld $8, %xmm2 pxor %xmm2, %xmm0 pslld $8, %xmm3 pxor %xmm3, %xmm0 pslld $8, %xmm3 pxor %xmm3, %xmm0 psrld $16, %xmm4 pxor %xmm4, %xmm0 psrld $8, %xmm4 pxor %xmm4, %xmm0 pslld $24, %xmm6 pxor %xmm6, %xmm0 _AddRoundkey: pxor -160(%rsp), %xmm0
[/code] Cualquier pregunta ya saben. Un saludo. P.D: La instruccion prefetch no se si esta bien puesta, la intencion es copiar las tablas "lookup table" en la cache L1 para asi minimizar las frecuencias, ya que SubBytes utiliza mucho las tablas. P.D.2: Si alguien entendido en el tema lee esto, me gustaria ver su critica. Edito:Corregido el error de Subbytes y el de Shiftrows.
|
|
|
22
|
Programación / ASM / Bus error extensiones SSE2
|
en: 22 Abril 2014, 19:09 pm
|
Hola Siento el titulo no sabia que poner. Bueno el problema reside en que cuando quiero hacer algo directamente desde la memoria a un registro xmm me lanza un Bus error (core dumped). pxor mem_, %xmm0
Eso me tiraria el error, pero si lo escribo de esta forma no. movdqu mem_, %xmm1 pxor %xmm1, %xmm0
Casi todas las instrucciones de SSEx me lanzan un core dumped si las ejecuto directamente como en el primer ejemplo, menos movdqu, sera porque es un unaligned? A que puede deberse eso? Espero que se entienda. Un saludo.
|
|
|
23
|
Programación / ASM / [Aporte] Strlen XMM
|
en: 22 Marzo 2014, 21:21 pm
|
Bueno aqui les dejo una implementacion de una strlen en XMM, en teoria tendria que ser muchisimo mas rapida que la strlen normal, pero no esta testeada. i.section .text .globl _start _start: pushq %r8 pushq %r9 pushq %r12 movq %r8, %r9 pxor %xmm1, %xmm1 _x0: movdqu (%r8), %xmm0 pcmpeqb %xmm0, %xmm1 pmovmskb %xmm1, %r12d addq $16, %r8 andl $0xffffffff, %r12d jz _x0 bsf %r12d, %r12d subq $16, %r8 subq %r9, %r8 addl %r12d, %r8d popq %r12 popq %r9 popq %r8
Si tienen una CPU de 32 bits solamente cambien los registros, el puntero a la cadena es %r8. Un saludo.
|
|
|
24
|
Programación / ASM / Movimiento de mascara
|
en: 19 Marzo 2014, 19:02 pm
|
Hola Tengo que mover los byte que tengan el bit 7 en 1, ya tengo una funcion aplicada con maskmovq que hace precisamente lo que quiero, pero lo malo de esa instruccion es que a la CPU le cuesta 32 OPS. ; %mm0 = 0x8001018080010180 maskmovq %mm0, %mm0 ; (%rdi) = 0x8000008080000080
Hay otra instruccion llamada pmovmskb es 1 OPS, que copia el bit 7 en un registro de 32 bits haciendo un octeo con los registros que tienen ese bit en 1. ; %mm0 = 0x8001018080010180 pmovmskb %mm0, %esi ; %esi = 0x99
Bien alguien me da alguna idea de como construir una mascara, a partir de ese octeo para copiar los byte tal y como lo hace maskmovq? Un saludo.
|
|
|
25
|
Programación / Programación General / Interpretar una mask byte
|
en: 11 Febrero 2014, 18:15 pm
|
Hola Siento el titulo del post, no sabia muy bien que poner. Bien tengo el siguiente problema, tengo un quadword y lo que tengo que hacer es comprobar el ultimo bit de cada byte y almacenarlo en un registro. 0x8000000000000080
Esto dejaria un octeo 0x81, bien lo que tengo que hacer despues de comprobar el bit, es a los bytes del quadword que su primer bit dieron 1 es hacer un xor, sin afectar a los demas bytes claro. Comprobar el bit se hacerlo, lo que no se es como interpretar luego el 0x81, porque depende del quadword el valor puede ser distinto, que pasos puedo seguir o que metodo? Pero no me dijan comparando ya que tengo un monton de posibilidades, y tendria que hacer una tabla giigante para los xor. Un saludo.
|
|
|
26
|
Programación / ASM / Duda con la Cache
|
en: 28 Enero 2014, 02:26 am
|
Hola Leyendo el set de instrucciones me fije en una instruccion llamada Prefetch, por lo que e leido esta carga datos en la cache, pudiendo escojer los distintos niveles. Leyendo un diagrama del volumen dos, estaba viendo que acceder a la cache L1 es mas rapido que a la memoria principal. No entendi muy bien el funcionamiento, cargas el contenido pero como lo lees luego? O es para instrucciones? movzx (%rsp, %r8), %r14 movzx offset(, %r14), %r14
Tengo que repetir eso unas cuantas veces, accediendo siempre a la memoria, no podria usar la cache? Espero que se me entienda y perdon por si dije alguna burrada. Un saludo.
|
|
|
27
|
Programación / ASM / Duda segmentos
|
en: 23 Diciembre 2013, 06:54 am
|
Bien, ayudando a otro usuario con otra duda aparecio el tema de los segmentos, ya sabia algo de ellos antes y leyendo los manuales mas aun, se que cada segmento tiene su funcion y algunos se concatenan con los registros.
Estaba haciendo pruebas en ring3, me fije de que todos los segmentos tienen el mismo valor menos el %cs, segun la formula que tiene la CPU para calcular los offset multiplica el valor del segmento por 16 y lo suma al offset, bien hice una prueba, %esp el stack esta concatenado con el segmento %ss, copie el contenido de %esp con el segmento %cs y el valor es el mismo que con %ss, a que se debe si %cs tiene otro valor que %ss?
Se que %esp va con %ss, pero la instruccion me la acepta y me creo otro opcode si la escribo con el %cs, bueno esa es la pregunta, se ignora y se calcula con %ss, porque apuntan al mismo offset.
Un saludo.
|
|
|
28
|
Programación / ASM / Duda con MixColumns
|
en: 9 Diciembre 2013, 03:34 am
|
Hola La tengo casi lista, pero tengo un problema. Como sabran la funcion MixColumns se trata de unas multiplicaciones en GF 2(8) y una reduccion modular por 0x11b, en algunos casos se multiplica por 2 y en otros por 3, el 1 no hace falta claro, bien resulta que en algunos bytes cuando los multiplicas por 2 o por 3 es igual el que sea, se pasan de 0xff, lo que los convierte en un word, a esos si hay que hacerles una reduccion modular. Ejemplo: 0xbf << 1 = 0x17e xor 0x11b = 0x65 Pero por ejemplo 0x56 no hace falta. Bien tengo el siguiente codigo, imaginaos que todo el registro esta lleno de 0xbf. .section .data sb: .quad 0x7f7f7f7f7f7f7f7f,0x7f7f7f7f7f7f7f7f rm: .quad 0x1b1b1b1b1b1b1b1b,0x1b1b1b1b1b1b1b1b .section .text .globl _start _start: pand sb, %xmm0 pslld $1, %xmm0 pxor rm, %xmm0
Bien el and, es para evitar que se convierta en word, ocuparia el otro dword y no puede ser, se quedaria en 0x7e, no en 0x17e, y luego se multiplica por 2 y luego el xor es la reduccion modular, todo bien. Bueno esta es la duda, si tengo un 0x56 y 0xbf en el registro barregados 0x56 no requiere ninguna reduccion modular pero 0xbf si, el resultado seria erroneo, como podria solucionar este problema, alguien me echa un cable? Un saludo.
|
|
|
29
|
Seguridad Informática / Análisis y Diseño de Malware / Deteccion de Shellcode
|
en: 16 Octubre 2013, 22:31 pm
|
Hola Bueno lo primero, si el tema no esta en su lugar correcto lo siento, creo que esta mejor aqui porque creo que es un problema de polimorfismo. Bien estoy practicando los polimorfismo con las shellcodes, estoy haciendo las pruebas en un windows y con metasploit, windows tiene como sistema de seguridad "IDS" Kaspersky internet Security 14, y estoy explotando el tipico 08_067_netapi, bien tengo el siguiente encode. _start: xorl %ebx, %ebx movw $0x13a, %bx jmp _C.0 _C.1: popl %edx _C.2: xorb $0xff, (%edx, %ebx) rolb (%edx) decw %bx jnz _C.2 jmp *%edx _C.0: call _C.1
Si, se puede mejorar sobre todo lo de bx, pero solo me preocupa la deteccion, entro en los sources de metasploit y modifico el payload windows/shell/reverse_tcp con el encode y los valores de Offsets. Bien cuando tengo el AV desactivado todo bien, pero cuanto esta activado salta, esta es la deteccion. PDM: Exploit.Win32.Generic
Apllication path: c:\windows\system32\svchost.exe Hay por la red shellcodes anti-ids con polimorfismos mas simples, y la mia salta. Pero cuando lanzo el ataque con metasploit marca lo siguientet, aplical su encode cosa que no le dije: [*] Encoded stage with x86/shikata_ga_n [*]Sending encoded stage (267 bytes) to 192.168.1.129 Que es problema de metasploit o de mi encode? Un saludo. P.D: No quiero hacer nada por hay, simplemente son pruebas, igualmente no me gusta mucho metasploit hace todo el trabajo.
|
|
|
30
|
Seguridad Informática / Seguridad / Fallo en router HG532c de Jazztel
|
en: 21 Agosto 2013, 23:42 pm
|
Hola Pues configurando ese router de Jazztel, cambie la pass de acceso al router que de fabrica es admin admin, todo esto a traves de http puerto 80 en el entorno grafico, vale me voy al apartado de mantenimiento y cambio la pass por otra que no sea admin, ya que si no tengo un problema muy grave de seguridad, sabiendo la direccion publica se puede ingresar a ese router exteriormente, pues al volver a ingresar a traves del puerto 80 la clave admin no es valida y la nueva si normal no, pero como tengo OpenBSD sin entorno grafico no puedo ingresar de esa forma asi que entro a traves de telnet el puerto 23 y este me hace ingresar a esta terminal. ------------------------------- -----Welcome to ATP Cli------ ------------------------------- Me pide el login y la pass, que es admin y la nueva clave que cambie en el apartado de mantenimiento, pero la pass no es correcta, cosa que es rara, porque en otro router de Jazztel esto no sucede, asi que por casualidad ingrese por telnet admin admin y si funciono pude accder a la consola ATP, y posteriormente a busybox teniendo el control del router. Llame a Jazztel para decirles porque sucede esto y no lo saben, vamos que su tecnico me dijo que eso era una cosa muy rebuscada, vamos que no me cuelga el telefono de milagro. Lo bueno es que un amigo mio tiene el mismo modelo de router pero de la teleoperadora Orange, y tiene el mismo problema, sucede exactamento lo mismo. Alguien puede ayudarme? Un saludo.
|
|
|
|
|
|
|