2013-08-26 18 views
9

Mam wniosek napisany w języku C# (bez źródła oczywiście), który należy trochę zmienić. Na przykład, muszę zatrzymać kilka linii kodu, które tworzą niepotrzebne menu. Myślę, że powinienem je skomentować.Modyfikuj skompilowany .Net Exe

Kod źródłowy nie jest obfuskowany. Wiem, że mogę całkowicie dekompilować, zmieniać i kompilować ponownie, używając narzędzi takich jak Reflector/Reflexil. Ale wszyscy wiedzą, że dzięki temu wiele części kodu nie będzie się ponownie kompilować! Czy istnieje sposób w Reflectorze (lub innym produkcie), że część może zostać wyłączona/zmieniona bez tego procesu?

Dzięki.

Odpowiedz

3

W końcu udało mi się „Wyłącz” kilka linijek kodu w skompilowane exe.

Użyłem reflektora z zainstalowaną wtyczką Reflexil. Reflexil pozwolił mi edytować instrukcję MSIL, a następnie zapisać wynik z powrotem do pliku exe. Wymagało to nauki kilku instrukcji MSIL, szczególnie polecenia "brak operacji" (linia kodu nic nie robi).Aby wyświetlić listę instrukcji i samouczek, zobacz here i here.

Mam nadzieję, że pomaga komuś innemu.

4

Jeśli naprawdę potrzebujesz tego, możesz go rozpakować za pomocą Reflectora (lub podobnego produktu), a następnie użyć go do odtworzenia rozwiązania w .Net, które wygeneruje ten sam plik wykonywalny.

Można uruchomić w kwestii wokół:

  1. zamaskowany kodów
  2. odcinkach, gdzie dekompilować pokazuje dokładny kod dla poszczególnych odcinków, ale z jakiegoś powodu to po prostu nie działa w nowym roztworze (i co wtedy robisz?)

To nie wspominając o potencjalnych problemach prawnych związanych z robieniem tego. Jeśli plik wykonywalny został wydany na podstawie licencji, która pozwoliłaby ci na to, wówczas najprawdopodobniej miałbyś dostęp do kodu źródłowego. Zatem fakt, że nie masz dostępu do kodu źródłowego, oznacza, że ​​robienie tego, co sugerujesz, może nie być legalne.

+0

Oprócz spraw prawnych, kod źródłowy nie jest ukrywane. Wiedziałem, że mogę całkowicie dekompilować, zmienić i skompilować ponownie. Ale jak już powiedziałeś, wiele części kodu nie będzie się kompilować ponownie! Czy istnieje sposób w Reflectorze (lub innym produkcie), że część może zostać wyłączona/zmieniona bez tego procesu? –

-2

Jeśli posiadasz kod źródłowy na tym samym komputerze, na którym testujesz plik exe, a jeśli dokonujesz zmian w kodzie źródłowym w visual studio, to podczas kompilacji zostanie automatycznie odzwierciedlony w pliku exe.

Nie musisz robić z tego żadnej specjalnej rzeczy. A jeśli tak nie jest, po prostu wprowadź zmiany w kodzie i wklej nowy katalog exe folderu debugg (z folderem debugg) na innym komputerze mającym wszystkie ostatnie zmiany.

+1

Czy mógłbyś ponownie przeczytać to pytanie? Nie mamy żadnego kodu źródłowego. Po prostu skompilowałem plik exe i bibliotekę DLL. Musimy zmienić kilka linii kodu. –

0

Wątek może pomóc: dotnet dll decompile and change the code

Ostatni raz Kiedy próbowałem z dekompilować źródłem użyciu odbicia, mam zbyt wiele problemów z kompilacji odnośnie do zasobów i innych subwooferów choć dll nie jest ukrywane. Tak więc mogą istnieć rzeczy wykraczające poza samo wydobywanie źródła i modyfikowanie, aby twoja nowa biblioteka dll działała jak stara.

SO Sugerowałbym, aby przejść z bezpośredniej manipulacji dll przy użyciu dowolnej z opcji wymienionych w innym wątku.

13

Możesz chcieć spróbować dnSpy. Jest to edytor składania .NET, dekompilator i debugger rozwidlony z ILSpy.

https://github.com/0xd4d/dnSpy

+4

Świetne znalezisko! Opis strony github wygląda tak, jakby to był nieudolny projekt, ale sama aplikacja jest liderem przed dowolnymi darmowymi alternatywami. – blade

+0

Wow, jestem pod wrażeniem. To może faktycznie rekompilować zmodyfikowane złożenia. Chciałem tylko zmienić adres e-mail (* wzrok *) i to się udało! Szalony! – Jerther

+0

Jaka to magia? Jest po prostu idealny! –