2012-11-24 7 views
1

Je stocke tous les octets d'un fichier .exe externe, puis je les réécris dans un autre fichier .exe que je suis en train de créer avec FileOutputStream/BufferedOutputStream.Comment créer un fichier .exe externe en utilisant Java

Les octets sont bien écrits, et le deuxième programme est créé à l'emplacement de mon choix, mais quand je viens exécuter le fichier, il dit que ce n'est pas un fichier .exe valide ou pas une application 32/64bit valide.

Je devine parce que ce n'est pas emballé et généré correctement.

Comment est-ce que je le ferais donc c'est un fichier exécutable et fonctionne comme le premier?

p.s Je ne peux pas utiliser de copie du fichier, car je vais éventuellement crypter les octets et les écrire dans le fichier, mais je veux quand même qu'il soit utilisable.

+1

Que avez-vous besoin pour que? – AlexWien

+0

Je fais du cryptage, j'ai besoin de savoir comment le faire, donc si vous le savez, partagez. – user1848712

+0

Que se passe-t-il lorsque vous lancez l'invite cmd "fc old.exe new.exe". Est-ce que votre nouveau .exe a vraiment exactement les mêmes octets? –

Répondre

0

Si tous les octets sont identiques, ils s'exécuteront. Si le fichier d'origine s'exécute et que la copie ne l'est pas, certains des octets doivent être différents. Cela n'a rien à voir avec l'emballage. Peut-être que vous utilisez une variable byte pour stocker les données lues. Ne fais pas ça. Utilisez juste int. Si vous n'utilisez pas correctement les variables octets, vous pouvez rencontrer des problèmes dus à l'extension automatique des signes.

Cela fonctionne bien pour moi

import java.io.*; 

public class Test { 

    public static void main(String[] args) throws Exception { 
     BufferedInputStream in = new BufferedInputStream(new FileInputStream("a.exe")); 
     BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream("b.exe")); 
     int data = in.read(); 
     while(data >= 0) { 
      out.write(data); 
      data = in.read(); 
     } 
     in.close(); 
     out.close(); 
    } 
} 
Questions connexes