Работает без использования машины времени. /* * $ 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)