Комментарии 18
Было бы здорово вкратце про механизм проверки подписи, etc.
PS:
Невероятно, но systracer мог и сам написать пост, сообщите ему об этой приятной возможности. ;-)
PS:
Невероятно, но systracer мог и сам написать пост, сообщите ему об этой приятной возможности. ;-)
>А такой утилиты официально нет.
Так надо такую утилиту срочно официально написать! )
Так надо такую утилиту срочно официально написать! )
По материалу статьи, Crystall написал утилиту, удаляющую цифровую подпись:
dl.dropbox.com/u/11919847/de.sign.exe (исходники: dl.dropbox.com/u/11919847/de.sign.rar).
Связаться с ним для обсуждения и инвайта можно по ICQ:558113633.
dl.dropbox.com/u/11919847/de.sign.exe (исходники: dl.dropbox.com/u/11919847/de.sign.rar).
Связаться с ним для обсуждения и инвайта можно по ICQ:558113633.
«Если нужно изменить подписанный файл, например исправить в нём ошибки или локализовать.» — или сделать crack, господи прости… :-)
То, что я хотел читать на Хабре ) Отличный пост )
hack the planet :)
>Последующие два значения относятся непосредственно к цифровой подписи. Если они состоят из нулей — подписи нет.
последующие два занчения за полем CheckSum это поля Subsystem и DllCharacteristics.
вариант по удалению подписи еще проще:
-качаем CFF Explorer
-открываем в нем наш exe
— далее в Data Directories находим Security Directory и удаляем
последующие два занчения за полем CheckSum это поля Subsystem и DllCharacteristics.
вариант по удалению подписи еще проще:
-качаем CFF Explorer
-открываем в нем наш exe
— далее в Data Directories находим Security Directory и удаляем
байты не переворачиваются, это little-endian
О стартапе не думали?
Половина указанных операций в Hiew делается автоматически, например очистка директории и изменение контрольной суммы.
неплохо бы и саму утилиту написать :)
Конечно, такое объяснение весьма ценно и само по себе, но слегка трудоёмко, если делать часто.
Конечно, такое объяснение весьма ценно и само по себе, но слегка трудоёмко, если делать часто.
На хабре снова появились торты.
Я так стану сладкоежкой.
Я так стану сладкоежкой.
Прилагаю свой код для нахождения полного размера PE образа. В случае, если полученное значение (возвращается через переданный в параметре image_size указатель) не совпадает (меньше) с размером EXE/DLL/SYS файла — значит начиная с данного смещения в файле следует цифровая подпись или иные данные.
Определения структур _IMAGE_* и констант есть в winnt.h (составляющая часть windows.h), включены просто для удобства и портабельности.
Определения структур _IMAGE_* и констант есть в winnt.h (составляющая часть windows.h), включены просто для удобства и портабельности.
#include <stdio.h> typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef long LONG; #define IMAGE_DOS_SIGNATURE 0x5A4D #define IMAGE_NT_SIGNATURE 0x4550 #define IMAGE_NUMBEROF_DIRECTORY_ENTRIES 16 #define IMAGE_SIZEOF_SHORT_NAME 8 #define IMAGE_DIRECTORY_ENTRY_SECURITY 4 typedef struct _IMAGE_DOS_HEADER { WORD e_magic; WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD e_maxalloc; WORD e_ss; WORD e_sp; WORD e_csum; WORD e_ip; WORD e_cs; WORD e_lfarlc; WORD e_ovno; WORD e_res[4]; WORD e_oemid; WORD e_oeminfo; WORD e_res2[10]; LONG e_lfanew; } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER; typedef struct _IMAGE_FILE_HEADER { WORD Machine; WORD NumberOfSections; DWORD TimeDateStamp; DWORD PointerToSymbolTable; DWORD NumberOfSymbols; WORD SizeOfOptionalHeader; WORD Characteristics; } IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER; typedef struct _IMAGE_DATA_DIRECTORY { DWORD VirtualAddress; DWORD Size; } IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY; typedef struct _IMAGE_OPTIONAL_HEADER { WORD Magic; BYTE MajorLinkerVersion; BYTE MinorLinkerVersion; DWORD SizeOfCode; DWORD SizeOfInitializedData; DWORD SizeOfUninitializedData; DWORD AddressOfEntryPoint; DWORD BaseOfCode; DWORD BaseOfData; DWORD ImageBase; DWORD SectionAlignment; DWORD FileAlignment; WORD MajorOperatingSystemVersion; WORD MinorOperatingSystemVersion; WORD MajorImageVersion; WORD MinorImageVersion; WORD MajorSubsystemVersion; WORD MinorSubsystemVersion; DWORD Win32VersionValue; DWORD SizeOfImage; DWORD SizeOfHeaders; DWORD CheckSum; WORD Subsystem; WORD DllCharacteristics; DWORD SizeOfStackReserve; DWORD SizeOfStackCommit; DWORD SizeOfHeapReserve; DWORD SizeOfHeapCommit; DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER; typedef struct _IMAGE_NT_HEADERS { DWORD Signature; IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER OptionalHeader; } IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS; typedef IMAGE_NT_HEADERS IMAGE_NT_HEADERS32; typedef struct _IMAGE_SECTION_HEADER { BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; union { DWORD PhysicalAddress; DWORD VirtualSize; } Misc; DWORD VirtualAddress; DWORD SizeOfRawData; DWORD PointerToRawData; DWORD PointerToRelocations; DWORD PointerToLinenumbers; WORD NumberOfRelocations; WORD NumberOfLinenumbers; DWORD Characteristics; } IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER; int GetPESize(FILE *fEXE, DWORD *image_size, DWORD *sd_addr, DWORD *sd_size) { BYTE buff[4096]; if (fread(buff, sizeof(buff), 1, fEXE) != 1) return 1; IMAGE_DOS_HEADER *dosheader = (IMAGE_DOS_HEADER *) buff; IMAGE_NT_HEADERS32 *pe_header = (IMAGE_NT_HEADERS32 *)(buff + dosheader->e_lfanew); if (dosheader->e_magic != IMAGE_DOS_SIGNATURE || pe_header->Signature != IMAGE_NT_SIGNATURE) return 1; IMAGE_SECTION_HEADER *sectiontable = (IMAGE_SECTION_HEADER *)((BYTE *) pe_header + sizeof(IMAGE_NT_HEADERS32)); DWORD maxpointer = 0, exesize = 0; unsigned int i; for (i = 0; i < pe_header->FileHeader.NumberOfSections; i++) { if (sectiontable->PointerToRawData > maxpointer) { maxpointer = sectiontable->PointerToRawData; exesize = sectiontable->PointerToRawData + sectiontable->SizeOfRawData; } sectiontable++; } *image_size = exesize; IMAGE_DATA_DIRECTORY *sd = &pe_header->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_SECURITY]; *sd_addr = sd->VirtualAddress; *sd_size = sd->Size; return 0; }
Пробовали утилитку imageremcert?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Удаление цифровой подписи PE-файла