Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: YST en 25 Junio 2009, 06:13 am



Título: [Duda]Problema de tamaños
Publicado por: YST 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.  


Título: Re: [Duda]Problema de tamaños
Publicado por: YST 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


Título: Re: [Duda]Problema de tamaños
Publicado por: Yurix en 25 Junio 2009, 18:14 pm
Gracias , así lo hago yo !!! ;D


Saludos y sigue así


Título: Re: [Duda]Problema de tamaños
Publicado por: YST en 25 Junio 2009, 22:24 pm
así lo hago yo !!! ;D
jaja :xD