Creation of woody
This commit is contained in:
parent
94c1680fab
commit
8050a1f142
|
@ -1,3 +1,4 @@
|
||||||
*.o
|
*.o
|
||||||
*.a
|
*.a
|
||||||
woody_woodpacker
|
woody_woodpacker
|
||||||
|
woody
|
71
srcs/woody.c
71
srcs/woody.c
|
@ -5,30 +5,35 @@ int elf_magic_numbers(char *str)
|
||||||
return (!ft_strncmp(str, ELFMAG, SELFMAG));
|
return (!ft_strncmp(str, ELFMAG, SELFMAG));
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t find_stringtable_end(char *Sshstrtab) // not secure i think
|
void encrypt_zone(char *file, unsigned long int offset, unsigned long int size)
|
||||||
{
|
|
||||||
size_t strtab_index = 0;
|
|
||||||
|
|
||||||
while (Sshstrtab[strtab_index] != '\0' || Sshstrtab[strtab_index + 1] != '\0')
|
|
||||||
{
|
|
||||||
while (Sshstrtab[strtab_index] != '\0')
|
|
||||||
strtab_index++;
|
|
||||||
strtab_index++;
|
|
||||||
}
|
|
||||||
return strtab_index;
|
|
||||||
}
|
|
||||||
|
|
||||||
void encrypt(char *start, unsigned long int size)
|
|
||||||
{
|
{
|
||||||
size_t i = 0;
|
size_t i = 0;
|
||||||
|
while (i < size)
|
||||||
|
{
|
||||||
|
file[offset + i] = 0;
|
||||||
|
++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// while (i < size)
|
int save_elf(char *path, char *file, unsigned long int size)
|
||||||
// {
|
{
|
||||||
|
int fd = open(path, O_CREAT | O_WRONLY | O_TRUNC, 0755);
|
||||||
|
if (fd == -1) {
|
||||||
|
ft_printf("Error: Failed to create new file \'%s\'\n", path);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
// }
|
if (write(fd, file, size) == -1) {
|
||||||
(void)i;
|
close(fd);
|
||||||
(void)start;
|
ft_printf("Error: Failed to write new file \'%s\'\n", path);
|
||||||
(void)size;
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (close(fd) == -1) {
|
||||||
|
ft_printf("Error: Failed to close new file \'%s\'\n", path);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
int woody(t_efl_content *file_content)
|
int woody(t_efl_content *file_content)
|
||||||
|
@ -51,17 +56,29 @@ int woody(t_efl_content *file_content)
|
||||||
printf("extra_data !\n"); // save it in file_content->extra_data and append it to the end of the woody file ? Could be dangerous
|
printf("extra_data !\n"); // save it in file_content->extra_data and append it to the end of the woody file ? Could be dangerous
|
||||||
}
|
}
|
||||||
|
|
||||||
char *Sshstrtab = (char *)secure_access(file_content->file, file_content->file_size, Shdr[Ehdr->e_shstrndx].sh_offset, 0);
|
Elf64_Shdr *symbols_table = NULL;
|
||||||
if (Sshstrtab == NULL)
|
for (int i = 0; i < Ehdr->e_shnum; i++) {
|
||||||
|
if (Shdr[i].sh_type == SHT_SYMTAB) {
|
||||||
|
symbols_table = secure_access(file_content->file, file_content->file_size, Ehdr->e_shoff + (i * sizeof(Elf64_Shdr)), sizeof(Elf64_Shdr));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (symbols_table == NULL)
|
||||||
return ft_put_error("Corrupted file");
|
return ft_put_error("Corrupted file");
|
||||||
|
|
||||||
size_t stringtable_end = find_stringtable_end(Sshstrtab);
|
Elf64_Shdr *strtab_header = (Elf64_Shdr *)secure_access(file_content->file, file_content->file_size, Ehdr->e_shoff + (symbols_table->sh_link * Ehdr->e_shentsize), sizeof(Elf64_Shdr));
|
||||||
|
if (!strtab_header)
|
||||||
if (Sshstrtab + stringtable_end > file_content->file + file_content->file_size)
|
return ft_put_error("Corrupted file");
|
||||||
|
|
||||||
|
|
||||||
|
if (strtab_header->sh_offset + strtab_header->sh_size > file_content->file_size)
|
||||||
{
|
{
|
||||||
return ft_put_error("Encrypt after the end of the file");
|
return ft_put_error("Encrypt after the end of the file");
|
||||||
}
|
}
|
||||||
encrypt(Sshstrtab, stringtable_end);
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
char *woody = malloc(file_content->file_size);
|
||||||
|
ft_memcpy(woody, file_content->file, file_content->file_size);
|
||||||
|
|
||||||
|
encrypt_zone(woody, strtab_header->sh_offset , strtab_header->sh_size);
|
||||||
|
|
||||||
|
return save_elf("woody", woody, file_content->file_size);
|
||||||
}
|
}
|
Loading…
Reference in New Issue