Domanda

Voglio sostituire una riga di codice in API partito 3d con il mio codice.

Voglio dire questo è pratica discutibile, ma ho bisogno di risolvere il loro problema.

È stato utile?

Soluzione

Non apologia di smontare il codice di terze parti o software commerciale, ma c'è un modo che può funzionare.

Se si utilizza Riflettore con la Reflexil plugin è possibile rimuovere sia forte nome firma, e iniettare / code cambiamento in un assieme.

Altri suggerimenti

È possibile, ma si lavorerà con MSIL, non con C #.

http://ccimetadata.codeplex.com/ http://www.mono-project.com/Cecil

Inoltre si può decomplie dll utilizzando Reflector.NET, bug fix e complie indietro.

Sì, è possibile. Per prima cosa, la DLL di montaggio è solo CIL (Common Intermediate Language). In linea di principio è possibile modificare direttamente da soli.

Ad esempio, è possibile utilizzare uno strumento come Cecil:

http://www.mono-project.com/Cecil

Si potrebbe anche decompilare con uno strumento come riflettore nella lingua che si sta più bene con. A quel punto, si può solo modificare il codice e la ricompilazione nel proprio personalizzato di montaggio.

http://www.red-gate.com/products/reflector/

Cecil ha anche un decompilatore:

http://evain.net/blog/articles/2008 / 12/15 / cecil-decompilatore

MonoDevelop (Mono IDE) ti permette di aprire un assieme come un progetto. Basta aprire la DLL come un file di progetto e (se ha sufficienti informazioni di debug) apparirà come un progetto di codice che è possibile quindi modificare e costruire.

http://monodevelop.com/

Tutti questi strumenti sono utilizzabili in Microsoft .NET o Mono. MonoDevelop può essere installato su Windows senza installare Mono a tutti.

Naturalmente, sto dicendo che si può. Non sto necessariamente avallare quello che fate. Si dovrà lavorare fuori il lato giuridico ed etico delle cose da soli poiché si sa di più sulla tua situazione.

Avete considerato cercando di chiamate di proxy e intercetta con uno strumento AOP , come < a href = "http://www.sharpcrafters.com/" rel = "nofollow noreferrer"> PostSharp o Linfu?

Spiegazione: quadri AOP (Aspect Oriented Programming) permettono di iniettare il comportamento prima di un dopo le chiamate e chiamate di reindirizzamento. Maggiori informazioni qui

Alcuni benefici aggiunti di questo vs cambiare MSIL:

  • La correzione sarebbe sopravvissuto aggiornamenti del 3a parte dll (dato API è stabile)
  • Si dovrebbe essere entro le condizioni di licenza
  • Si può facilmente rimuovere il proxy se fissano il metodo in questione

Se non consente di iniettare il proprio codice e non si ottiene la fonte, non avete la possibilità di farlo in un modo legittimo.

Gruppi di solito sono firmati e non si può cambiare. Inoltre, la maggior parte del software è protetto da diritti d'autore.

Se sei un cliente importante per questo fornitore, chiedere il codice. E, naturalmente, per il diritto di fissare questo bug.

Se si ha accesso al codice sorgente perché non fare il cambiamento e ri-compilazione?

Perché non solo riscrivere il metodo buggy da soli (dentro il proprio codice) e l'uso che al posto della libreria esterna?

Se si tratta di una piccola modifica, si può avere un pizzico di fortuna per tutto l'intervento il codice tramite ildasm quindi ilasm.

pensando a questo un po 'diverso, è possibile risolvere il IP con DNS l'avvio della vostra applicazione prima di coinvolgere la componente spuria, e poi mettere una voce nel file HOSTS in system32 \ drivers \ etc e in questo modo si non sarà effettivamente bisogno di andare fuori a DNS di nuovo (o meglio si vuole, ma dovrebbe essere quasi istantaneo).

Si può anche invece di cercare di fare questo tramite il montaggio in realtà guardare le DLL di Windows metodi di iniezione API di agganciare la chiamata al resolver DNS per eseguire la memorizzazione nella cache.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top