2017-05-15 12 views
0

私の友人は、Fody.Costuraでパックされたアセンブリを解凍する挑戦を与えました。アセンブリには、リソースとして埋め込まれたdll依存関係があります。私は は、.zipファイルを抽出することになるが、結果は全く役に立たないです enter image description hereFody.Costuraパックされたアセンブリを解凍する方法

が適しがある場合には動作します

public static void Decompress(string path) 
{ 
    using (var stream = File.OpenRead(path)) 
    using (var compressStream = new DeflateStream(stream, CompressionMode.Decompress)) 
    { 
     compressStream.Seek(0, SeekOrigin.Begin); 
     var fs = File.Create(path + ".decompressed"); 
     compressStream.CopyTo(fs); 
     fs.Close(); 
    } 
} 

ここdotPeekで、この.zipファイルのリソースを抽出し、このコードでそれを解凍しようとしましたこのパックされたDLLを解凍するソリューション?

+0

の.textファイルにはコードが含まれているかもしれないが、それが読めない、それはバイナリファイル – chris579

+0

だあなたはそこにソースコードを見つけることを期待しましたか?解凍後、コードを逆コンパイルする必要があります。 –

+0

そこにソースコードを見つける予定はありませんでした。私の質問は、コード自体を逆コンパイルするプロセスを目指しています。 – chris579

答えて

1

Costuraがこれらのリソースの解凍に使用するコードはここにあります。

https://github.com/Fody/Costura/blob/master/src/Costura.Template/Common.cs

static void CopyTo(Stream source, Stream destination) 
{ 
    var array = new byte[81920]; 
    int count; 
    while ((count = source.Read(array, 0, array.Length)) != 0) 
    { 
     destination.Write(array, 0, count); 
    } 
} 

static Stream LoadStream(string fullname) 
{ 
    var executingAssembly = Assembly.GetExecutingAssembly(); 

    if (fullname.EndsWith(".zip")) 
    { 
     using (var stream = executingAssembly.GetManifestResourceStream(fullname)) 
     using (var compressStream = new DeflateStream(stream, CompressionMode.Decompress)) 
     { 
      var memStream = new MemoryStream(); 
      CopyTo(compressStream, memStream); 
      memStream.Position = 0; 
      return memStream; 
     } 
    } 

    return executingAssembly.GetManifestResourceStream(fullname); 
} 
+0

ソースに関するちょっとした質問:なぜ独自のCopyToメソッドですか?これは特定の方法を持っていますか、標準ライブラリに実装されるまでのこのコードですか? – chris579

+0

Costuraは.net 2をサポートしています。ネイティブのCopyToメソッドはありません。 –

+0

ああ、ありがとう! – chris579

関連する問題