Skills:
C++
REST
Reverse Engineering
Research
Support of legacy code

Want to learn:
Machine learning
Data science
More reverse engineering
Computer science
Hardware architecture
Forensic
Контакты

Наибольший вклад в теги

Все теги (11)

Лучшие ответы пользователя

Все ответы (14)
  • Как понимать бинарные файлы?

    reverse_kacejot
    @reverse_kacejot
    Junior C++ Developer, bachelor of Applied Math
    Как гласит страничка википедии для того же формата .3ds - "The first two bytes of the chunk are its ID". У каждого формата - свое бинарное представление со своими чанками. Типичным примером могут быть исполнимые файлы Windows - PE и для Linux - ELF. Для ELF-файлов есть хорошая спецификация, которая объясняет какие чанки бывают, какие у них заголовки, какие поля у заголовков, какой размер у чанком (если он не переменный).
    Еще есть spool файлы принтеров - у них тоже своих заголовки.

    Из общего, что можно вынести:
    В бинарном представлении информация не хранится в голом виде, а чаще всего обернута в блоки с заголовками. У заголовков могут быть идентификаторы (как те циферки, о которых ты спросил), размер блока и другая вспомогательная информация, которая зависит от спецификации заголовка.

    Обещанные ссылки на спеки бинарей:
    ELF - Executable and Linkable format
    EMFSPL
    EMF
    PE

    Вот нашел свой парсер секций для Portable Executable
    #include <stdio.h>
    #include <windows.h>
    
    #define RTN_OK 0
    #define RTN_FAILURE 1
    
    const size_t expected_count = 1;
    
    char* read_file_name(int argc, char** argv);
    
    int main(int argc, char** argv)
    {
    	// Parsing command line args
    	char* file_name = read_file_name(argc, argv);
    	
    	// Opening our executable
    	FILE* portable_executable = fopen(file_name, "r");
    
    	// Reading dos header
    	IMAGE_DOS_HEADER dos_header_buffer;
    	fread(&dos_header_buffer, sizeof(IMAGE_DOS_HEADER), expected_count, portable_executable);
    
    	// Setting offset for reading PE header
    	fseek(portable_executable, (long)dos_header_buffer.e_lfanew, SEEK_SET)
    
    	// Reading signature field from PE header
    	DWORD signature = 0;
    	fread(&signature, sizeof(DWORD), expected_count, portable_executable);
    
    	// Reading file header
    	IMAGE_FILE_HEADER file_header_buffer;
    	fread(&file_header_buffer, sizeof(IMAGE_FILE_HEADER), expected_count, portable_executable);
    
    	// Reading optinal header
    	IMAGE_OPTIONAL_HEADER optional_header_buffer;
    	fread(&optional_header_buffer, file_header_buffer.SizeOfOptionalHeader, expected_count, portable_executable);
    
    	// Get info about all the sections
    	for (int i = 0; i < file_header_buffer.NumberOfSections; ++i)
    	{
    		// Reading each section header
    		IMAGE_SECTION_HEADER section_header_buffer;
    		fread(&section_header_buffer, sizeof(IMAGE_SECTION_HEADER), expected_count, portable_executable);
    		
    		printf("Section name: %7s, Raw data size: %10d, Pointer to raw data: %10d\n",
    			section_header_buffer.Name,
    			section_header_buffer.SizeOfRawData,
    			section_header_buffer.PointerToRawData);
    	}
    
    	fclose(portable_executable);
    }
    
    char* read_file_name(int argc, char** argv)
    {
    	if (argc != 2)
    	{
    		return NULL;
    	}
    
    	return argv[1];
    }
    Ответ написан
    Комментировать
  • Возникала ли у когото такая проблема?

    reverse_kacejot
    @reverse_kacejot
    Junior C++ Developer, bachelor of Applied Math
    Посмотри на свой URL bar, у тебя там два адреса в один слеплены. Попробуй посмотреть в настройки домашней страницы.
    Ответ написан
    Комментировать
  • Как научиться читать техническую литературу на английском?

    reverse_kacejot
    @reverse_kacejot
    Junior C++ Developer, bachelor of Applied Math
    В тех. литературе очень часто повторяются термины, поэтому достаточно начинать с перевода непонятных слов, оборотов, а дальше само получится.
    Ответ написан
    Комментировать
  • Как подключить библиотеку с GitHub в свой проект (C++)?

    reverse_kacejot
    @reverse_kacejot
    Junior C++ Developer, bachelor of Applied Math
    Я так понял, у вас VS?
    У библиотеки инструмент сборки - make, так что вам придется либо собирать библиотеку отдельно от проекта студии (при условии, что у вас есть clang или gcc) или:

    Самый простой подход:
    Добавьте в ваш проект cpp и h файлы либы и добавьте в Include files путь к h-файлам библиотеки.

    Правильный подход:
    Соберите либу как отдельный проект:
    Добавьте в него cpp и h файлы либы, скомпилируйте как статическую библиотеку, слинкуйте с вашим проектом (нужно указать Library Directories и сами либы)
    Ответ написан
    2 комментария
  • Если удалить содержимое текстового файла это 100% защита?

    reverse_kacejot
    @reverse_kacejot
    Junior C++ Developer, bachelor of Applied Math
    Вот если память забить с помощью dd из /dev/zero - тогда 300% защита :)
    Ответ написан
    Комментировать