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

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  ASM (Moderador: Eternal Idol)
| | | |-+  [Duda]Problema de tamaños
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Duda]Problema de tamaños  (Leído 3,400 veces)
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
[Duda]Problema de tamaños
« en: 25 Junio 2009, 06:13 am »

Hola,

pasando el algoritmo de RC4 a asm tengo el siguiente problema y es que al hacer un xor a un byte el otro operando ( o como se diga :xD ) no puede ser un dword haber si alguien me ayuda a solucionar el problema :P

Código
  1.  
  2. include 'win32ax.inc'
  3. .data
  4. cBuffer db 'Hola',0
  5. cClave db 'Hola',0
  6. s db 257 dup(0)
  7. b rb 20
  8. largo dd ?
  9. .code
  10. start:
  11. stdcall Len,cBuffer
  12. dec eax
  13. push eax
  14. pop [largo]
  15. ;   For i = 0 To 255
  16. ; DoEvents
  17. ; s(i) = i
  18. ;   Next i
  19. mov eax,s
  20. mov byte[eax],0
  21. inc eax
  22. mov ecx,256
  23. .bucle1_:
  24. mov bl,byte[eax-1]
  25. inc bl
  26. mov  byte[eax] ,bl
  27. inc eax
  28. loop .bucle1_
  29.  
  30. ;    For i = 0 To 255
  31. ;        DoEvents
  32. ;        j = (j + s(i) + Key(i Mod Len(sKey))) Mod 256
  33. ;        tmp = s(i)
  34. ;        s(i) = s(j)
  35. ;        s(j) = tmp
  36. ;    Next i
  37. ;j = ebx
  38. ;ja = esi
  39. ;I = edi
  40. xor ebx,ebx
  41. mov edi,-1
  42. .bucle2_:
  43. inc edi
  44. xor esi,esi
  45. mov esi,ebx
  46. movzx eax,byte[s+edi]
  47. add esi,eax
  48. stdcall lMod,edi,<stdcall Len,cClave>
  49. movzx eax,byte[cClave+eax]
  50. add esi,eax
  51. stdcall lMod,esi,256
  52. mov ebx, eax
  53. mov eax,s
  54. mov cl,byte[eax+ebx] ; s(j)
  55. mov ch,byte[eax+edi] ; s(i)
  56. mov byte[eax+edi],cl
  57. mov byte[eax+ebx],ch
  58. cmp edi,255
  59. jne .bucle2_
  60. inc edi
  61.  
  62.  
  63. ;   For l = 0 To UBound(Buffer)
  64. ;       DoEvents
  65. ;       i = (i + 1) Mod 256
  66. ;       j = (j + s(i)) Mod 256
  67. ;       tmp = s(i)
  68. ;       s(i) = s(j)
  69. ;       s(j) = tmp
  70. ;       Buffer(l) = Buffer(l) Xor (s((s(i) + s(j)) Mod 256))
  71. ;   Next l
  72. xor esi,esi  ;esi = l
  73. dec esi ; esi = -1
  74. .bucle3_:
  75. inc esi
  76. mov eax,edi
  77. inc eax
  78. stdcall lMod,eax,256
  79. mov edi,eax
  80. mov eax,ebx
  81. xor ecx,ecx
  82. movzx ecx,byte[s+edi]
  83. add eax,ecx
  84. stdcall lMod,eax,256
  85. mov ebx,eax
  86. mov eax,s
  87. mov cl,byte[eax+ebx] ; s(j)
  88. mov ch,byte[eax+edi] ; s(i)
  89. mov byte[eax+edi],cl
  90. mov byte[eax+ebx],ch
  91. mov eax,cBuffer
  92. add cl,ch
  93. movzx eax,cl
  94. add eax,s
  95. stdcall lMod,eax,256
  96. mov edx,cBuffer
  97. xor byte[edx+esi],eax      ; EL Problema esta aqui
  98.  
  99. cmp esi,[largo]
  100. jne .bucle3_
  101.  
  102.  
  103. invoke ExitProcess,0
  104. proc lMod,c1,c2
  105. push edx
  106. xor edx,edx
  107. mov eax,[c1]
  108. idiv [c2]
  109. push edx
  110. pop eax
  111. pop edx
  112. ret
  113. endp
  114.  
  115. proc Len,cCadena   ;Funcion que mide la cadena
  116. push ecx edi
  117. mov ecx,-1
  118. mov edi,[cCadena]
  119. mov al,0
  120. repnz scasb
  121. mov eax,ecx
  122. not eax
  123. dec eax
  124. pop edi ecx
  125. ret
  126. endp
  127. .end start
  128.  


En línea



Yo le enseñe a Kayser a usar objetos en ASM
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [Duda]Problema de tamaños
« Respuesta #1 en: 25 Junio 2009, 06:33 am »

Ya solucione el error terminando el algoritmo de cifrado :P
Código
  1. include 'win32ax.inc'
  2. .data
  3. cBuffer db 'Hello world',0
  4. cPassword db 'Password',0
  5.  
  6.  
  7. .code
  8. start:
  9. stdcall Len,cPassword
  10. mov ebx,eax
  11. stdcall Len,cBuffer
  12. stdcall RC4,cBuffer,cPassword,eax,ebx
  13. invoke MessageBox,0,cBuffer,0,0
  14. invoke ExitProcess,0
  15. proc RC4,pBuffer,pPassword,pTamñoBuffer,pTamPass
  16. locals
  17. s rb MAX_PATH
  18. endl
  19. pushad
  20. dec [pTamñoBuffer]
  21. ;   For i = 0 To 255
  22. ; DoEvents
  23. ; s(i) = i
  24. ;   Next i
  25. lea eax,[s]
  26. mov byte[eax],0
  27. inc eax
  28. mov ecx,256
  29. .bucle1_:
  30. mov bl,byte[eax-1]
  31. inc bl
  32. mov  byte[eax] ,bl
  33. inc eax
  34. loop .bucle1_
  35.  
  36. ;    For i = 0 To 255
  37. ;        DoEvents
  38. ;        j = (j + s(i) + Key(i Mod Len(sKey))) Mod 256
  39. ;        tmp = s(i)
  40. ;        s(i) = s(j)
  41. ;        s(j) = tmp
  42. ;    Next i
  43. ;j = ebx
  44. ;ja = esi
  45. ;I = edi
  46. xor ebx,ebx
  47. mov edi,-1
  48. .bucle2_:
  49. inc edi
  50. xor esi,esi
  51. mov esi,ebx
  52. movzx eax,byte[s+edi]
  53. add esi,eax
  54. stdcall lMod,edi,[pTamPass]
  55. mov ecx,[pPassword]
  56. movzx eax,byte[ecx+eax]
  57. add esi,eax
  58. stdcall lMod,esi,256
  59. mov ebx, eax
  60. lea eax,[s]
  61. mov cl,byte[eax+ebx] ; s(j)
  62. mov ch,byte[eax+edi] ; s(i)
  63. mov byte[eax+edi],cl
  64. mov byte[eax+ebx],ch
  65. cmp edi,255
  66. jne .bucle2_
  67. inc edi
  68.  
  69.  
  70. ;   For l = 0 To UBound(Buffer)
  71. ;       DoEvents
  72. ;       i = (i + 1) Mod 256
  73. ;       j = (j + s(i)) Mod 256
  74. ;       tmp = s(i)
  75. ;       s(i) = s(j)
  76. ;       s(j) = tmp
  77. ;       Buffer(l) = Buffer(l) Xor (s((s(i) + s(j)) Mod 256))
  78. ;   Next l
  79. xor esi,esi  ;esi = l
  80. dec esi ; esi = -1
  81. .bucle3_:
  82. inc esi
  83. mov eax,edi
  84. inc eax
  85. stdcall lMod,eax,256
  86. mov edi,eax
  87. mov eax,ebx
  88. xor ecx,ecx
  89. movzx ecx,byte[s+edi]
  90. add eax,ecx
  91. stdcall lMod,eax,256
  92. mov ebx,eax
  93. lea eax,[s]
  94. mov cl,byte[eax+ebx] ; s(j)
  95. mov ch,byte[eax+edi] ; s(i)
  96. mov byte[eax+edi],cl
  97. mov byte[eax+ebx],ch
  98. mov eax,[pBuffer]
  99. add cl,ch
  100. movzx eax,cl
  101. lea edx,[s]
  102. add eax,edx
  103. movzx eax,byte[eax]
  104. stdcall lMod,eax,256
  105.  
  106. mov edx,[pBuffer]
  107. xor byte[edx+esi],al
  108.  
  109. cmp esi,[pTamñoBuffer]
  110. jne .bucle3_
  111. popad
  112. ret
  113. endp
  114.  
  115. proc lMod,c1,c2
  116. push edx
  117. xor edx,edx
  118. mov eax,[c1]
  119. idiv [c2]
  120. push edx
  121. pop eax
  122. pop edx
  123. ret
  124. endp
  125.  
  126. proc Len,cCadena
  127. push ecx edi
  128. mov ecx,-1
  129. mov edi,[cCadena]
  130. mov al,0
  131. repnz scasb
  132. mov eax,ecx
  133. not eax
  134. dec eax
  135. pop edi ecx
  136. ret
  137. endp
  138. .end start


« Última modificación: 25 Junio 2009, 07:18 am por YST » En línea



Yo le enseñe a Kayser a usar objetos en ASM
Yurix

Desconectado Desconectado

Mensajes: 72


Paz para la guerra y guerra por la paz


Ver Perfil
Re: [Duda]Problema de tamaños
« Respuesta #2 en: 25 Junio 2009, 18:14 pm »

Gracias , así lo hago yo !!! ;D


Saludos y sigue así
En línea



http://kapetres.wordpress.com/ < Mi blog sobre ASM

Parece que alguien no quiere que la info sea liebre >

Alguien lo movio a ese lugar.
YST


Desconectado Desconectado

Mensajes: 965


I'm you


Ver Perfil WWW
Re: [Duda]Problema de tamaños
« Respuesta #3 en: 25 Junio 2009, 22:24 pm »

así lo hago yo !!! ;D
jaja :xD

En línea



Yo le enseñe a Kayser a usar objetos en ASM
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines