Zasada działania obfuscatora?

0

Witajcie,
Bawię się różnymi obfuscatorami i zauważyłem, że część działa tak, że zamienia nazwy zmiennych w ciągi dziwnych znaków, ale ostatecznie po rekompilacji projekt się buduje.
Spotkałem się jednak z takim, który robi taki numer:

private int 0;
private int 1;
private int 2;
private int 3;
private double 0;
private double 1;
private double 2;
private double 3;

a potem dalej w kodzie:

      this.0 = parameter0;
      this.1 = parameter1;
      this.2 = parameter3;
      this.3 = parameter2;
      this.0 = parameter3;
      this.1 = parameter4;
      this.2 = parameter5;
      this.3 = parameter6;

Oczywiście po dekompilacji:

  • po pierwsze zmienne mają błędne nazwy - liczby (to mogę pozamieniać np. 0 - zero, 1 - jeden)
  • co bardziej zaskakujące wiele zmiennych (i metod) ma taką samą nazwę (parę zmiennych 0 i dużo metod 0)

Jak kompilator to rozumie? Czemu to działa, a po rekompilacji są same konflikty, dziesiątki deklaracji zmiennych o tych samych nazwach?

0

W bajtkodzie (IL) nazwy mogą być samymi liczbami, podczas gdy w kodzie źródłowym C# już nie - obfuskator wykorzystuje ten fakt, w efekcie czego właśnie otrzymuje się nazwy pól 0, 1 i 2.

0

czy można to jakoś obejść/naprawić? chciałbym teraz wprowadzić jakieś modyfikacje w swoim kodzie, np. zakomentować jakąś linijkę kodu, może ugryźć to od strony bajtkodu?

0

oczywiście zdaję sobie sprawę, że nie ma komentarzy w bajtkodzie - skrót myślowy, w którym chodzi o usunięcie linijki
pytanie także w drugą stronę, jak można dorzucić linijkę kodu

0

Udało mi się odkryć, że jeżeli wyedytuję EXE,DLL jest tam sekcja, gdzie wymienione są użyte metody i jeżeli wyedytuję jakąś, zachowując ilość znaków to program działa bez błędu dalej z nową metodą

get_HorizontalResolution get_Year 

zamienione na

get_HorizontalResolution get_Hour

a co gdybym chciał podmienić get_Year na null?
Jakieś edytory szesnastkowe? Jak ugryźć temat?

1 użytkowników online, w tym zalogowanych: 0, gości: 1