2010-08-05 38 views

risposta

21

È possibile utilizzare la versione commerciale di Dotfuscator per offuscare automaticamente un'applicazione ClickOnce aggiungendo il manifest di distribuzione ("foo.application") come input per il progetto Dotfuscator. Dotfuscator ti consentirà di aggiungere eventuali esclusioni necessarie agli assembly contenuti nell'applicazione ClickOnce e creerà i manifesti di implementazione e applicazione aggiornati contenenti gli assembly offuscati.

La versione gratuita di Dotfuscator inclusa in Visual Studio (incluso Visual Studio 2010) non ha la funzione per offuscare automaticamente le applicazioni ClickOnce. Per ottenere un'applicazione ClickOnce offuscata, sarà necessario ricreare o aggiornare i manifesti ClickOnce poiché l'offuscamento modifica le firme degli assiemi.

È possibile utilizzare mage.exe o mageui.exe (incluso nell'SDK di Windows/.NET) per aggiornare i manifesti ClickOnce. Se stai per usare mage.exe devi essere consapevole che non puoi usare l'opzione "Usa .deploy file extension" nelle tue opzioni ClickOnce in quanto non la riconosce.

Assumendo che l'applicazione ClickOnce è chiamato "Pippo" e è alla versione 1.0.0.0 il processo che si vuole seguire è:

  1. pubblicare l'applicazione ClickOnce in una directory sul disco
  2. Run Dotfuscator CE e aggiungere gli assembly che si desidera vengano nascosti dalla directory bin del progetto
  3. Obfuscate gli assembly. Gli assembly offuscati verranno inseriti in una sottodirectory denominata "Dotfuscated" per impostazione predefinita.
  4. dimettersi assembly offuscati con sn.exe (solo se si è inizialmente forti loro, di nome)
  5. copiare gli assembly offuscati sopra la parte superiore di quelli nella ClickOnce pubblicare directory \ Application Files \ Foo_1_0_0_0
  6. Aggiornare il manifesto dell'applicazione e dimettersi esso:

    mage.exe -Aggiorna "Application Files \ Foo_1_0_0_0 \ Foo.exe.manifest" -CertFile "c: \ Foo \ foo.pfx" password -Password

  7. Aggiornare la distribuzione manifesto e dimettalo:

    mage.exe -Update Foo.application -AppManifest "File di applicazione \ Foo_1_0_0_0 \ Foo.exe.manifest" -CertFile "c: \ Foo \ foo.pfx" password -Password

Si dispone ora di una valida applicazione e manifesto di distribuzione tramite assemblee offuscati. È inoltre possibile utilizzare lo strumento MageUI.exe per compiere le stesse operazioni (e sa come gestire assemblee con il. distribuire estensione), ma non è così facile da automatizzare.

+0

Ciao @Joe, puoi spiegare da dove proviene il file pfx del certificato? – RHaguiuda

+0

@RHaguiuda se si spedisce software a clienti esterni, normalmente proviene da un fornitore di certificati (Comodo, Thawte, ecc.). Per le applicazioni interne ho utilizzato certificati firmati da un controller di dominio o solo certificati autofirmati da makecert.exe –

+0

Ciao @JoeKuemerle Dopo aver eseguito questa operazione, la mia applicazione ha smesso di funzionare sul computer client. Controlla l'aggiornamento, lo scarica e lo esegue. poi ha smesso di funzionare. Ho controllato il Visualizzatore eventi e trovato 1.0.0.0 4f29010f c d System.NullReferenceException C: \ Users \ Interbiz \ AppData \ Local \ Temp \ WER22D1.tmp.WERInternalMetadata.xml – Bindas

1

Sì, queste sono tecnologie compatibili. ClickOnce si concentra semplicemente sulla distribuzione di un'applicazione e dei suoi binari associati su una macchina di destinazione. Dotfuscator offusca i file DLL e EXE. Lavoreranno insieme finché eseguirai Dotfuscator prima di pubblicare l'applicazione.

+0

Ma, in VS2010, se si "pubblica" il clickonce, non ci sono dll/exe. Come "eseguire Dotfuscator prima di pubblicare l'applicazione". – Begtostudy

+1

Aggiungi, 'esegui Dotfuscator prima di pubblicare l'applicazione', come pubblicare? – Begtostudy

0

Se si utilizza VS2010, il dotfuscator che viene fornito con esso offuscherà i file e quindi firmerà nuovamente i manifesti. [Modifica: questo non è vero a meno che non acquisti la versione completa; funziona come VS2008.]

Se si utilizza VS2008, sarà necessario pubblicare, quindi nascondere i file e quindi firmare nuovamente i manifesti con Mage o MageUI.

+0

Ma, in VS2010, se si "pubblica" il clickonce, non ci sono dll/exe. Come "eseguire Dotfuscator prima di pubblicare l'applicazione". – Begtostudy

+0

Vedere le istruzioni sopra. Grazie ai ragazzi di Preemptive che hanno pubblicato la risposta dopo aver chiesto loro informazioni su Twitter. :-) – RobinDotNet

3

ho una soluzione simile a Joe Kuemerle di, ma prima che il processo di pubblicazione. Questo funziona con pubblicare al comando Visual Studio e MSBuild linea

Aggiungere il target BeforePublish al file di progetto.

<ItemGroup> 
    <ClickOnceFiles Include="bin\Release\ClickOnce.*"/> 
</ItemGroup> 
<Target Name="BeforePublish"> 
    <Exec Command="{path to dotfuscator}\dotfuscator.exe Dotfuscator.xml" /> 
    <Exec Command="mage.exe -u bin\Release\ClickOnce.exe.manifest" /> 
    <Exec Command="mage.exe -u bin\Release\ClickOnce.application -AppManifest bin\Release\ClickOnce.exe.manifest" /> 
    <Copy SourceFiles="@(ClickOnceFiles)" DestinationFolder="obj\Release" OverwriteReadOnlyFiles="True" /> 
</Target> 

I file ClickOnce sono ClickOnce.application, ClickOnce.exe e ClickOnce.exe.manifest. Il mio dotfuscator.xml si trova nella stessa cartella con il file di progetto. La chiave è l'ultimo comando, copiare i file ClickOnce nella cartella obj.

+0

Umm, quale parte di quanto sopra rigenera il manifest in base al numero di file? Dopotutto, potrei avere file X prima dell'offuscamento, ma solo un file dopo l'offuscamento (senza contare i file manifest e .vsto, ovviamente). –

1

Non so se questo è possibile solo nelle versioni successive di Visual Studio, ma per me funziona perfettamente:

  1. Creare l'eseguibile in uscita modalità
  2. Avviare l'exe-Modificatore di la vostra scelta e modificare il file alla obj/uscita/< nome del file .exe > (avviso: non bin/ ma obj/)
  3. Spingere il Pubblica adesso pulsante di Visual Studio che assume l'ultima generazione sono stati up-to-date
  4. Profit: D
0

L'Obfuscator altura lavora con clickonce

0

Eziriz .NET Reactor ha un'eccellente integrazione ClickOnce.