PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : crypter problem



wuff
02.12.2007, 10:40
bin gerade dabei nen polymorphen crypter zu basteln (also fest eingebettet in ein programm). ich öffne die exe-datei, lese den pe-header aus, springe zur .rdata-section, verschlüssle diese mit nem zufällig gewählten passwort und speichere beides ab.

mein problem ist jetzt zur laufzeit den verschlüsselten speicher mit den entschlüsselten zu überschreiben. mit einzelnen variablen (denen eine addresse zugewiesen ist) funktionierts (WriteProcessMemory). ich hab aber keine ahnung wie ich an die runtime-addresse von der .rdata-sektion kommen soll.

währe sehr dankbar wenn mir jemand helfen könnte....

vllt weiß ja auch noch jemand wie ich herausfinde wie viel speicher eine funktion verwendet (also sowas wie sizeof(WinMain)^^).

l0dsb
02.12.2007, 15:44
also fest eingebettet in ein programm
Meinst du damit Manual Packing? Oder schreibst du einen Crypter?


springe zur .rdata-section, verschlüssle diese mit nem zufällig gewählten passwort
Wieso die .rdata-Section? Der Code liegt meistens in der .text-Section. o0 Die .rdata-Section enthält meist die Import Table und somit auch die IAT...


mit einzelnen variablen (denen eine addresse zugewiesen ist) funktionierts (WriteProcessMemory).
Könntest du das noch einmal erläutern? Und wieso WriteProcessMemory, du befindest dich doch in deinem eigenen Prozess?



vllt weiß ja auch noch jemand wie ich herausfinde wie viel speicher eine funktion verwendet (also sowas wie sizeof(WinMain)^^).
Hier musst du dir eine LDE (Length Disassembler Engine) coden. Sie ermittelt am besten statisch die Größe von Instruktionen, so kannst du das letzte retn finden.

Grüße,

f0Gx

wuff
02.12.2007, 17:40
Meinst du damit Manual Packing? Oder schreibst du einen Crypter?
ich denke ich schreib nen crypter da ich das prog ud machen will. kann aber auch manual packing heissen....kp


Wieso die .rdata-Section? Der Code liegt meistens in der .text-Section. o0 Die .rdata-Section enthält meist die Import Table und somit auch die IAT...
den code will ich ja auch (noch) nicht verschlüsseln. in der .rdata-section liegen statische daten wie zb stringtable. das dort die IAT liegt glaub ich net, muss mich mal informieren...


Könntest du das noch einmal erläutern? Und wieso WriteProcessMemory, du befindest dich doch in deinem eigenen Prozess?
kleines beispiel:
char *fuck="blablabla";
int main()
{
char *you="blub";
memcpy(fuck, you, 5);
}
gibt ne schutzverletzung da die daten die auf "fuck" liegen readonly sind.

ansonsten danke für deine hilfe und für weitere hilfe :)

l0dsb
02.12.2007, 19:24
Ob in der .rdata Section irgendeine Table liegt, hängt vom Compiler ab. Und was die Schutzverletzung betrifft, so musst du die Section, in die du schreiben willst, auch schreibbar machen (Section-Characteristics mit 0x080000000 kombinieren).

Greetz