2010-01-30 15 views
14

Piszę klasę do obsługi zabezpieczeń w moim pliku wykonywalnym (sprawdzanie seriali, sprawdzanie daty wersji próbnej itp.). Po skompilowaniu pliku wykonywalnego (nawet w wersji Release, z wyłączonym generowaniem debugowania i RTTI), kiedy otwieram go w NotePadzie i przeszukuję nazwę metody w nieprzetworzonych danych, widzę wszystkie nazwy metod, które łączą moją klasę . W bazie nie ma żadnych opublikowanych członków w żadnej klasie.Delphi: Zapobieganie wyświetlaniu nazw metod w plikach wykonywalnych

Jest to szkodliwe dla ochrony. Czy istnieje sposób, aby powiedzieć Delphi, aby nie zapisywał nazw metod w pliku wykonywalnym? Dlaczego magazynuje je w ogóle, jeśli nie ma potrzeby użycia RTTI i eksplozji COM? Czy jest jakaś opcja kompilatora kontrolująca to?

Możliwe, że DOWOLNA metoda DOWOLNEJ klasy w docelowym pliku wykonywalnym jest przechowywana wewnątrz pliku wykonywalnego w formie tekstowej. Podobno jest to spowodowane przez dłuższy RTTI jest domyślnie włączona dla wszystkich klas w Delphi 2010.

+0

@FractalizeR. - nie ma to w niewłaściwy sposób ale jeśli opierasz (część) twoje bezpieczeństwo na zaciemnianiu, podejmiesz niewłaściwe podejście. Nie znam się na bezpieczeństwie, ale wiem, że nie powinieneś próbować urządzenie do własnego "nietłukącego" schematu. Sugeruję, abyś szukał rozwiązania komercyjnego lub open source do obsługi aspektu bezpieczeństwa swojej aplikacji. –

+0

Jeśli chcesz zobaczyć, jakie symbole (np. Procedury i nazwy funkcji) pozostaną w twoim exe, dobrym testem będzie załadowanie exe do Ida (The Interactive Disassembler): http://www.hex-rays.com/idapro/ewaluacja i darmowe wersje są dostępne. – Remko

+0

@Lieven Planuję użyć opiekuna Themida nad moim exe, ale nawet w tym przypadku trzeba wyeliminować wszystkie nadmierne informacje od exe, aby wzmocnić ochronę. –

Odpowiedz

15

Jeśli proszą o rozszerzonym RTTI w Delphi 2010, to może być wyłączone przez

{$ RTTI EXPLICIT METODY ([]) WŁAŚCIWOŚCI ([]) FIELDS ([])}

patrz także docwiki.

+1

Chyba masz rację. Ale czy ta opcja nie jest sterowana z GUI? Jeśli tak, to w jaki sposób? –

+2

AFAIK Brak kontrolki GUI dla rozszerzonego interfejsu RTTI. Musisz dodać te dyrektywy do każdej jednostki. –

-1

To, co prawdopodobnie zobaczysz, to definicja twojej formy jako zasobu (np. Binarna reprezentacja plików DFM twojego projektu).

Jeśli nie chcesz ich wyświetlać (na ekranie z informacjami seryjnymi itp.), Powinieneś utworzyć te formularze "w kodzie". Np. Utwórz TForm, umieść na nim TButton i TEdit, dołącz procedury obsługi zdarzeń w kodzie.

Aby to zrobić w sposób ręczny: zacznij od formularza i utwórz moduł DFM. Podczas przeglądania formularza, wybierz Widok jako tekst z menu kontekstowego, a dowiesz się, jakie rzeczy powinieneś skopiować do kodu. I upewnij się, aby nie stawiać żadnych varaiablerefernces pod de opublikowany (zawsze umieścić public/protected/private jako pierwsza linia w definicji klasy

+1

Nie chodzi tu o formularze, ale o niestandardowe klasy wywodzące się z TObject. –

+0

@FraktalizR: biorąc pod uwagę informacje, które podałeś wcześniej, mogło to dotyczyć zasobów osadzonych ORAZ RTTI. Dopiero w swojej późniejszej aktualizacji wspomniałeś, że chodzi o nowe rozszerzone RTTI. Nadal: rersources również zdradzają nazwy klas, więc nie mogę zrozumieć, dlaczego odrzucasz te informacje w ten sposób.Prawdą jest, że jest to metoda osadzania nazw klas w pliku wykonywalnym. –

6

Również rozebrać delokalizacji, zajmują następujące w projekcie w pliku DPR.

{$IFDEF RELEASE} 
    // Leave out Relocation Table in Release version 
    {$SetPEFlags IMAGE_FILE_RELOCS_STRIPPED} 
{$ENDIF RELEASE} 
+0

Daje błąd kompilatora w Delphi 2010. W jakiej wersji jest przeznaczony? –

+0

Stała jest zadeklarowana w Windows.pas: IMAGE_FILE_RELOCS_STRIPPED = $ 0001; {Informacje o relokacji usunięte z pliku. } Musisz więc dodać jednostkę Windows do klauzuli uses w dpr lub zadeklarować ją samodzielnie. – Remko

6

... i nie zapomnij wyłączyć „td 32 informacji diagnostycznych” (w starszych wersjach) lub informacje debugowania w zakładce łącznikowej w późniejszych

Powiązane problemy