elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


  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.

Código
  1. [code=asm].section .data
  2.  
  3. sbx_: .quad 0xc56f6bf27b777c63,0x76abd7fe2b670130
  4.      .quad 0xf04759fa7dc982ca,0xc072a49cafa2d4ad
  5.      .quad 0xccf73f362693fdb7,0x1531d871f1e5a534
  6.      .quad 0x9a059618c323c704,0x75b227ebe2801207
  7.      .quad 0xa05a6e1b1a2c8309,0x842fe329b3d63b52
  8.      .quad 0x5bb1fc20ed00d153,0xcf584c4a39becb6a
  9.      .quad 0x85334d43fbaaefd0,0xa89f3c507f02f945
  10.      .quad 0xf5389d928f40a351,0xd2f3ff1021dab6bc
  11.      .quad 0x1744975fec130ccd,0x73195d643d7ea7c4
  12.      .quad 0x88902a22dc4f8160,0xdb0b5ede14b8ee46
  13.      .quad 0x5c2406490a3a32e0,0x79e4959162acd3c2
  14.      .quad 0xa94ed58d6d37c8e7,0x08ae7a65eaf4566c
  15.      .quad 0xc6b4a61c2e2578ba,0x8a8bbd4b1f74dde8
  16.      .quad 0x0ef6034866b53e70,0x9e1dc186b9573561
  17.      .quad 0x948ed9691198f8e1,0xdf2855cee9871e9b
  18.      .quad 0x6842e6bf0d89a18c,0x16bb54b00f2d9941
  19. sq0_: .quad 0x000000ff000000ff,0x000000ff000000ff
  20. sq1_: .quad 0x0000ff000000ff00,0x0000ff000000ff00
  21. sq2_: .quad 0x00ff000000ff0000,0x00ff000000ff0000
  22. sq3_: .quad 0xff000000ff000000,0xff000000ff000000
  23. bts_: .quad 0x8080808080808080,0x8080808080808080
  24. dlb_: .quad 0x7f7f7f7f7f7f7f7f,0x7f7f7f7f7f7f7f7f
  25. xrb_: .quad 0x1b1b1b1b1b1b1b1b,0x1b1b1b1b1b1b1b1b
  26. rcn_: .quad 0x0000000200000001,0x0000000800000004
  27.      .quad 0x0000002000000010,0x0000008000000040
  28.      .quad 0x000000360000001b
  29.  
  30. .section .text
  31. .globl _start
  32.  
  33. _start:
  34.  
  35. pushq %r11
  36. pushq %r12
  37. pushq %r13
  38. pushq %r14
  39. pushq %r15
  40. pushq %r8
  41. pushq %r9
  42. pushq %rax
  43.  
  44.  
  45. ###movq $key_, %r11
  46. ###movq $inp_, %r10
  47.  
  48. movq $rcn_, %r12
  49.  
  50. prefetch sbx_
  51. prefetch sq0_
  52.  
  53. movq $-160, %r13
  54. movdqu (%r11), %xmm0
  55. movdqu %xmm0, -16(%rsp, %r13, 1)
  56. movl 12(%r11), %r11d
  57. movnti %r11d, (%rsp, %r13, 1)
  58.  
  59. _KeyExpansion:
  60.  
  61. rorl $8, (%rsp, %r13, 1)
  62.  
  63. movzx (%rsp, %r13, 1), %r14
  64. movzx 1(%rsp, %r13, 1), %r15
  65. movzx 2(%rsp, %r13, 1), %r8
  66. movzx 3(%rsp, %r13, 1), %r9
  67. movzx sbx_(, %r14, 1), %r14
  68. movzx sbx_(, %r15, 1), %r15
  69. movzx sbx_(, %r8, 1), %r8
  70. movzx sbx_(, %r9, 1), %r9
  71. movnti %r14d, (%rsp, %r13, 1)
  72. movnti %r15d, 1(%rsp, %r13, 1)
  73. movnti %r8d, 2(%rsp, %r13, 1)
  74. movnti %r9d, 3(%rsp, %r13, 1)
  75.  
  76. movl (%rsp, %r13, 1), %eax
  77. xorl (%r12), %eax
  78. addq $4, %r12
  79.  
  80. xorl -16(%rsp, %r13, 1), %eax
  81. movnti %eax, (%rsp, %r13, 1)
  82. xorl -12(%rsp, %r13, 1), %eax
  83. movnti %eax, 4(%rsp, %r13, 1)
  84. xorl -8(%rsp, %r13, 1), %eax
  85. movnti %eax, 8(%rsp, %r13, 1)
  86. xorl -4(%rsp, %r13, 1), %eax
  87. movnti %eax, 12(%rsp, %r13, 1)
  88.  
  89. movnti %eax, 16(%rsp, %r13, 1)
  90. addq $16, %r13
  91. jnz _KeyExpansion
  92.  
  93. _Cipher:
  94.  
  95. movdqu (%r10), %xmm0
  96. pxor  -176(%rsp), %xmm0
  97. movdqu %xmm0, -208(%rsp)
  98. movq $-16, %r13
  99.  
  100. _SubBytes:
  101.  
  102. movzx -192(%rsp, %r13, 1), %r14
  103. movzx -191(%rsp, %r13, 1), %r15
  104. movzx -190(%rsp, %r13, 1), %r8
  105. movzx -189(%rsp, %r13, 1), %r9
  106. movzx sbx_(, %r14, 1), %r14
  107. movzx sbx_(, %r15, 1), %r15
  108. movzx sbx_(, %r8, 1), %r8
  109. movzx sbx_(, %r9, 1), %r9
  110. movnti %r14d, -224(%rsp, %r13, 1)
  111. movnti %r15d, -223(%rsp, %r13, 1)
  112. movnti %r8d, -222(%rsp, %r13, 1)
  113. movnti %r9d, -221(%rsp, %r13, 1)
  114. addq $4, %r13
  115. jnz _SubBytes
  116.  
  117. _Shiftows:
  118.  
  119. movdqu -240(%rsp), %xmm0
  120. pshufd $0x39, %xmm0, %xmm1
  121. pshufd $0x4e, %xmm0, %xmm2
  122. pshufd $0x93, %xmm0, %xmm3
  123. pand sq1_, %xmm1
  124. pand sq2_, %xmm2
  125. pand sq3_, %xmm3
  126. pand sq0_, %xmm0
  127. pxor %xmm1, %xmm0
  128. pxor %xmm2, %xmm0
  129. pxor %xmm3, %xmm0
  130.  
  131. _Mixcolumns:
  132.  
  133. movdqa %xmm0, %xmm1
  134. movdqa %xmm1, %xmm2
  135. movdqa %xmm2, %xmm3
  136. movdqa %xmm3, %xmm4
  137.  
  138. pand bts_, %xmm0
  139. pcmpeqb bts_, %xmm0
  140. movdqa %xmm0, %xmm5
  141. pand %xmm0, %xmm1
  142. pandn %xmm2, %xmm0
  143. pand dlb_, %xmm1
  144. pslld $1, %xmm0
  145. pslld $1, %xmm1
  146. pxor xrb_, %xmm1
  147. pand %xmm5, %xmm1
  148. pxor %xmm1, %xmm0
  149. pxor %xmm0, %xmm2
  150. movdqa %xmm2, %xmm6
  151. psrld $8, %xmm2
  152. pxor %xmm2, %xmm0
  153. pslld $8, %xmm3
  154. pxor %xmm3, %xmm0
  155. pslld $8, %xmm3
  156. pxor %xmm3, %xmm0
  157. psrld $16, %xmm4
  158. pxor %xmm4, %xmm0
  159. psrld $8, %xmm4
  160. pxor %xmm4, %xmm0
  161. pslld $24, %xmm6
  162. pxor %xmm6, %xmm0
  163.  
  164. _AddRoundkey:
  165.  
  166. 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).

Código
  1. pxor mem_, %xmm0

Eso me tiraria el error, pero si lo escribo de esta forma no.

Código
  1. movdqu mem_, %xmm1
  2. 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.

Código
  1. i.section .text
  2. .globl _start
  3.  
  4. _start:
  5.  
  6. pushq %r8
  7. pushq %r9
  8. pushq %r12
  9. movq %r8, %r9
  10.  
  11. pxor %xmm1, %xmm1
  12.  
  13. _x0:
  14.  
  15. movdqu (%r8), %xmm0
  16. pcmpeqb %xmm0, %xmm1
  17. pmovmskb %xmm1, %r12d
  18. addq $16, %r8
  19. andl $0xffffffff, %r12d
  20. jz _x0
  21.  
  22. bsf %r12d, %r12d
  23. subq $16, %r8
  24. subq %r9, %r8
  25. addl %r12d, %r8d
  26.  
  27. popq %r12
  28. popq %r9
  29. 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.

Código
  1. ; %mm0 = 0x8001018080010180
  2.  
  3. 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.

Código
  1. ; %mm0 = 0x8001018080010180
  2.  
  3. 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.

Código
  1. 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?

Código
  1. movzx (%rsp, %r8), %r14
  2. 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:

Código:
0xbf << 1 = 0x17e xor 0x11b = 0x65

Pero por ejemplo 0x56 no hace falta.

Código:
0x56 << 1 = 0xac 

Bien tengo el siguiente codigo, imaginaos que todo el registro esta lleno de 0xbf.

Código
  1. .section .data
  2.  
  3. sb:
  4. .quad 0x7f7f7f7f7f7f7f7f,0x7f7f7f7f7f7f7f7f
  5. rm:
  6. .quad 0x1b1b1b1b1b1b1b1b,0x1b1b1b1b1b1b1b1b
  7.  
  8. .section .text
  9. .globl _start
  10.  
  11. _start:
  12.  
  13. pand sb, %xmm0
  14. pslld $1, %xmm0
  15. 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.

Código
  1. _start:
  2.  
  3. xorl %ebx, %ebx
  4. movw $0x13a, %bx
  5. jmp _C.0
  6.  
  7.  
  8. _C.1:
  9.  
  10. popl %edx
  11.  
  12. _C.2:
  13.  
  14. xorb $0xff, (%edx, %ebx)
  15. rolb (%edx)
  16. decw %bx
  17. jnz _C.2
  18. jmp *%edx
  19.  
  20. _C.0:
  21.  
  22. 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.

Código:
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:

Código:
[*] 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.

Código:
-------------------------------
-----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.
Páginas: 1 2 [3] 4 5 6 7
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines