PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Crypter in Php



Surflam
04.09.2010, 01:56
Hey,
Ich beschäftige mich nun schon eine Weile in Php und hab mir nun vorgenommen einen Crypter in Php zu coden. Ich bin schon soweit, das ich eine Datei geöffnet habe und im Format von "00 fb 2c" usw habe, immer Leerzeichen nach jedem Hexwert eben. Nun fehlt mir jedoch das Wissen wie Crypter genau arbeiten, man kann ja nicht wahllos irgendwelche hexwerte ändern, das würde die Datei ja zerstören. Habe mal gelesen das man FF´s durch 00´s ersetzten soll oder umgekehrt, was könnte man noch tun?
Gibt es irgendwelche Basic-Crypter Sourcen wo man sehen kann "wie" man es theoretisch machen kann? Eine Idee die ich dazu hätte wäre das man Assembler befehle als Hexwert sucht, und diese durch gleichwertige Assemblerbefehle die das gleiche tun ersetzt, könnte das klappen?
Würde mich freuen wenn mir da jemand etwas Tipps gibt diesbezüglich.

Lg Surflam

l0dsb
04.09.2010, 02:08
Ein Leerzeichen nach jedem Hexwert? Das ergibt in vielen Weisen keinen Sinn. Informiere dich ausführlich über das PE-Format (aus deinem Post lese ich irgendwie, dass es um ausführbare Dateien geht), dann weißt du alles, das du brauchst.

Sections verschlüsseln, Code an die Executable anhängen, Directories selbst parsen. It's teh simpelz.

Eneth
04.09.2010, 02:16
N Crypter in PHP? Sorry,davon hab ich noch nie gehört...Wenn es dir was bringt kann ich dir Source Codes in C++ und VB anbieten?

Surflam
04.09.2010, 02:26
@l0dsb (http://free-hack.com/member.php?u=37036) Das hat so schon seine richtigkeit, ich lese die datei nämlich mit file_get_contents(); aus und wandele sie dann in hex um,und wandele sie nur so um mit dem Leerzeichen damit ich es einfacher beeinflussen kann,dort liegt aber ja nicht das problem.
Und ja es handelt sich um ausführbare dateien ;)

P.s: Hätte es auch im Format "0xbc,0x02,0xff" oder "00bbff" machen können,was aber das bearbeiten des Strings etwas blöder gemacht hätte..so ises einfacher da man den String dann auch in nen Hexeditor als Beispiel einfügen kann oder die jeweiligen Hexwerte vom Hexeditor ins Script Kopieren ohne es anpassen zu müssen

@Eneth (http://free-hack.com/member.php?u=63741)
Es gab mal einen Php-Crypter von einem anderem Hackerboard hatte ich gelesen und gesehen, leider ist dieser jetzt Down, und ich würd gerne selbst so einen Programmieren ;) Jepp bei Sources ist es egal welche Sprache, C++ wäre mir am liebsten da ich mit C++ ab und an Gamehacks code

lg

Eneth
04.09.2010, 02:29
Meld dich doch mal bitte morgen bei mir per ICQ dann kann ich sie dir schicken ich wollte jetzt off...

Surflam
04.09.2010, 02:30
Pastebin ftw.. :???:)
kannst link ja per pn schicken

Easysurfer
04.09.2010, 02:44
@Eneth (http://free-hack.com/member.php?u=63741)
Es gab mal einen Php-Crypter von einem anderem Hackerboard hatte ich gelesen und gesehen, leider ist dieser jetzt Down, und ich würd gerne selbst so einen Programmieren ;)

Dahinter steckt ein Server mit einem Programm namens "Crypter" der per Kommandozeile o.ä aufgerufen wird.

ocz
04.09.2010, 02:52
@l0dsb (http://free-hack.com/member.php?u=37036) Das hat so schon seine richtigkeit
Mag sein, dass du sie in deinem PHP Script temporär in diesem format hast, aber wenn du hinterher wieder zurück in die exe schreibst hast du dann einiges zu konvertieren.


Und ja es handelt sich um ausführbare dateien ;)
Sonderlich ausführbar werden die nach deiner 0x20 Behandlung aber nicht mehr sein.

Das Problem scheint aber eher zu sein, dass du gar nicht weißt, was ein crypter macht. Dazu darf ich dich hierauf verweisen:
http://free-hack.com/482895-post5.html

Du wirst aber wohl nicht umhin kommen, die stub nicht in PHP zu schreiben. Dein Script verschlüsselt dann im endeffekt nur die datei, hängt die stub an und passt einiges im PE Header an.

Surflam
04.09.2010, 02:59
Nunja ich weiß ungefähr was in Crypter macht, aber nicht genau was..das Problem ist das die Erklärungen immer so Oberflächig sind, und wozu man die Stub brauch (bzw was in ihr genau enthalten ist?ist ja bei jedem crypter anderst) und wie man genau die Änderungen macht..einfach aufgebaute Sources ohne "extra features",sogesehen nur das Grundgerüst wären genial..damit ich das mal sehe:)

ocz
04.09.2010, 03:13
mov eax, startoffset
mov ebx, endoffset
mov cl, key

.loop
mov dl, [eax]
xor dl, cl
mov [eax], dl
cmp eax, ebx
jz .ende
inc eax
jmp loop

.ende
jmp OEP
So könnte eine einfache stub aussehen. Wenn du nun zum Beispiel in deinem php script die .code section mit demselben key XORst und die stub in eine cave schreibst und den ep darauf umbiegst, wird die .code section zur laufzeit wiederhergestellt.

Dazu solltest du dir mal das ARTeam PE Tutorial ansehen. Ansonsten könnte ich noch auf gf0x' paper verweisen, das hat in der Manual Packing Sektion aber einige unstimmigkeiten, von daher wirst du um eigenes ausprobieren in OllyDbg nicht rumkommen.

IRET
04.09.2010, 08:20
Hier bin ich durch unsere SuFu auf einen Thread gekommen in dem BlackBerry ein Tutorial über Crypter in C rausgebracht hat.
http://free-hack.com/ansi-c-c-c/38507-%5Btut%5D-crypter-c-schreiben.html
Allerdings würde ich da an deiner Stelle auf C/C++ zurückgreifen ,da PHP nicht in nativen Code übersetzt wird und somit immer den PHP-Interpreter mit braucht.
Außerdem ist es für sowas nicht gemacht.

//Edit:
Offtopic: OpCodez (http://free-hack.com/member.php?u=67508) ,du hast immer leicht strange Avatare XD.

Surflam
04.09.2010, 09:16
"da PHP nicht in nativen Code übersetzt wird und somit immer den PHP-Interpreter mit braucht."

ich hab ja nicht vor es auf windows oder so laufen zu lassen, ich hab vor die jeweilige datei die gecryptet werden soll per php auf den server hochzuladen,und dann mit php aufm webspace das zu crypten,danach kann man die datei dann wieder runterladen;)

Naja jedenfalls vielen dank an alle für die Links, werde mich mal genauer einlesen und dann dementsprechend schauen was sich machen lässt.
Dateien Patchen kann ich nämlich schon(zb minesweeper timefreeze patch:D)

lg

IRET
04.09.2010, 09:21
ich hab ja nicht vor es auf windows oder so laufen zu lassen, ich hab vor die jeweilige datei die gecryptet werden soll per php auf den server hochzuladen,und dann mit php aufm webspace das zu crypten,danach kann man die datei dann wieder runterladen;)
Die Exe kann ich auch ohne Webservice schrotten.
Irgendwas muss sie ja wieder decrypten.
Und das ist nunmal die Stub die entweder hinten dran gehängt wird oder sonst wie mitgegeben wird.
Crypter-Prinzip:
Sections usw werden verschlüsselt
Zusätzliche Section mit der Stub wird angehängt (Stub decryptet alles)
PE-Header werden gefixt.
Evntl. noch die Importtables, Ressourcen usw fixen

Surflam
04.09.2010, 09:50
nunja die Stub würde ich dann dementsprechend mit Assembler machen,und mit Php einfügen. Crypter die ich bisher gesehen hab hatten auch die Stub als externe Datei, und nicht direkt im Sourcecode vorliegen also sollte das kein Problem darstellen.

Hab mir jetzt mal die ganze Sache mit dm Pe-Format, und dem Verschlüsseln usw angeschaut, ist ja ganz Plausibel ich frag mich nur wie ich das in Php machen soll, allein die Header Definitionen ,und wo die einzelnen Sections sind..das geht glaube nicht so einfach mit Php, wenn überhaupt..Ich glaube ich werd mich noch etwas einlesen und Experimentieren damit;)
Hab ich das Prinzip eines Crypter richtig verstanden?Hier mal ein Pseudo Code wie ich das versteh :


int main(){
Alle_Sections_des_Programmes_verschlüsseln(); <-- Damit Antivirenprogramme den Programmcode nicht mehr Indentifizieren können
Zusätzliche_Section_einfügen(stub);<-- Zum entschlüsseln des Codes sobald das Programm startet,und folgend Ausführung des Decrypteten
Entrypoint_Anpassen();<-- Damit an der Section im Programmcode gestartet wird, die unser Programm decryptet
}
lg

blackberry
04.09.2010, 10:01
N Crypter in PHP? Sorry,davon hab ich noch nie gehört...Wenn es dir was bringt kann ich dir Source Codes in C++ und VB anbieten?

Also erstmal um das klar zu stellen: einen Builder bekommt man in jeder Sprache hin, die mit Binärdateien arbeiten kann (also Möglichkeiten bereitstellt, um BYTE's, WORD's, DWORD's usw. aus-, wie einzulesen).

Das geht auch in PHP (man betrachte sich mal die Funktionen pack() und unpack(), welche sich die PHP-Entwickler wohl bei Perl abgeschaut haben).
Dabei würde ich jedoch empfehlen sich von Anfang an eine Wrapper-Klasse zu schreiben, damit man abstraktionsmäßig möglichst weit von pack() und unpack() wegkommt, da diese den Code nicht wirklich übersichtlicher machen (Stichwort: bamcompile... ein einziges Durcheinander...).

Wenn es also keine Crypter (damit beziehe ich mich auf den Builder-Teil) in PHP gibt, dann weil die meißten Leute einfach nicht genug können, um sowas umzusetzen (und meißt sowieso von Tuten und Blasen keine Ahnung haben und nur Code zusammenpasten).

Also zurück zum konstruktiven Teil: ich verweise gleich auch mal auf OpCodez' Post (http://free-hack.com/482895-post5.html), in der Hoffnung, dass er dadurch von jedem hier Anwesenden mindestens einmal gelesen worden ist.

"Scantime" Crypter lassen wir mal außen vor, da sowas sogar ein gehirnamputierter Schimpanse schreiben könnte (wobei ich sogar vermute, dass solche "Crypter" ausschließlich von gehirnamputierten Schimpansen geschrieben werden).

Ich gehe jetzt also mal auf RunTime Crypter ein. Nach traditioneller Copy&Paste Manier, kennen die meißten Leute zumindest eine Art davon. Diese erfordert es einen neuen Prozess zu starten und den Code des gestarteten Programms durch den von der gecrypteten Datei zu ersetzen.
Das Problem bei der Sache ist, dass man dafür die WinAPI braucht und das in PHP wohl auf Probleme stößt (ich meine sogar in PECL mal eine Extension für die WinAPI gesehen zu haben, aber ich beziehe mich da eher auf das PHP->EXE Problem, das bisher nur von bamcompile in Angriff genommen wurde, aber an sich im Grunde nichts anderes als ein Dropper mit einer "portable" PHP Version ist).
Selbstverständlich könnte man an dieser Stelle auch eine Stub in ASM schreiben, die das umsetzt, aber ich denke mal, dass wenn man ASM kann, sich mit etwas interessanteren Methoden (um auf die Wortwahl von OpCodez zurückzukommen) befassen möchte.

Das bringt mich auf die Methode, die ich empfehlen würde: Codeinjection. Vom Konzept könnte man meinen wir würden einen Packer (beispielsweise UPX) schreiben, wobei wir nicht Packen (obwohl das natürlich auch funktionieren würde, aber mit wesentlich mehr Aufwand verbunden ist), sondern nur verschlüsseln.
Dazu empfehle ich mal mein Paper/Tutorial:
http://free-hack.com/ansi-c-c-c/38507-%5Btut%5D-crypter-c-schreiben.html
Dabei habe ich mich bemüht den theoretischen Teil stark vom praktischen Teil zu trennen. Sollte es dir jedoch keine praktische Hilfe sein (was ich nicht glaube, da man als PHP-Programmierer zumindest erahnen kann, was ein C Source da evtl. macht - zumal die Schritte im praktischen Teil kommentiert sind!), so würde ich es dennoch als eine gute Einführung in das PE-Format betrachten, wobei ich hoffe, alle für Crypter relevante Member der im PE-Format auftauchende Header erklärt zu haben (mal abgesehen von extra Sachen, wie Import bzw Export bezogene Header usw.).

EDIT:


nunja die Stub würde ich dann dementsprechend mit Assembler machen,und mit Php einfügen.
Richtig :)


Crypter die ich bisher gesehen hab hatten auch die Stub als externe Datei, und nicht direkt im Sourcecode vorliegen also sollte das kein Problem darstellen.
Vergiss Crypter, die du bisher gesehen hast. Du hast scheinbar bisher auch keinen tauglichen Crypter in PHP gesehen. Also!
Crypter mit externer Stub sind entweder Scantime Crypter, oder RunTime Crypter mit Methode #1 (Stub, die das Programm entschlusselt und den Code in einen anderen Prozess injeziert).
Sowas in PHP zu machen wird scheitern, da du keinen vernünftigen Weg hast, um aus einer PHP Datei eine EXE Datei zu machen. Auf bamcompile bin ich ja oben schon eingegangen und ich bin überzeugt, dass es damit nicht funktionieren wird (selbst wenn du die ca. 2 MB in Kauf nimmst, die bamcompile aus deinen Skripten macht), da bamcompile im Grunde das Skript, sowie eine portable PHP Version auf die Festplatte droppt und dort aufruft und du wohl somit wenig Chancen haben wirst an die angehängten Daten (dein verschlüsseltes Programm) wieder ran zu kommen.


[...] ich frag mich nur wie ich das in Php machen soll, allein die Header Definitionen ,und wo die einzelnen Sections sind..das geht glaube nicht so einfach mit Php
Habe nie das Gegenteil behauptet ;)
Ich habe lediglich gesagt, DASS es geht. Darum, wie gesagt, auch meine Empfehlung, sich von Anfang an eine geeignete Abstraktionsschicht zu bauen. Dazu bräuchtest du dann eigentlich:
Klassen zum Ein- und Auslesen von Daten aus Binärdateien (wichtig ist dabei vor allem die Größe von dem, was man einliest - also bytes, words, dwords, usw.).
Darauf aufbauend könntest du dann halt Klassen erstellen, die Strukturen wie IMAGE_DOS_HEADER, IMAGE_NT_HEADERS und IMAGE_SECTION_HEADER emulieren - d.h. du gibst dem Objekt dann im Konstruktor den Bytestream, den du mit deinen Wrappern parsen kannst und speicherst dann entsprechend die Attribute. Wenn du es dann richtig schön machen willst, dann kannst du es via der magischen __set()-Methode auch so implementieren, dass beim Verändern der Attribute auch der Wert im Bytestream entsprechend geändert wird.


Hab ich das Prinzip eines Crypter richtig verstanden?Hier mal ein Pseudo Code wie ich
Als Grundgerüst erscheint mir das nicht schlecht. Du musst dann jedoch auch Assembler lernen, damit du diesen Verschlüsselungsprozess dann auch wieder umkehren kannst, wenn das Programm gestartet wird (das ist jetzt natürlich einfacher gesagt als getan... sollte klar sein).

Surflam
04.09.2010, 10:10
Hab mir dein Tutorial/Paper schon runtergeladen angeschaut, und muss zugeben das mich das PE-Format noch etwas irritiert, überall neue Begriffe die ich noch nicht kannte. Bisher hatte ich nur direkt mit Hexcode veränderung und etwas Assembler zu tun gehabt, denke ich werde mich da langsam einarbeiten müssen und erstmal genau durchlesen was jeder begriff bedeutet bis ich das begreife ;) Aber die Erklärungen und Links die bisher gepostet wurden finde ich doch schon mal sehr interessant und wert gelesen zu werden, werde das mal die nächsten Tage durcharbeiten und dann mal schauen ob ich einen Crypter in Php hinbekomme, denke aber schon.
Nochmals vielen dank :D

p.s:Blackberry , bamcompile ist doch ein Php2Exe Converter bzw Compiler...und das hat ja relativ wenig mit dem zu tun, was ich eigendlich vor habe..und zwar den Crypter später als Php-Script auf einem webspace mit Apache laufen zu lassen. Also kein Php-Script das dann unter Windows als exe laufen soll oder sonstiges zeug..

lg

blackberry
04.09.2010, 10:29
Ich hatte eigentlich gehofft, dass du es nach fuckinghot19's Post mittlerweile verstanden hättest.
KLAR! Auf dem Webspace cryptest du die Datei usw.
Aber hast du vielleicht schonmal dran gedacht, dass das nicht alles ist? Was verschlüsselt wird, muss auch wieder entschlüsselt werden - das sollte doch wenigstens klar sein, oder?
Und wer ENTSCHLÜSSELT deinem Konzept nach alles wieder? Das Skript auf dem Webspace? Wohl kaum!
Du brauchst also ein Programm (die Stub), das _VOR_ dem eigentlichen Programm ausgeführt wird und den Code wieder entschlüsselt.
Ob das Programm nun selbst eine EXE ist (die EXE, die du bei Cryptern wohl immer als Stub siehst), oder halt reicher Maschienencode, den du nach der von mir in meinem Tutorial vorgestellten Methode in das verschlüsselte Programm integrierst und durch das Anpassen des EntryPoints noch vor dem eigentlichen Code des verschlüsselten Programms laufen lässt ist egal.
Klar sollte sein: weder Windows, noch die CPU, können mit verschlüsseltem Code irgendetwas sinnvolles anfangen -- und darum muss der Code vor seiner Ausführung wiederhergestellt sein!

Bamcompile habe ich in dem Kontext nur erwähnt und diskutieren, weil ich klarstellen wollte, dass es zwar SCHEINBAR ein Schritt in die richtige Richtung ist (nämlich die Stub auch in PHP schreiben zu können), dem jedoch nicht so ist, weil es wie oben erwähnt, nur als Binder fungiert.

Surflam
04.09.2010, 10:51
Klar sollte sein: weder Windows, noch die CPU, können mit verschlüsseltem Code irgendetwas sinnvolles anfangen -- und darum muss der Code vor seiner Ausführung wiederhergestellt sein!

Das ist ja klar, aber ich gehe ja davon aus das man als erstes die sections verschlüsselt,dann eine eigene unverschlüsselte section einfügt(die dann die sction decryptet/entschlüsselt wenn man es startet), und dann den entrypoint verändert,so das er auf die eigene section zeigt die di restlichen sections dann eben entschlüsselt und widerherstellt..:confused:?Und nungut..das mit den ganzen Klassen usw ist alles aus aufwändig, ich glaub es wäre vllt ne ganz gute idee wenn ich erstmal einen crypter in c++ code um das prinzip zu verstehen wie man mit den ganzen header etc arbeitet, sonst wird das ganz denke nur reiner müll

lg

blackberry
04.09.2010, 11:17
Das ist ja klar, aber ich gehe ja davon aus das man als erstes die sections verschlüsselt,dann eine eigene unverschlüsselte section einfügt(die dann die sction decryptet/entschlüsselt wenn man es startet), und dann den entrypoint verändert,so das er auf die eigene section zeigt die di restlichen sections dann eben entschlüsselt und widerherstellt..:confused:?
Es ehrt dich, wenn du nur die komplexeste Variante im Kopf hast, aber ich sprach nunmal davon, dass man PHP nicht als Stub für Methode #1, oder Methode #2 einsetzen kann, weil bamcompile da nicht mitspielen wird.


Und nungut..das mit den ganzen Klassen usw ist alles aus aufwändig
Eigentlich war das mit den Klassen als Vorschlag gedacht, um den Code weniger aufwändig zu gestalten.
Stell dir mal vor du willst ein Feld in einem Header auslesen und musst da erst 7 (Zahl aus der Luft gegriffen) Zeilen lang mit unpack() rumjonglieren. Ich kann dir versprechen, dass du dann noch bevor du etwas verschlüsselt hast nicht mehr wissen wirst, was in Zeile X gemacht wird.
Übersichtlicher wäre ja ohne Zweifel, wenn man irgendwann halt (braucht selbstverständlich mehr Vorarbeit) ein zusammenhängendes Objekt für eine EXE Hat und dann z.B. sowas machen kann:
$meinExeObjekt->ImageBase = $ibNeu;
Dann weiß man später auch, was wo passiert und der Code ist viel einfacher ausbaubar.


ich glaub es wäre vllt ne ganz gute idee wenn ich erstmal einen crypter in c++ code um das prinzip zu verstehen wie man mit den ganzen header etc arbeitet, sonst wird das ganz denke nur reiner müll

Wenn du C++ wirklich kannst, dann ist das sich nicht verkehrt, zumal du da bereits im Header winnt.h (es reicht windows.h zu inkludieren) alle notwendigen Strukturen definiert hast und dich dann zumindest damit nicht rumärgern musst.
(VB Programmierer müssen sich diese Strukturen selber definieren *hihi* [obwohl die meißten sowieso nur RunPE kopieren und sich somit gar nichts selber definieren müssen...])

Surflam
04.09.2010, 12:11
nunja ich würde nicht behaupten das ich c++ beheersche, den das wäre gelogen. Jedoch code ich in c++ öfters Gamehacks,bypasses und ähnliche Dinge und komme damit eigendlich ganz gut zurecht, wäre auch sicher einfacher als einstieg in Crypter annstelle von php wo ich es mir selbst definieren müsste.

lg

EBFE
04.09.2010, 12:43
Klar schaut es mit vordefinierten Headern lesbarer und schöner aus. Aber soo viele Datenstrukturen braucht man nun auch wieder nicht (bei Buildern sowieso) - und da kann man entweder die direkten Positionsangaben nutzen oder selber definieren ;)
Hier ist PE Format als "Bytepositionen" aufgelistet
PE executable file format offsets (http://www.woodmann.com/krobar/other/other98.html)

d.h man kann einfach stumpf im Code "abzählen".

Surflam
04.09.2010, 12:47
Das ist doch mal etwas, was mir wirklich weiter hilft:surprised
Danke ;D

lg

blackberry
04.09.2010, 19:41
Sooooo. Ich habe jetzt eine etwas längere Autofahrt (als Beifahrer versteht sich ;)) hinter mir und habe mir die Zeit mit dem Lösen dieses kleinen Problems beschäftigt, dass PHP eigentlich nicht dafür ausgelegt ist .EXE-Dateien zu parsen.

Dabei habe ich eine Art struct-Engine geschrieben, die in der Lage ist structs zu emulieren. Erfolg ist der, dass man nun sehr einfach Structs auf Basis von Bytes, Words, Dwords, Strings (Nullterminiert, oder Binär, wahlweise auch mit einer festen Länge), sowie Arrays definieren kann.
Eine struct kann wiederum als Teil einer weiteren struct verwendet werden (darauf bin ich stolz :D).

Beispiel, wie man IMAGE_NT_HEADERS definiert:

class IMAGE_NT_HEADERS extends Struct
{
public function __construct()
{
$structdef = array(
Struct::entry("Signature", new Dword),
Struct::entry("FileHeader", new IMAGE_FILE_HEADER),
Struct::entry("OptionalHeader", new IMAGE_OPTIONAL_HEADER)
);

parent::__construct($structdef);
}
}
Man beachte, dass hier auch IMAGE_FILE_HEADER und IMAGE_OPTIONAL_HEADER definiert sein müssen.

Um die Idee zu Demonstieren, habe ich einen kleinen PoC-Code geschrieben, der einem alle Sections von kernel32.dll auslistet, sowie einen Ausschnitt der darin enthaltenen exportierten Funktionen ausgibt (kann auch alle ausgeben... lasse die Schleife dafür aber nach 12 Funktionen abbrechen, da es sonst unübersichtlich wird).

PoC: (639 Zeilen *hihi*)
http://pastie.org/1138784

Ausgabe:

C:\Users\Admin\Desktop>php exereader.php
File: C:\Windows\system32\kernel32.dll

Section: <.text>
VirtualAddress: 0x00001000
Section: <.data>
VirtualAddress: 0x000C6000
Section: <.rsrc>
VirtualAddress: 0x000C7000
Section: <.reloc>
VirtualAddress: 0x000C8000

1359 exported functions detected

AcquireSRWLockExclusive
AcquireSRWLockShared
ActivateActCtx
AddAtomA
AddAtomW
AddConsoleAliasA
AddConsoleAliasW
AddIntegrityLabelToBoundaryDescriptor
AddLocalAlternateComputerNameA
AddLocalAlternateComputerNameW
AddRefActCtx
AddSIDToBoundaryDescriptor
[...]
P.S.: die structs haben auch einen (ungetesteten!) bind-Support. Soll heißen, dass man den Inhalt zu dem Bytestream binden kann, von dem der Inhalt gelesen wurde. Und zwar an der selben Position, von der gelesen wurde. Das heißt: ändert man Werte in der struct, werden die auch im Bytesteam (BinReader-Objekt) geändert.
Man müsste also nur noch den privaten Member $stream von BinReader in eine Datei schreiben und schon hätte man seine Datei modifiziert.

MfG. BlackBerry

EDIT:
Okay, ich habe nun write-Support hinzugefügt (waren doch einige Bugs drin xD) und den _Array-Support verbessert.
Nun ist es auch möglich Member mit dem =-Operator zu ändern. Diese werden automatisch im Bytestream geupdatet (es sei denn, man ruft Struct::bindInput(false); auf).
Array Member werden nun über _INDEX erfasst, da ich mir den =-Operator sonst nicht hätte "reinhacken" können.
Als Beispiel für Arrays diene der Teil zum Export-Dir auflisten im Source.

Außerdem habe ich den Code noch darum erweitert, kernel32.dll's ImageBase auf 0xDEADBEEF zu ändern und dann als kernel32new.bin im momentanen Workingdir abzuspeichern.
Falls diese Datei vorhanden ist, wird diese im Weiteren als Quelle benutzt. D.h. das Skript zeigt beim nächsten Aufruf auch die geänderte ImageBase an :) (das dient natürlich nur als Demontration, dass es funktioniert... einen praktischen Nutzen hat das in diesem Fall nicht).

GregorSamsa
04.09.2010, 20:09
Du Arsch, ich wollte nen PoC schreiben, und war wieder zu besoffen gestern um diesen Thread zu sehen :-(

Aber cool gemacht Blacky, gefällt mir der Code!

Surflam
05.09.2010, 15:15
Bisher dachte ich echt ich könnte gut Php Scriptn, als ich dein Code gesehn hatte..dachte ich nur "wtf"...ich glaube bis ich den Code verstehe bin ich Alt und hab ein langen Bart :lol Aber echt Übel das du da so viel Arbeit reingesteckt hast, Top!:)

nemo
05.09.2010, 16:30
gj BlackBerry