Rotar en registros XMM

Iniciado por cpu2, 16 Agosto 2013, 16:50 PM

0 Miembros y 3 Visitantes están viendo este tema.

cpu2

Hola

Pues eso me gustaria rotar un byte en los cuatro doublewords que tiene un registro XMM. Hay una instruccion llamada vprotd pero no dispongo de la bandera XOP.

Como podria hacer ese tipo de rotacion, lo mas eficiente posible. Este es lo que pretendo.

Código (asm) [Seleccionar]
0x63cab704ffed010408040cffee4488dd  rot 1 ----> 0xcab70463ed0104ff040cff084488ddee

Un saludo.

cpu2

Siento el doble post.

Ya solucione el problema, mire un fragmento de codigo por la red y lo adapte un poco a mis necesidades, pero no es valido para sign bytes, no funciono.

Código (asm) [Seleccionar]
movl $0x102f5c2c, %ebx
movd %ebx, %xmm0
movdqa %xmm0, %xmm1
pslld $0x8, %xmm0    ; 0x2f5c2c00
psrld $0x18, %xmm1   ; 0x00000010
por %xmm0, %xmm1


Creo poder optimizarlo, pudiendo copiar el byte 0x10 del registro xmm1 podria ahorrarme el psrld y el por, creo que hay instrucciones que copian bytes a doblewords, lo bueno seria especificar en que posicion quieres copiar el byte.

Un saludo.

Karcrack

#2
Si lo que quieres es rotar un solo byte a la izquierda sería más sencillo hacer:
Código (asm) [Seleccionar]
shufps xmm0, xmm0, $93
Y en sintaxis AT&T:
Código (asm) [Seleccionar]
shufps $0x93, %xmm0, %xmm0

cpu2

Eso no es lo que quiero, lo que hace esa instruccion es rotar los Doubleword, y yo lo que quiero es rotar un byte a la izquierda de cada Doubleword, con esa instruccion que citaste quedaria de esta forma:

Código (asm) [Seleccionar]
0x0000000000000000102f5c2c00000000

Lo que quiero hacer en una funcion Shiftrows del cifrado AES. Ya comprendo bien el cifrado lo que pasa es que lo quiero optimizar al maximo y no tengo las instrucciones AES-ni pero tampoco me valen de mucho por que el codigo ya no seria compatible, con otras maquinas. No puedo hacer una funcion como la que aparece en este codigo, seria muy comodo utilizar punteros y utilizar rotate de SSE.

http://comp.ist.utl.pt/ec-csc/Code/Ciphers/AES_Encrypt.cpp

Un saludo.

P.D: Tambien me gustaria saber como diseñar un buen encode para los ids, es que los de ShellStorm ya los entiendo todos, te digo esto porque eres el mod de malware, ire a molestar un rato  ;D . Simplemente para aprender.

Karcrack

Viendo la función ShiftRows()... No sería equivalente a hacer 3 rol? O es que quieres hacerlo todo con sse?

cpu2

No, con SSE2 y SSE3, ya que hacer esa funcion con punteros es mas pesado en ciclos que en los registros XMM.

Un saludo.

Karcrack

Sería genial poder ver el resultado final :D

cpu2

#7
Descuida, cuando este listo aqui estara.

Un saludo.

Edito:

Esta seria en SSE, lo que comentabas.

Código (asm) [Seleccionar]
movdqu %xmm0, (%rsp)
roll $0x8, 0x4(%rsp)
roll $0x10, 0x8(%rsp)
roll $0x18, 0x0c(%rsp)


Pero deja mucho que desear, pero dejo otra pregunta, este cifrado es demasiado pesado para un malware?

No me refiero a un crypter sino en cifrar conexiones. Por eso lo quiero optimizar al maximo.

P.D: E visto malware que exportaba todo la libreria de openssl, si todo...
P.D2: No dispongo de la instruccion pshufb, esa estaria genial...

Karcrack

En cuanto a seguridad AES de 128bits y 8 rondas sería suficiente para estar tranquilo un par de años y teniendo en cuenta la implementación que estás haciendo dudo mucho que cree overhead.
Yo hago uso de AES 128 con CBC usando el API de W$ (Mi prioridad es minimizar el tamaño) y la latencia de la red supera con creces al tiempo de cifrar un paquete...

cpu2

Cita de: Karcrack en 18 Septiembre 2013, 22:48 PM
En cuanto a seguridad AES de 128bits y 8 rondas sería suficiente para estar tranquilo un par de años y teniendo en cuenta la implementación que estás haciendo dudo mucho que cree overhead.

Vale, eso era lo que me preocupa los ciclos que consume.

Cita de: Karcrack en 18 Septiembre 2013, 22:48 PM
Yo hago uso de AES 128 con CBC usando el API de W$ (Mi prioridad es minimizar el tamaño) y la latencia de la red supera con creces al tiempo de cifrar un paquete...

Tambien tenia pensado implementar AES con CBC, aqui mismo tengo el pdf que habla de los bloques que descarge del nist.

Bueno supongo que al final de esta semana ya tendre algo, no he podido hacer nada.

Un saludo.