PE Editor v1.2

 

Àâòîð: Ìàêñèì Êèñåë¸â a.k.a NEOx (NEOx@Pisem.net)

 

PE Editor - ýòî ðåäàêòîð èñïîëíÿåìûõ PE (Portable Executables) ôàéëîâ. Ðåäàêòîð îáðàáàòûâàåò íå âåñü ôîðìàò, à òîëüêî çàãîëîâîê PE ôàéëà (PE Header), è òàáëèöó îáúåêòîâ (ñåêöèé) ôàéëà (Object Table). Ñëåäóþùèå âåðñèè ðåäàêòîðà áóäóò îáðàáàòûâàòü òàáëèöû èìïîðòà/ýêñïîðòà, ðåñóðñû è äð.

 

PE Header èìååò ñëåäóþùóþ ñòðóêòóðó,

 

typedef struct

{

            DWORD  SignatureBytes;

             WORD    CPUType;

             WORD    NumOfSections;

             DWORD TimeDateStamp;

             DWORD PointerToCOFF;

             DWORD COFFTableSize;

             WORD    NTHeaderSize;

             WORD    Flags;

             WORD    Magic;

             BYTE      LinkMajor;

             BYTE      LinkMinor;

             DWORD SizeOfCode;

             DWORD SizeOfInitData;

             DWORD SizeOfUnInitData;

             DWORD EntryPointRVA;

             DWORD BaseOfCode;

             DWORD BaseOfData;

             DWORD ImageBase;

             DWORD ObjectAlign;

             DWORD FileAlign;

             WORD    OSMajor;

             WORD    OSMinor;

             WORD    USERMajor;

             WORD    USERMinor;

             WORD    SubSysMajor;

             WORD    SubSysMinor;

             DWORD Reserved;

             DWORD ImageSize;

             DWORD HeaderSize;

             DWORD FileChecksum;

             WORD    SubSystem;

             WORD    DLLFlags;

             DWORD StackReserveSize;

             DWORD StackCommitSize;

             DWORD HeapReserveSize;

             DWORD HeapCommitSize;

             DWORD LoaderFlags;

             DWORD NumOfRVAandSizes;

             DWORD ExportTableRVA;

             DWORD ExportDataSize;

             DWORD ImportTableRVA;

             DWORD ImportDataSize;

             DWORD ResourceTableRVA;

             DWORD ResourceDataSize;

             DWORD ExceptionTableRVA;

             DWORD ExceptionDataSize;

             DWORD SecurityTableRVA;

             DWORD SecurityDataSize;

             DWORD FixUpTableRVA;

             DWORD FixUpDataSize;

             DWORD DebugTableRVA;

             DWORD DebugDataSize;

             DWORD ImageDescriptionRVA;

             DWORD DescriptionDataSize;

             DWORD MachineSpecificRVA;

             DWORD MachnineDataSize;

             DWORD TLSRVA;

             DWORD TLSDataSize;

             DWORD LoadConfigRVA;

             DWORD LoadConfigDataSize;

             BYTE Reserved01[8];

             DWORD IATRVA;

             DWORD IATDataSize;

             BYTE     Reserved02[8];

             BYTE     Reserved03[8];

             BYTE     Reserved04[8];

} PEHeader;

 

Object Table èìååò ñëåäóþùóþ ñòðóêòóðó,

 

typedef struct

{

             BYTE     ObjectName[8];

             DWORD VirtualSize;

             DWORD SectionRVA;

             DWORD PhysicalSize;

             DWORD PhysicalOffset;

             BYTE      Reserved[10];

             DWORD ObjectFlags;

} ObjectEntry;

 

 

          PE Editor ñîäåðæèò êëàññ CPEFile (PEFile.cpp, PEFile.h) îí íåìíîãî íå óäîáåí â èñïîëüçîâàíèè, íî âñ¸ æå îí ðàáîòàåò.

          Ìåòîä BOOL CPEFile::Open(LPCTSTR szPEFile), îòêðûâàåò PE ôàéë äëÿ ÷òåíèÿ è çàïèñè, ñëåäîâàòåëüíî VOID CPEFile::Close(VOID) çàêðûâàåò ôàéë.

          Ìåòîä UINT CPEFile::ReadPEHeader(VOID), ÷èòàåò PE Header.  ìåòîäå ReadPEHeader ñîäåðæèòñÿ âûçîâ åù¸ îäíîãî ìåòîäà, LONG CPEFile::SeekToPEHeader(VOID), êîòîðûé óñòàíàâëèâàåò óêàçàòåëü â ôàéëå íà PE Header è âîçâðàùàåò ïîçèöèþ PE Header-à.

         Ìåòîä BOOL CPEFile::IsPEFile(VOID), ïðîâåðÿåò íà íàëè÷èå PE ñèãíàòóðû â ôàéëå.

         Ìåòîä LONG CPEFile::SeekToObjectEntry(VOID), óñòàíàâëèâàåò óêàçàòåëü â ôàéëå íà ïåðâóþ ñåêöèþ â ôàéëå.

Âíèìàíèå! Èñïîëüçóéòå SeekToObjectEntry òîëüêî 1 ðàç ïðè ÷òåíèè/çàïèñè ñåêöèé.

 

Ïðèìåð èñïîëüçîâàíèÿ êëàññà CPEFile

 

CPEFile m_PEFile;

m_PEFile.Open(“C:\\Test.exe”);  //Îòêðûâàåì ôàéë

m_PEFile.ReadPEHeader();       //×èòàåì PE Header, è çàïîëíÿåì ñòðóêòóðó PEHeader äàííûìè

m_PEFile.Close();                      //Çàêðûâàåì ôàéë

 

PE Editor áûë íàïèñàí è ïðîòåñòèðîâàí â Microsoft Visual C++ 6.0 Service Pack 6.4. Âîçìîæíî îíè áóäóò ðàáîòàòü è â ïðåäûäóùèõ âåðñèÿõ MSVC++ è MFC.

Ëèöåíçèÿ
Ïðîãðàììà ðàñïðîñòðàíÿåòñÿ ñâîáîäíî, áåç îãðàíè÷åíèÿ ïðàâà êîïèðîâàíèÿ.

Ìîè êîîðäèíàòû
Åñëè ó âàñ åñòü êàêèå-íèáóäü êîíñòðóêòèâíûå ïðåäëîæåíèÿ, ìîæåòå ïèñàòü ìíå ïî àäðåñó: NEOx@Pisem.net.
Íà ìîåé ñòðàíè÷êå http://www.KS-Soft.boom.ru âû ìîæåòå íàéòè íîâûå âåðñèè PE Editor-à. Íî îíà ïîêà â ðàçðàáîòêå.