PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : bytes adding via hexeditor



haZl0oh
27.05.2009, 22:07
Ok guys maybe some of you had the problem that you haven´t got enough place to add xor rc4 or any other code to your pe file via olly debug .
mostly it depends on the place in you pe.

if there isn´t enough try this .


open your file in hex editor

go to the end and add 100 bytes 00 to your file save it and
open it in lord pe or sumtin else ( pe editor ;) )

then enlarge the raw size ~ 100 a lil lower and save it to your file ...
now you should have enough space to make your attempt successfull.


if ya like it sjow some <3

greetz haZl0oh

EBFE
28.05.2009, 00:11
Das wird nicht in allen Fällen funktionieren ;). Nur wenn VirtualSize>RawSize ist. Sonst muss man sowohl VirtualSize wie auch SizeOfImage erhöhen und sollte sich dabei (idealerweise, aber es geht auch ohne ) an Sectionalign Werte halten.

haZl0oh
28.05.2009, 07:37
danke für den tip :D

ich lerne gern dazu !

hpoc
28.05.2009, 07:59
Ich versteh dennoch nicht, wieso du in einem Deutsch sprachigem Forum, Threads auf Englisch erstellst.
Egal, ob sie nun Inhaltich gut sind oder nicht. Zudem verstehe ich nicht wieso Du das machst, weil die Leute her, meist für alles ein Tutorial oder Video Tutorial brauchen und demnach dem Englischem nicht mächtig sind,
weil sie es sonst selbst suchen könnten im weiten des WWW's.

EBFE
28.05.2009, 10:21
ich lerne gern dazu !Dann sollte ich eine ausführlichere Erklärung machen :) :
in den meisten Fällen ist die VirtualSize der letzen Section größer als RawSize. D.h einfach gesagt, dass die Section vom windows PE-Loader komplett in den Speicher geladen wird und die Differenz (VirtualSize-RawSize) mit 00 aufgefüllt wird.

Wenn man allerdings mehr Bytes hinzufügt, so dass RawSize >VirtualSize wird, schneidet der PE-Loader den "Überschuss" einfach ab und lädt nur soviele Bytes, wie in VirtualSize reinpassen.
D.h man muss auch VirtualSize Wert erhöhen. Zusätzlich zu diesem muss man "automatisch" auch SizeOfImage größer machen, weil dieser Wert die "Gesamtspeichergröße" der geladenen Exe angibt (anders gesagt: wenn man es nicht macht, gibt es ein "keine zulässige win-32 Anwendung" Fehlermeldung).

In der Praxis funktioniert es, wenn man einfach VirtualSize/ImageSize um den selben Wert größer macht. LordPE berechnet z.B automatisch neue ImageSize Größe oder man kann einfach notfalls "realignen" lassen.

Wenn man sich allerdings an die PECOFF Spezifikation von Microsoft halten möchte:

SizeOfImage The size (in bytes) of the image, including all headers, as the image is loaded in memory. It must be a multiple of SectionAlignment.
D.h man muss einen Taschenrechner rausholen, den SectionAlignment Wert im PE-Editor ablesen und ein bisschen rechnen (VS=VirtualSize):


NewVS:= (OldVS+AddedBytes)+(SectionAlignment- ((OldVS+AddedBytes) MODULO SectionAlignment));
AddValue:=NewVS-OldVS;
SizeOfImage:=SizeOfImage+AddValue;

inmate
28.05.2009, 17:49
@hpoc musst du eigentlich immer meckern ?

Sei doch mal dankbar für das was hier gepostet wird.
Und HaZl0oH stellt hier immoment Threads auf English auf , weil er die Sachen von einem anderen Forum übernimmt und sonst alles hätte übersetzen müssen.
Und er hat sehr viel gepostet in letzter Zeit :)
Und wie kommst du darauf das die User, der Sprache English nicht mächtig sind ?
:confused:
Weist du alles ?
mfG

blackberry
28.05.2009, 18:06
Und wie kommst du darauf das die User, der Sprache English nicht mächtig sind ?

Weil die Erfahrung das immer wieder bestätigt...
________________________________
PS: folgende (C) Funktion ist in der Lage den benötigten SizeOfImage Wert zu berechnen:

#define Align(sz, alignment) (((sz) % (alignment)) ? ((sz) + (alignment) - ((sz) % (alignment))) : (sz))

int calculateSizeOfImage(char *data)
{
int offset;
int i;
int vAddress;
int SizeOfImage;

IMAGE_DOS_HEADER *idh;
IMAGE_NT_HEADERS *inh;
IMAGE_SECTION_HEADER *ish;

idh = (IMAGE_DOS_HEADER *) data;
inh = (IMAGE_NT_HEADERS *) &data[idh->e_lfanew];
offset = idh->e_lfanew + sizeof(IMAGE_NT_HEADERS);

vAddress = 0;
for(i = 0; i < inh->FileHeader.NumberOfSections; i++)
{
ish = (IMAGE_SECTION_HEADER *) &data[offset];
offset += sizeof(IMAGE_SECTION_HEADER);

if (vAddress < ish->VirtualAddress)
{
vAddress = ish->VirtualAddress;
SizeOfImage = ish->VirtualAddress + Align(ish->SizeOfRawData, inh->OptionalHeader.SectionAlignment);
}
}

return SizeOfImage;
}

Da SizeOfImage eigentlich nur die höchste zu ladende Adresse - ImageBase ist geht die Berechnung wie folgt:
- Suche die Section mit der höchsten Virtuellen Adresse
- Rechne: SizeOfImage = SectionAnfang + SectionEnde
(das - ImageBase fällt weg, weil diese Adressen RVA's sind)


mfG. BlackBerry