1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170
|
;-------------------------------------------------------------------------
segment readable executable
;-------------------------------------------------------------------------
proc cBase64 inbuf,outbuf,outbuflen
mov esi,[inbuf]
mov edi,[outbuf]
mov ecx,[outbuflen]
@re:
or byte [esi],0
jz @end
add dword [ecx],4
xor eax,eax
or byte [esi+2],0
jz @f
mov al,byte [esi]
inc esi
ror eax,8
mov ax,word [esi]
add esi,2
bswap eax
call Encode
mov dword [edi],eax
add edi,4
jmp @re
@@:
or byte [esi+1],0
jz @f
mov ax,word [esi]
add esi,2
ror ax,8
ror eax,8
call Encode
rol eax,8
mov al,0x3d
ror eax,8
mov dword [edi],eax
add edi,4
jmp @re
@@:
mov al,byte [esi]
inc esi
call Encode
rol eax,16
mov ax,0x3d3d
ror eax,16
mov dword [edi],eax
add edi,4
jmp @re
@end:
ret
endp
proc Encode
push ecx
xor ecx,ecx
mov cl,4
@@:
xor ebx,ebx
mov bl,al
shr bl,2
rol eax,6
mov dl,byte [base64+ebx]
ror edx,8
dec cl
jnz @b
mov eax,edx
pop ecx
ret
endp
proc dBase64 inbuf,outbuf,outbuflen
mov esi,[inbuf]
mov edi,[outbuf]
mov ecx,[outbuflen]
@re:
or byte [esi],0
jz @end
or byte [esi+1],0
jz @end
cmp byte [esi+3],0x3d
jz @f
add dword [ecx],3
call Decode
mov word [edi],ax
add edi,2
ror eax,16
mov byte [edi],al
inc edi
jmp @re
@@:
cmp byte [esi+2],0x3d
jz @f
mov byte [esi+3],0
add dword [ecx],2
call Decode
mov word [edi],ax
add edi,2
jmp @re
@@:
mov byte [esi+2],0
add dword [ecx],1
call Decode
mov byte [edi],al
inc edi
jmp @re
@end:
ret
endp
proc Decode
push ecx
mov cl,4
@@:
mov al,byte [esi]
inc esi
call strlen
shl dl,2
mov al,dl
shr eax,2
shl eax,8
dec cl
jnz @b
bswap eax
pop ecx
ret
endp
proc strlen
push edi
push ecx
xor ecx,ecx
mov edi,base64
@@:
inc ecx
inc edi
cmp al,byte [edi]
jnz @b
mov dl,cl
pop ecx
pop edi
ret
endp
base64 db 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,\
0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,0x50,\
0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,\
0x59,0x5a,0x61,0x62,0x63,0x64,0x65,0x66,\
0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,\
0x6f,0x70,0x71,0x72,0x73,0x74,0x75,0x76,\
0x77,0x78,0x79,0x7a,0x30,0x31,0x32,0x33,\
0x34,0x35,0x36,0x37,0x38,0x39,0x2b,0x2f,0 |
Partager