Autor
|
Tema: [Duda]Problema de tamaños (Leído 3,422 veces)
|
YST
Desconectado
Mensajes: 965
I'm you
|
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 ) no puede ser un dword haber si alguien me ayuda a solucionar el problema include 'win32ax.inc' .data cBuffer db 'Hola',0 cClave db 'Hola',0 s db 257 dup(0) b rb 20 largo dd ? .code start: stdcall Len,cBuffer dec eax push eax pop [largo] ; For i = 0 To 255 ; DoEvents ; s(i) = i ; Next i mov eax,s mov byte[eax],0 inc eax mov ecx,256 .bucle1_: mov bl,byte[eax-1] inc bl mov byte[eax] ,bl inc eax loop .bucle1_ ; For i = 0 To 255 ; DoEvents ; j = (j + s(i) + Key(i Mod Len(sKey))) Mod 256 ; tmp = s(i) ; s(i) = s(j) ; s(j) = tmp ; Next i ;j = ebx ;ja = esi ;I = edi xor ebx,ebx mov edi,-1 .bucle2_: inc edi xor esi,esi mov esi,ebx movzx eax,byte[s+edi] add esi,eax stdcall lMod,edi,<stdcall Len,cClave> movzx eax,byte[cClave+eax] add esi,eax stdcall lMod,esi,256 mov ebx, eax mov eax,s mov cl,byte[eax+ebx] ; s(j) mov ch,byte[eax+edi] ; s(i) mov byte[eax+edi],cl mov byte[eax+ebx],ch cmp edi,255 jne .bucle2_ inc edi ; For l = 0 To UBound(Buffer) ; DoEvents ; i = (i + 1) Mod 256 ; j = (j + s(i)) Mod 256 ; tmp = s(i) ; s(i) = s(j) ; s(j) = tmp ; Buffer(l) = Buffer(l) Xor (s((s(i) + s(j)) Mod 256)) ; Next l xor esi,esi ;esi = l dec esi ; esi = -1 .bucle3_: inc esi mov eax,edi inc eax stdcall lMod,eax,256 mov edi,eax mov eax,ebx xor ecx,ecx movzx ecx,byte[s+edi] add eax,ecx stdcall lMod,eax,256 mov ebx,eax mov eax,s mov cl,byte[eax+ebx] ; s(j) mov ch,byte[eax+edi] ; s(i) mov byte[eax+edi],cl mov byte[eax+ebx],ch mov eax,cBuffer add cl,ch movzx eax,cl add eax,s stdcall lMod,eax,256 mov edx,cBuffer xor byte[edx+esi],eax ; EL Problema esta aqui cmp esi,[largo] jne .bucle3_ invoke ExitProcess,0 proc lMod,c1,c2 push edx xor edx,edx mov eax,[c1] idiv [c2] push edx pop eax pop edx ret endp proc Len,cCadena ;Funcion que mide la cadena push ecx edi mov ecx,-1 mov edi,[cCadena] mov al,0 repnz scasb mov eax,ecx not eax dec eax pop edi ecx ret endp .end start
|
|
|
En línea
|
Yo le enseñe a Kayser a usar objetos en ASM
|
|
|
YST
Desconectado
Mensajes: 965
I'm you
|
Ya solucione el error terminando el algoritmo de cifrado include 'win32ax.inc' .data cBuffer db 'Hello world',0 cPassword db 'Password',0 .code start: stdcall Len,cPassword mov ebx,eax stdcall Len,cBuffer stdcall RC4,cBuffer,cPassword,eax,ebx invoke MessageBox,0,cBuffer,0,0 invoke ExitProcess,0 proc RC4,pBuffer,pPassword,pTamñoBuffer,pTamPass locals s rb MAX_PATH endl pushad dec [pTamñoBuffer] ; For i = 0 To 255 ; DoEvents ; s(i) = i ; Next i lea eax,[s] mov byte[eax],0 inc eax mov ecx,256 .bucle1_: mov bl,byte[eax-1] inc bl mov byte[eax] ,bl inc eax loop .bucle1_ ; For i = 0 To 255 ; DoEvents ; j = (j + s(i) + Key(i Mod Len(sKey))) Mod 256 ; tmp = s(i) ; s(i) = s(j) ; s(j) = tmp ; Next i ;j = ebx ;ja = esi ;I = edi xor ebx,ebx mov edi,-1 .bucle2_: inc edi xor esi,esi mov esi,ebx movzx eax,byte[s+edi] add esi,eax stdcall lMod,edi,[pTamPass] mov ecx,[pPassword] movzx eax,byte[ecx+eax] add esi,eax stdcall lMod,esi,256 mov ebx, eax lea eax,[s] mov cl,byte[eax+ebx] ; s(j) mov ch,byte[eax+edi] ; s(i) mov byte[eax+edi],cl mov byte[eax+ebx],ch cmp edi,255 jne .bucle2_ inc edi ; For l = 0 To UBound(Buffer) ; DoEvents ; i = (i + 1) Mod 256 ; j = (j + s(i)) Mod 256 ; tmp = s(i) ; s(i) = s(j) ; s(j) = tmp ; Buffer(l) = Buffer(l) Xor (s((s(i) + s(j)) Mod 256)) ; Next l xor esi,esi ;esi = l dec esi ; esi = -1 .bucle3_: inc esi mov eax,edi inc eax stdcall lMod,eax,256 mov edi,eax mov eax,ebx xor ecx,ecx movzx ecx,byte[s+edi] add eax,ecx stdcall lMod,eax,256 mov ebx,eax lea eax,[s] mov cl,byte[eax+ebx] ; s(j) mov ch,byte[eax+edi] ; s(i) mov byte[eax+edi],cl mov byte[eax+ebx],ch mov eax,[pBuffer] add cl,ch movzx eax,cl lea edx,[s] add eax,edx movzx eax,byte[eax] stdcall lMod,eax,256 mov edx,[pBuffer] xor byte[edx+esi],al cmp esi,[pTamñoBuffer] jne .bucle3_ popad ret endp proc lMod,c1,c2 push edx xor edx,edx mov eax,[c1] idiv [c2] push edx pop eax pop edx ret endp proc Len,cCadena push ecx edi mov ecx,-1 mov edi,[cCadena] mov al,0 repnz scasb mov eax,ecx not eax dec eax pop edi ecx ret endp .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
Mensajes: 72
Paz para la guerra y guerra por la paz
|
Gracias , así lo hago yo !!! Saludos y sigue así
|
|
|
En línea
|
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
tamaños swap
GNU/Linux
|
linuxos
|
4
|
2,582
|
24 Octubre 2011, 17:54 pm
por orvtech
|
|
|
Dibujar e inicializar tablero de posibles distintos tamaños en C [?]
« 1 2 3 4 5 »
Programación C/C++
|
dragonlady
|
45
|
13,786
|
9 Junio 2015, 00:28 am
por 0xFer
|
|
|
Duda con WinForms y correcta adaptación a varios tamaños de pantalla
.NET (C#, VB.NET, ASP)
|
RevolucionVegana
|
4
|
4,372
|
2 Julio 2017, 09:52 am
por RevolucionVegana
|
|
|
[Resuelto] Problema con resposive usando varios tamaños
Desarrollo Web
|
madoko
|
3
|
2,787
|
14 Agosto 2017, 17:05 pm
por madoko
|
|
|
Duda - varios tamaños misma imagen en /wp-content/uploads (wordpress)
Desarrollo Web
|
victorius
|
3
|
2,059
|
28 Marzo 2019, 21:38 pm
por victorius
|
|