PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : binary aus binary erzeugen??



locai
26-09-2004, 14:56
Hi,
ich möchte aus einer Binary eine weitere Binary erzeugen hab aber kein Plan wie das geht. Ich habe schon probiert erst das erste Programm zu kompilieren und den binary code in eine leere dartei zu kopieren funzt nur leider nicht wirklich. ich glaube mein Texteditor baut da noch leerzeichen usw ein. Hat jemand ne ahnung wie ich das verhindern kann?

MFG

locai

peschmae
26-09-2004, 15:50
Was genau willst du da machen? :confused:

MfG Peschmä

SeeksTheMoon
26-09-2004, 16:18
hä? Ich verstehe nicht was Du machen willst... :confused:

r00t043
26-09-2004, 16:39
Hat jemand ne ahnung wie ich das verhindern kann?
Ja. Mann nimmt einen HEX-Editor ( z.B. khexedit )

Boron
26-09-2004, 17:27
Oder einfach die Datein kopieren: cp origDatei neueDatei :confused:

Lin728
27-09-2004, 06:30
Falls du vorhast einfach code von einer Datei in eine andere Datei zu kopieren - vergiss es.
1.) Erstmal, wie soll das erste programm dahin kommen.
2.) Stimmen die ganzen Sprungmarken net.

dipesh
07-10-2004, 23:29
Klar geht das, nur anders als die Frage formuliert war. Guck dir doch mal die Quellen zu http://upx.sourceforge.net an. Dort wird ein Programm in ein anderes eingebettet und zur laufzeit gleichsam aus diesem heraus gestartet/extraiert.

panzi
08-10-2004, 00:16
Klar geht das, nur anders als die Frage formuliert war. Guck dir doch mal die Quellen zu http://upx.sourceforge.net an. Dort wird ein Programm in ein anderes eingebettet und zur laufzeit gleichsam aus diesem heraus gestartet/extraiert.
Und wohin wirds extrahiert? Auf die Platte und dann gestartet oder direkt in den Speicher? (das erste ist ja kein Problem)

peschmae
08-10-2004, 13:04
Bei UPX gehts direkt in den Speicher. Ist übrigens verdammt schnell das Teil - gewisse Programme starten mindestens gleichschnell damit (weil weniger von der Platte geladen werden muss).

MfG Peschmä

dipesh
08-10-2004, 17:26
Stimmt peschmae. Gerade wenn man Programme direkt von langsamen Datenhaltern wie CD-Roms oder Netzlaufwerken startet merkt man den Unterschied spürbar. Ganz abgesehen von der teilweise wesentlich geringeren Dateigröße (bis zu 2/3 kleiner!) als zweiten positiven Faktor.

Übrigens funktionieren manche Viren nach einem ähnlichen Prinzip. Die ursprünglichen Daten werden einer 'executablen' gleichsam als Ressource angehängt und später durch diese wieder ausgelesen und direkt im Speicher ausgeführt wodurch die Funktionalität der ursprünglichen Datei weiterhin gegeben ist, aber eigene schadhafte Funktionalitäten durch den 'preloader' hinzugefügt werden können.

locai
09-10-2004, 12:28
erstmal sorry das ich mich nich gemeldet hab mein isp hat mir gekündigt.

Also ich ahb das jetzt mit dem hexcode probiert es klappt aber leider nicht. Es öffnet sich zwar kurtz ein dos fenster aber das programm das eigentlich gestartet werden soll kommt nicht. wenn ich die erstellte exe mit meinem hexeditor öffne ist der hexcode auch komplett anders. Mit diesem code von diesem projekt kann ich acuh irgendwie nix anfangen...

dipesh
09-10-2004, 18:33
@locai
Du sprichst die ganze Zeit davon den 'binary code' in eine leere Datei zu kopieren. Was für eine leere Datei ist das bzw. wie wird sie in dem Projekt welches du dann kompilierst eingebunden und wie genau versuchst du diese Datei später zu starten? Du solltest schon etwas mehr Input zu dem liefern was du machen willst und wie du es bisher angegangen bist da uns seit der Zeit der Hexenverbrennungen leider die Hellseher ausgegangen sind :o

peschmae
09-10-2004, 23:29
Auf Linuxforen wurden kürzlich ein paar Glaskugeln gesichtet ;)

MfG Peschmä, der immer noch nix kapiert

locai
10-10-2004, 17:47
ich kann doch nicht ahnen das eure glaskugeln kaputt sind :rolleyes:

also ich öffne meine exe die später aus einer andren exe erzeugt werden mit einem hexeditor nehme den hexcode und packe ihn in einen array in dem eigentlichem programm. Dann lasse ich dieses programm halt eine exe bauen mit dem array als inhalt...

hat das jetzt irgendwer verstanden :confused:

peschmae
10-10-2004, 18:03
Also ich nicht. (Aber das war auch nicht die Frage ;))

Wozu das ganze?

MfG Peschmä

r00t043
10-10-2004, 18:33
An sich hoert sich das doch an, als ob es funktionieren muesste. Aber da das Programm nicht das gleiche in die Ausgabedatei schreibt, was du vorher in das Array gepackt hast, solltest du mal ein wenig Beispielcode posten, damit wir dir helfen koennen ( speziell der Teil wo du die Sachen aus dem Array in die Datei geschreiben werden ).

Allerdings wuerde mich auch interessieren, was du vor hast.

SpiritX
12-10-2004, 13:32
Ich probiere eine art setuptool zu programmieren.
Also ich hab jetzt shconmal nach dem studieren etlicher paper rausgefunden das das mit den hexcodes stimmen müsste leider geben mir alle hexeditoren die ich probiert habe die hex codes in dieser form aus: "00 E3 ..." aus. In c brach ich die aber logischer weise in dieser form: "\x00\xE3..." ich hab mich dann auchshconma an nem programm probiert das das amchen soll welches aber nicht wirklich mit dem datenaufkommen von nen parr 1000 hexcodes klarkommt. Ich find den source jetzt auch leider nimma .

kennt jemand vielleicht ein programm das mir das abnimmt?

MFG

SpiritX

lilapause
12-10-2004, 15:48
Mmh also das einizge an was mich das erinnert ist Virenprogrammierung und dazu werde ich sicher keinen Beitrag leisten.

lilapause
12-10-2004, 15:59
Da war ich wohl etwas vorschnell....

Wenn du die hexcodes schon hast und nur in das \x davor machen willst sollte es doch eine simple pipe an
sed 's| |\\x|g' tuen

panzi
12-10-2004, 21:54
Jetzt total aus'm Kopf programmiert und nicht getestet:


#include <ctype.h>
#include <stdio.h>

int main() {
int c = EOF;
int i = 0;
int isnoteof = 1;

printf( "const char * data =" );

while( isnoteof ) {
printf( "\n\t\"" );

for( i = 0; isnoteof && i < 80; ++ i ) {
c = fgetc( stdin );
if( c == EOF ) {
isnoteof = 0;
}
else if( isascii( c ) ) {
switch( c ) {
case '\n': printf( "\\n" ); break;
case '\r': printf( "\\r" ); break;
case '\t': printf( "\\t" ); break;
case '"': printf( "\\"" ); break;
default: putchar( c );
}
else {
printf( "\\x%2x", c );
}
}
printf( "\"" );
}

printf( ";\n" );

return 0;
}