Permalink
Please sign in to comment.
Showing
with
285 additions
and 275 deletions.
- +52 −51 kaslr.c
- +62 −60 memdump.c
- +51 −51 memory_filler.c
- +39 −33 physical_reader.c
- +47 −45 secret.c
- +34 −35 test.c
@@ -1,58 +1,59 @@ | ||
+#include "libkdump.h" | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
-#include "libkdump.h" | ||
+int main(int argc, char *argv[]) { | ||
+ size_t scratch[4096]; | ||
+ libkdump_config_t config; | ||
+ size_t offset = 0xffff880000000000ull; | ||
+ size_t step = 0x1000000000ll; | ||
+ size_t delta = -2 * step; | ||
+ int progress = 0; | ||
-int main(int argc, char* argv[]) { | ||
- size_t scratch[4096]; | ||
- libkdump_config_t config; | ||
- size_t offset = 0xffff880000000000ull; | ||
- size_t step = 0x1000000000ll; | ||
- size_t delta = -2 * step; | ||
- int progress = 0; | ||
- | ||
- libkdump_enable_debug(0); | ||
- | ||
- config = libkdump_get_autoconfig(); | ||
- config.retries = 10; | ||
- config.measurements = 1; | ||
- | ||
- libkdump_init(config); | ||
- | ||
- | ||
- size_t var = (size_t)(scratch + 2048); | ||
- *(char*)var = 'X'; | ||
- | ||
- size_t start = libkdump_virt_to_phys(var); | ||
- if(!start) { | ||
- printf("\x1b[31;1m[!]\x1b[0m Program requires root privileges (or read access to /proc/<pid>/pagemap)!\n"); | ||
- exit(1); | ||
- } | ||
- | ||
- while(1) { | ||
- *(volatile char*)var = 'X'; | ||
- *(volatile char*)var = 'X'; | ||
- *(volatile char*)var = 'X'; | ||
- *(volatile char*)var = 'X'; | ||
- *(volatile char*)var = 'X'; | ||
- | ||
- int res = libkdump_read(start + offset + delta); | ||
- if(res == 'X') { | ||
- printf("\r\x1b[32;1m[+]\x1b[0m Direct physical map offset: \x1b[33;1m0x%zx\x1b[0m\n", offset + delta); | ||
- fflush(stdout); | ||
- break; | ||
- } else { | ||
- delta += step; | ||
- if(delta >= -1ull - offset) { | ||
- delta = 0; | ||
- step >>= 4; | ||
- } | ||
- printf("\r\x1b[34;1m[%c]\x1b[0m 0x%zx ", "/-\\|"[(progress++ / 400) % 4], offset + delta); | ||
- } | ||
+ libkdump_enable_debug(0); | ||
+ | ||
+ config = libkdump_get_autoconfig(); | ||
+ config.retries = 10; | ||
+ config.measurements = 1; | ||
+ | ||
+ libkdump_init(config); | ||
+ | ||
+ size_t var = (size_t)(scratch + 2048); | ||
+ *(char *)var = 'X'; | ||
+ | ||
+ size_t start = libkdump_virt_to_phys(var); | ||
+ if (!start) { | ||
+ printf("\x1b[31;1m[!]\x1b[0m Program requires root privileges (or read " | ||
+ "access to /proc/<pid>/pagemap)!\n"); | ||
+ exit(1); | ||
+ } | ||
+ | ||
+ while (1) { | ||
+ *(volatile char *)var = 'X'; | ||
+ *(volatile char *)var = 'X'; | ||
+ *(volatile char *)var = 'X'; | ||
+ *(volatile char *)var = 'X'; | ||
+ *(volatile char *)var = 'X'; | ||
+ | ||
+ int res = libkdump_read(start + offset + delta); | ||
+ if (res == 'X') { | ||
+ printf("\r\x1b[32;1m[+]\x1b[0m Direct physical map offset: " | ||
+ "\x1b[33;1m0x%zx\x1b[0m\n", | ||
+ offset + delta); | ||
+ fflush(stdout); | ||
+ break; | ||
+ } else { | ||
+ delta += step; | ||
+ if (delta >= -1ull - offset) { | ||
+ delta = 0; | ||
+ step >>= 4; | ||
+ } | ||
+ printf("\r\x1b[34;1m[%c]\x1b[0m 0x%zx ", | ||
+ "/-\\|"[(progress++ / 400) % 4], offset + delta); | ||
} | ||
+ } | ||
+ | ||
+ libkdump_cleanup(); | ||
- libkdump_cleanup(); | ||
- | ||
- return 0; | ||
+ return 0; | ||
} | ||
- |
@@ -1,70 +1,72 @@ | ||
+#include "libkdump.h" | ||
#include <stdio.h> | ||
#include <stdlib.h> | ||
-#include "libkdump.h" | ||
-int main(int argc, char* argv[]) { | ||
- size_t phys = 1ull * 1024ull * 1024ull * 1024ull; // start at first gigabyte | ||
- if(argc >= 2) { | ||
- phys = strtoull(argv[1], NULL, 0); | ||
- } | ||
- | ||
- int width = 16; // characters per line | ||
- int suppress_empty = 1; | ||
- | ||
- libkdump_config_t config; | ||
- config = libkdump_get_autoconfig(); | ||
- config.retries = 10; | ||
- config.measurements = 2; | ||
- if(argc >= 3) { | ||
- config.physical_offset = strtoull(argv[2], NULL, 0); | ||
- } | ||
+int main(int argc, char *argv[]) { | ||
+ size_t phys = 1ull * 1024ull * 1024ull * 1024ull; // start at first gigabyte | ||
+ if (argc >= 2) { | ||
+ phys = strtoull(argv[1], NULL, 0); | ||
+ } | ||
+ | ||
+ int width = 16; // characters per line | ||
+ int suppress_empty = 1; | ||
+ | ||
+ libkdump_config_t config; | ||
+ config = libkdump_get_autoconfig(); | ||
+ config.retries = 10; | ||
+ config.measurements = 2; | ||
+ if (argc >= 3) { | ||
+ config.physical_offset = strtoull(argv[2], NULL, 0); | ||
+ } | ||
- libkdump_init(config); | ||
- | ||
- size_t vaddr = libkdump_phys_to_virt(phys); | ||
+ libkdump_init(config); | ||
- printf("\x1b[32;1m[+]\x1b[0m Physical address : \x1b[33;1m0x%zx\x1b[0m\n", phys); | ||
- printf("\x1b[32;1m[+]\x1b[0m Physical offset : \x1b[33;1m0x%zx\x1b[0m\n\n", config.physical_offset); | ||
- | ||
- size_t delta = 0; | ||
- int i; | ||
- char* buffer = malloc(width); | ||
- | ||
- while(1) { | ||
- int value = libkdump_read(vaddr + delta); | ||
- buffer[delta % width] = value; | ||
- | ||
- if(delta % width == width - 1) { | ||
- int skip = 1; | ||
- for(i = 0; i < width; i++) { | ||
- if(buffer[i]) { | ||
- skip = 0; | ||
- break; | ||
- } | ||
- } | ||
- if(skip && suppress_empty) { | ||
- delta++; | ||
- continue; | ||
- } | ||
- | ||
- printf("%10zx: ", delta + phys); | ||
- printf("| "); | ||
- for(i = 0; i < width; i++) { | ||
- printf("%02x ", (unsigned char)buffer[i]); | ||
- } | ||
- printf("| "); | ||
- for(i = 0; i < width; i++) { | ||
- printf("%c", (buffer[i] >= 32 && buffer[i] <= 126) ? buffer[i] : '.'); | ||
- } | ||
- printf(" |\n"); | ||
- | ||
+ size_t vaddr = libkdump_phys_to_virt(phys); | ||
+ | ||
+ printf( | ||
+ "\x1b[32;1m[+]\x1b[0m Physical address : \x1b[33;1m0x%zx\x1b[0m\n", | ||
+ phys); | ||
+ printf("\x1b[32;1m[+]\x1b[0m Physical offset : " | ||
+ "\x1b[33;1m0x%zx\x1b[0m\n\n", | ||
+ config.physical_offset); | ||
+ | ||
+ size_t delta = 0; | ||
+ int i; | ||
+ char *buffer = malloc(width); | ||
+ | ||
+ while (1) { | ||
+ int value = libkdump_read(vaddr + delta); | ||
+ buffer[delta % width] = value; | ||
+ | ||
+ if (delta % width == width - 1) { | ||
+ int skip = 1; | ||
+ for (i = 0; i < width; i++) { | ||
+ if (buffer[i]) { | ||
+ skip = 0; | ||
+ break; | ||
} | ||
+ } | ||
+ if (skip && suppress_empty) { | ||
delta++; | ||
+ continue; | ||
+ } | ||
+ | ||
+ printf("%10zx: ", delta + phys); | ||
+ printf("| "); | ||
+ for (i = 0; i < width; i++) { | ||
+ printf("%02x ", (unsigned char)buffer[i]); | ||
+ } | ||
+ printf("| "); | ||
+ for (i = 0; i < width; i++) { | ||
+ printf("%c", (buffer[i] >= 32 && buffer[i] <= 126) ? buffer[i] : '.'); | ||
+ } | ||
+ printf(" |\n"); | ||
} | ||
+ delta++; | ||
+ } | ||
+ | ||
+ free(buffer); | ||
+ libkdump_cleanup(); | ||
- | ||
- free(buffer); | ||
- libkdump_cleanup(); | ||
- | ||
- return 0; | ||
+ return 0; | ||
} |
102
memory_filler.c

Oops, something went wrong.
0 comments on commit
2965178