Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > C/C++
You last visited: Today at 18:31

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[C++] PE Header

Discussion on [C++] PE Header within the C/C++ forum part of the Coders Den category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
[C++] PE Header

Hallo, ich habe folgendes Problem.
Ich möchte eine neue Section in einen PE Header einbauen, aber mein Versuch scheitert daran, dass er mir meinen neuen PE Header nicht als valid ansieht.

Code:
	char* bnewSectionName = ".Test";

	IMAGE_SECTION_HEADER* newSection = (IMAGE_SECTION_HEADER*)((DWORD)&NTHeader->OptionalHeader + NTHeader->FileHeader.SizeOfOptionalHeader + (9 * sizeof(IMAGE_SECTION_HEADER)));
	memcpy(newSection->Name, &bnewSectionName, IMAGE_SIZEOF_SHORT_NAME);

	IMAGE_SECTION_HEADER* oldSection = (IMAGE_SECTION_HEADER*)((DWORD)&NTHeader->OptionalHeader + NTHeader->FileHeader.SizeOfOptionalHeader + (8 * sizeof(IMAGE_SECTION_HEADER)));

	newSection->Misc.PhysicalAddress = oldSection->Misc.PhysicalAddress + oldSection->Misc.VirtualSize;
	newSection->Misc.VirtualSize = 20;
	newSection->VirtualAddress = NULL; // ???
	newSection->SizeOfRawData = NULL;
	newSection->PointerToRawData = NULL;
	newSection->PointerToRelocations = 0x00000000;
	newSection->PointerToLinenumbers = 0x00000000;
	newSection->NumberOfRelocations = NULL;
	newSection->NumberOfLinenumbers = NULL;
	newSection->Characteristics = 0x00000000;
Ich habe die Anzahl der PE Header in meinem Programm erhöht. Die Image Size muss ich noch erhöhen und da ist auch schon meine erste Frage. Desweitern bin ich mit bei VirtualAddress und bei SizeOfRawData unsicher ob das so stimmt.
Wäre schön wenn mit jemand erklären würde wie man die Fehler die ich gemacht habe beheben kann.

MfG
yihaaa is offline  
Old 10/03/2011, 19:39   #2
 
link's Avatar
 
elite*gold: 1
Join Date: Jul 2005
Posts: 553
Received Thanks: 451
IMAGE_SECTION_HEADER.Misc ist eine Union, heißt also, beides individuell zu setzen, ergibt keinen Sinn.

Misc.VirtualSize ist halt die Größe der Sektion. Also PhysicalSize (sprich Größe des Codes) + Anzahl der Bytes die z.B. für uninitialisierte Variablen alloziiert werden sollen.
VirtualAddress ist die RVA der Sektion im Speicher. Mind. VirtualAddress der letzten Sektion + deren VirtualSize, aligned auf OptionalHeader.SectionAlignment.
SizeOfRawData ist gleich PhysicalSize, aligned auf OptionalHeader.FileAlignment.
PointerToRawData ist das FileOffset der Sektion, also PointerToRawData der letzten Sektion + deren SizeOfRawData.

Dann erhöhst du NumberOfSections, addierst zu SizeOfHeaders die Größe des neuen Sectionheaders und alignst ggf. auf OptionalHeader.FileAlignment.
Zuletzt addierst du zu ImageSize die VirtualSize der neuen Sektion und alignst auf OptionalHeader.SectionAlignment.

Vorrausgesetzt dass die vorherigen Angaben alle stimmen, ansonsten musst du sie halt neu berechnen
link is offline  
Thanks
1 User
Old 10/03/2011, 21:44   #3
 
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
Danke für den Post. Aber kannste du mir das mal mit dem align erklären? Habe ich noch nie mit gearbeitet.

MfG

Edit:

Code:
	char* bnewSectionName = ".Test";

	IMAGE_SECTION_HEADER* newSection = (IMAGE_SECTION_HEADER*)((DWORD)&NTHeader->OptionalHeader + NTHeader->FileHeader.SizeOfOptionalHeader + (9 * sizeof(IMAGE_SECTION_HEADER)));
	memcpy(newSection->Name, &bnewSectionName, IMAGE_SIZEOF_SHORT_NAME);

	IMAGE_SECTION_HEADER* oldSection = (IMAGE_SECTION_HEADER*)((DWORD)&NTHeader->OptionalHeader + NTHeader->FileHeader.SizeOfOptionalHeader + (8 * sizeof(IMAGE_SECTION_HEADER)));

	NTHeader->OptionalHeader.SizeOfHeaders = NTHeader->OptionalHeader.SizeOfHeaders + 0x20;
	NTHeader->OptionalHeader.SizeOfImage = NTHeader->OptionalHeader.SizeOfImage + 0x20;
	NTHeader->FileHeader.NumberOfSections = 9;

	//newSection->Misc.PhysicalAddress = oldSection->Misc.PhysicalAddress + oldSection->Misc.VirtualSize;
	newSection->Misc.VirtualSize = 0x20;

	DWORD candidate = oldSection->VirtualAddress + oldSection->Misc.VirtualSize;
	DWORD rest = candidate % NTHeader->OptionalHeader.SectionAlignment;
	DWORD diff = diff = NTHeader->OptionalHeader.SectionAlignment - rest;
	DWORD newAlignedVirtualAddress = candidate + diff;
	newSection->VirtualAddress = newAlignedVirtualAddress;

	newSection->SizeOfRawData = 0x20;
	newSection->PointerToRawData = oldSection->PointerToRawData + oldSection->SizeOfRawData;
	newSection->PointerToRelocations = 0x00000000;
	newSection->PointerToLinenumbers = 0x00000000;
	newSection->NumberOfRelocations = NULL;
	newSection->NumberOfLinenumbers = NULL;
	newSection->Characteristics = 0x00000000;
Ich hoffe ich hab ein wenig verbessert, so wie du es meintest. Geht leider immer nocht nicht.

MfG
yihaaa is offline  
Old 10/03/2011, 21:51   #4
 
elite*gold: 115
Join Date: Oct 2007
Posts: 9,390
Received Thanks: 12,344
Das heißt, dass du den Wert erhöhen musst auf das nächste Vielfache des Alignments.
ms​ is offline  
Thanks
1 User
Old 10/04/2011, 22:19   #5
 
Tyrar's Avatar
 
elite*gold: 0
Join Date: Oct 2008
Posts: 1,637
Received Thanks: 1,119
Quote:
Originally Posted by Metin2Spieler97 View Post
Das heißt, dass du den Wert erhöhen musst auf das nächste Vielfache des Alignments.
Code:
alignment = (imagebase+filealignment)-(imagebase%filealignment)
müsste das sein
Tyrar is offline  
Thanks
1 User
Old 10/07/2011, 15:42   #6
 
elite*gold: 0
Join Date: Nov 2009
Posts: 343
Received Thanks: 45
Kann mir noch wer weiterhelfen?

MfG
yihaaa is offline  
Reply


Similar Threads Similar Threads
[B] Header [S] e*g
08/31/2011 - elite*gold Trading - 0 Replies
Hi. Ich Biete hier ein Header. hier ist er auch Schon:http://img163.imageshack.us/img163/7030/head erpou.jpg Dann bietet mal.
css wie mach ich ein header und vom header der hintergrund z.B blau
11/14/2010 - Coding Tutorials - 2 Replies
Hallo leute meine Frage kann man kaum erklären ich will nen Header z.B http://web85.germaninfo29.erfurt16.de/ebay/ftp_bi lder/header_moeller_1220_358.jpg also da steht traum company aber ich will in mein Header jetz Traum company und dann nur für denn Header ein blauen hintergrund also
HP Header >>>>
02/21/2010 - Metin2 Private Server - 24 Replies
Hey leute, ich suche jmd der mir für mein DynDns Server ein Homepage Header macht es sollte der name drauf stehen sprich FantasticMT2 wer lust drauf hat einfach posten :) mfg Luan
Header
02/20/2010 - Metin2 Private Server - 8 Replies
Hey liebe com Kann mir einer helfen nen geilen Header für mein Regipage auf den header den namen FinalDownMt2 pls ich krigs nicht hin der jendige kirgt nen bonus auf den server
Header
11/27/2009 - Metin2 Private Server - 2 Replies
Hallo, Ich will für meinen PServer ne HP Machen Nun will ich nen Header mit GIMP machne! Mit welchem Tool oder mit welchem Effekt aus der Taskleiste kann ich nen geilen Text machen mit effekten z.b hervorgehoben oder eingeprägt=



All times are GMT +2. The time now is 18:31.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.