Работает без использования машины времени.
/*
* $ gcc hack.c -o hack
* # ./hack <смещение в секундах>
* например # ./hack 86400 добавит одни сутки
*/
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/time.h>
int main(int argc, char *argv[]) {
if(argc < 2) {
printf("Usage: %s <change in seconds>\n", argv[0]);
return 1;
}
int off = atoi(argv[1]);
size_t address;
char line[256];
FILE* ksyms = fopen("/proc/kallsyms", "r");
while(fgets(line, sizeof(line), ksyms))
if(strstr(line, " wall_to_monotonic")) {
sscanf(line, "%zx", &address);
break;
}
fclose(ksyms);
if(!address) {
fprintf(stderr, "[-] wall_to_monotonic not found\n");
exit(1);
}
printf("[+] wall_to_monotonic: %lx\n", address);
int hndl = open("/dev/kmem", O_RDWR);
if(hndl == -1) {
perror("[-] open");
return 1;
}
printf("[+] open\n");
void *ptr = mmap(NULL, 0x2000, PROT_READ | PROT_WRITE, MAP_SHARED, hndl, address & ~0x0FFF);
if(ptr == MAP_FAILED) {
perror("[-] mmap");
return 1;
}
printf("[+] mmap\n");
struct timespec *ts = (ptr + (address & 0xFFF));
ts->tv_sec += off;
printf("[+] patch\n");
munmap(ptr, 0x2000);
close(hndl);
}

Ответ на:
комментарий
от klalafuda


Ответ на:
комментарий
от wfrr
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Как MAP_GROWSDOWN в mmap? (2018)
- Форум математика (2005)
- Форум Простейший вопрос - свои первые строчки на C. Где argv ? (2004)
- Форум Потестируем инкремент! (2005)
- Форум Не понимаю почему не работает (2013)
- Форум fcloseall не работает (2015)
- Форум Что происходит в этом коде (2014)
- Форум что не так в использовании структуры (2008)
- Форум Как изменить максимальное число открытых файлов ? (2006)
- Форум Почему при использовании -std=c99выводит, что S_IFDIR не описан? (2010)