Base64 pour Linux x32

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
format ELF executable 3
entry start
 
include 'include/linux/lin32a.inc'
include 'base64.inc'
 
interpreter '/lib/ld-linux.so.2'
needed 'libc.so.6'
 
import printf
 
;-------------------------------------------------------------------------
segment readable executable
;-------------------------------------------------------------------------
 
start:
 
	mov	edx,S_IRU
	mov	ecx,O_RD
	mov	ebx,fpath1
	mov	eax,_open
	int	0x80
	mov	[fd1],eax
 
	mov	edx,S_IRWU
	mov	ecx,O_CREAT or O_RDWR
	mov	ebx,fpath2
	mov	eax,_open
	int	0x80
	mov	[fd2],eax
 
	mov	ecx,statbuf
	mov	ebx,fpath1
	mov	eax,_stat
	int	0x80
 
	mov	edx,dword [statbuf+20]
	mov	ecx,readbuf
	mov	ebx,[fd1]
	mov	eax,_read
	int	0x80
 
	stdcall	cBase64,readbuf,writebuf,writebuflen
;	stdcall	dBase64,readbuf,writebuf,writebuflen
 
	mov	edx,[writebuflen]
	mov	ecx,writebuf
	mov	ebx,[fd2]
	mov	eax,_write
	int	0x80
 
	xor	ebx,ebx
	mov	eax,_exit
	int	0x80
 
;-------------------------------------------------------------------------
segment readable writeable
;-------------------------------------------------------------------------
 
fd1 dd 0
fd2 dd 0
 
fpath1 db 'test.txt',0
fpath2 db 'file64.txt',0
 
;fpath1 db 'file64.txt',0
;fpath2 db 'test.txt',0
 
statbuf rb 144
readbuf rb 1024
writebuf rb 1024
writebuflen dd 0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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