[APORTE] RC4 ASM en linea

Iniciado por Danyfirex, 7 Abril 2013, 03:08 AM

0 Miembros y 1 Visitante están viendo este tema.

Danyfirex

Bueno andaba probando unas cosas y me traduje este cifrado.

Código (vb) [Seleccionar]
' =================================================================
' =================================================================
' => Autor: Pink
' => RC4 ASM en linea
' => Gracias Ward(Version Autoit)
' => Fecha : 01|04|2013
' => Uso: misbytes()=RC4ASM(bytesacifrar(),"clave")
' =================================================================
' =================================================================


Option Explicit

Private Declare Function CallWindowProcW Lib "USER32" (ByVal lpPrevWndFunc As Long, ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long


Public Function RC4ASM(datos() As Byte, pass As String) As Byte()
Dim passbyte() As Byte
Dim B_RC4() As Byte
Dim Str_OP  As String
Dim i As Long

Str_OP = "C81001006A006A005356578B551031C989C84989D7F2AE484829C88945F085C00F84DC000000B90001000088C82C0188840DEFFEFFFFE2F38365F4008365FC00817DFC000100007D478B45FC31D2F775F0920345100FB6008B4DFC0FB68C0DF0FEFFFF01C80345F425FF0000008945F48B75FC8A8435F0FEFFFF8B7DF486843DF0FEFFFF8"
Str_OP = Str_OP & "88435F0FEFFFFFF45FCEBB08D9DF0FEFFFF31FF89FA39550C76638B85ECFEFFFF4025FF0000008985ECFEFFFF89D80385ECFEFFFF0FB6000385E8FEFFFF25FF0000008985E8FEFFFF89DE03B5ECFEFFFF8A0689DF03BDE8FEFFFF860788060FB60E0FB60701C181E1FF0000008A840DF0FEFFFF8B750801D6300642EB985F5E5BC9C21000"
passbyte = StrConv(pass, vbFromUnicode)

ReDim B_RC4((Len(Str_OP) / 2) - 1)
For i = 1 To Len(Str_OP) - 1 Step 2
B_RC4(Int(i / 2)) = CByte("&h" & Mid(Str_OP, i, 2))
Next

CallWindowProcW VarPtr(B_RC4(0)), VarPtr(datos(0)), UBound(datos) + 1, VarPtr(passbyte(0)), 0

RC4ASM = datos()

End Function


Saludos

Psyke1

Estaría guay que pusieras comentado el código en ensamblador.

DoEvents! :P

Danyfirex

Cita de: Psyke1 en 14 Abril 2013, 13:31 PM
Estaría guay que pusieras comentado el código en ensamblador.

DoEvents! :P

@Psyke1 sabes que soy novato en la programación ¬¬ :S
No se mucho de ASM.  :silbar: por eso dice traducción. el OP-code no es creado por mi.

Pero cuando tenga los conocimientos lo haré. saludos


Psyke1

Culpa mía que no leí bien el post.  :-[

DoEvents! :P

MCKSys Argentina

El código ASM es el siguiente (de Olly):

Código (asm) [Seleccionar]

0053F400  /$  C8 1001 00          ENTER 110,0
0053F404  |.  6A 00               PUSH 0
0053F406  |.  6A 00               PUSH 0
0053F408  |.  53                  PUSH EBX
0053F409  |.  56                  PUSH ESI
0053F40A  |.  57                  PUSH EDI
0053F40B  |.  8B55 10             MOV EDX,DWORD PTR SS:[EBP+10]
0053F40E  |.  31C9                XOR ECX,ECX
0053F410  |.  89C8                MOV EAX,ECX
0053F412  |.  49                  DEC ECX
0053F413  |.  89D7                MOV EDI,EDX
0053F415  |.  F2:AE               REPNE SCAS BYTE PTR ES:[EDI]
0053F417  |.  48                  DEC EAX
0053F418  |.  48                  DEC EAX
0053F419  |.  29C8                SUB EAX,ECX
0053F41B  |.  8945 F0             MOV DWORD PTR SS:[EBP-10],EAX
0053F41E  |.  85C0                TEST EAX,EAX
0053F420  |.  0F84 DC000000       JZ 0053F502
0053F426  |.  B9 00010000         MOV ECX,100
0053F42B  |>  88C8                /MOV AL,CL
0053F42D  |.  2C 01               |SUB AL,1
0053F42F  |.  88840D EFFEFFFF     |MOV BYTE PTR SS:[ECX+EBP-111],AL
0053F436  |.^ E2 F3               \LOOP SHORT 0053F42B
0053F438  |.  8365 F4 00          AND DWORD PTR SS:[EBP-0C],00000000
0053F43C  |.  8365 FC 00          AND DWORD PTR SS:[EBP-4],00000000
0053F440  |>  817D FC 00010000    /CMP DWORD PTR SS:[EBP-4],100
0053F447  |.  7D 47               |JGE SHORT 0053F490
0053F449  |.  8B45 FC             |MOV EAX,DWORD PTR SS:[EBP-4]
0053F44C  |.  31D2                |XOR EDX,EDX
0053F44E  |.  F775 F0             |DIV DWORD PTR SS:[EBP-10]
0053F451  |.  92                  |XCHG EAX,EDX
0053F452  |.  0345 10             |ADD EAX,DWORD PTR SS:[EBP+10]
0053F455  |.  0FB600              |MOVZX EAX,BYTE PTR DS:[EAX]
0053F458  |.  8B4D FC             |MOV ECX,DWORD PTR SS:[EBP-4]
0053F45B  |.  0FB68C0D F0FEFFFF   |MOVZX ECX,BYTE PTR SS:[ECX+EBP-110]
0053F463  |.  01C8                |ADD EAX,ECX
0053F465  |.  0345 F4             |ADD EAX,DWORD PTR SS:[EBP-0C]
0053F468  |.  25 FF000000         |AND EAX,000000FF
0053F46D  |.  8945 F4             |MOV DWORD PTR SS:[EBP-0C],EAX
0053F470  |.  8B75 FC             |MOV ESI,DWORD PTR SS:[EBP-4]
0053F473  |.  8A8435 F0FEFFFF     |MOV AL,BYTE PTR SS:[ESI+EBP-110]
0053F47A  |.  8B7D F4             |MOV EDI,DWORD PTR SS:[EBP-0C]
0053F47D  |.  86843D F0FEFFFF     |XCHG BYTE PTR SS:[EDI+EBP-110],AL
0053F484  |.  888435 F0FEFFFF     |MOV BYTE PTR SS:[ESI+EBP-110],AL
0053F48B  |.  FF45 FC             |INC DWORD PTR SS:[EBP-4]
0053F48E  |.^ EB B0               \JMP SHORT 0053F440
0053F490  |>  8D9D F0FEFFFF       LEA EBX,[EBP-110]
0053F496  |.  31FF                XOR EDI,EDI
0053F498  |.  89FA                MOV EDX,EDI
0053F49A  |>  3955 0C             /CMP DWORD PTR SS:[EBP+0C],EDX
0053F49D  |.  76 63               |JBE SHORT 0053F502
0053F49F  |.  8B85 ECFEFFFF       |MOV EAX,DWORD PTR SS:[EBP-114]
0053F4A5  |.  40                  |INC EAX
0053F4A6  |.  25 FF000000         |AND EAX,000000FF
0053F4AB  |.  8985 ECFEFFFF       |MOV DWORD PTR SS:[EBP-114],EAX
0053F4B1  |.  89D8                |MOV EAX,EBX
0053F4B3  |.  0385 ECFEFFFF       |ADD EAX,DWORD PTR SS:[EBP-114]
0053F4B9  |.  0FB600              |MOVZX EAX,BYTE PTR DS:[EAX]
0053F4BC  |.  0385 E8FEFFFF       |ADD EAX,DWORD PTR SS:[EBP-118]
0053F4C2  |.  25 FF000000         |AND EAX,000000FF
0053F4C7  |.  8985 E8FEFFFF       |MOV DWORD PTR SS:[EBP-118],EAX
0053F4CD  |.  89DE                |MOV ESI,EBX
0053F4CF  |.  03B5 ECFEFFFF       |ADD ESI,DWORD PTR SS:[EBP-114]
0053F4D5  |.  8A06                |MOV AL,BYTE PTR DS:[ESI]
0053F4D7  |.  89DF                |MOV EDI,EBX
0053F4D9  |.  03BD E8FEFFFF       |ADD EDI,DWORD PTR SS:[EBP-118]
0053F4DF  |.  8607                |XCHG BYTE PTR DS:[EDI],AL
0053F4E1  |.  8806                |MOV BYTE PTR DS:[ESI],AL
0053F4E3  |.  0FB60E              |MOVZX ECX,BYTE PTR DS:[ESI]
0053F4E6  |.  0FB607              |MOVZX EAX,BYTE PTR DS:[EDI]
0053F4E9  |.  01C1                |ADD ECX,EAX
0053F4EB  |.  81E1 FF000000       |AND ECX,000000FF
0053F4F1  |.  8A840D F0FEFFFF     |MOV AL,BYTE PTR SS:[ECX+EBP-110]
0053F4F8  |.  8B75 08             |MOV ESI,DWORD PTR SS:[EBP+8]
0053F4FB  |.  01D6                |ADD ESI,EDX
0053F4FD  |.  3006                |XOR BYTE PTR DS:[ESI],AL
0053F4FF  |.  42                  |INC EDX
0053F500  |.^ EB 98               \JMP SHORT 0053F49A
0053F502  |>  5F                  POP EDI
0053F503  |.  5E                  POP ESI
0053F504  |.  5B                  POP EBX
0053F505  |.  C9                  LEAVE
0053F506  \.  C2 1000             RETN 10


Las direcciones de memoria son indiferentes. El código funciona en cualquiera.

Explicación: https://es.wikipedia.org/wiki/RC4

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


Karcrack


Danyfirex

@MCKSys Argentina  & @Karcrack jajaja me pillaron. las dos formas las conocía, me gano la pereza "=flojera"   ;D gracias compas.