2010-01-30 5 views
14

실행 파일 (예 : 연재물 검사, 시험 날짜 확인 등)에서 보안을 처리하기위한 클래스를 작성하고 있습니다. 실행 파일을 컴파일 한 후에 (모든 디버그 및 RTTI 생성을 해제 한 릴리즈 빌드에서도) 메모장에서 열어 원시 데이터의 메서드 이름을 검색하면 클래스를 어셈블하는 메서드의 이름을 모두 볼 수 있습니다. . 코드베이스의 어떤 클래스에도 게시 된 멤버가 없습니다.델파이 : 실행 파일에 메서드 이름이 나타나지 않도록합니다.

이것은 보호에 좋지 않습니다. 델파이에게 메소드 이름을 실행 파일에 저장하지 말라고 말하는 방법이 있습니까? RTTI가 필요없고 COM 폭발이 없으면 왜 그것들을 저장하고 있습니까? 어떤 컴파일러 옵션이 이것을 제어합니까?

대상 실행 파일에있는 ANY 클래스의 ANY 메서드가 실행 파일 내에 텍스트 형식으로 저장되어있을 수 있습니다. 분명히이가 확장 된 RTTI에 의해 발생 델파이로 모든 클래스에 대해 기본적으로 설정되는 2010 년

+0

@FractalizeR - 잘못된 방향으로 가져 가지 마십시오. 그러나 당신이 난독 화에 당신의 보안의 일부를 기반으로한다면, 당신은 잘못된 접근법을 취하고 있습니다. 나는 보안에 대해서는 거의 아무것도 안다. 자신 만의 '깨지지 않는'계획을 세우십시오. 애플리케이션의 보안 측면을 처리하기 위해 상용 또는 오픈 소스 솔루션을 검색하는 것이 좋습니다. –

+0

어떤 기호 (예 : 프로 시저 및 함수 이름)가 EXE에 남아 있는지 보려면 Ida (대화 형 디스어셈블러)에서 exe를로드하는 것이 좋습니다. http://www.hex-rays.com/idapro/평가판 및 프리웨어 버전을 사용할 수 있습니다. – Remko

+0

@Lieven 나는 내 exe를 통해 Themida 보호자를 사용할 계획이지만이 경우에도 보호를 강화하기 위해 exe에서 모든 과도한 정보를 제거해야합니다. –

답변

15

델파이 2010 년에 확장 된 RTTI에 대해 요구하는 경우,

{$ RTTI EXPLICIT으로 해제 전환 할 수 있습니다 방법 ([]) 속성 ([]) 필드 ([])}

도 참조하십시오. docwiki.

+1

네가 옳은 것 같아. 그러나 GUI에서이 옵션을 제어 할 수 있습니까? 그렇다면 - 어떻게? –

+2

AFAIK에는 향상된 RTTI에 대한 GUI 컨트롤이 없습니다. 이 지시어를 각 장치에 추가해야합니다. –

-1

자원으로 양식 정의가 표시됩니다 (예 : 프로젝트의 DFM 파일의 이진 represetation).

이러한 정보를 표시하지 않으려면 (직렬 정보 화면 등)이 양식을 "코드"로 만들어야합니다. 예를 들어, TForm을 만들고 TButton과 TEdit을 놓고 코드에 이벤트 핸들러를 붙이십시오.

손쉬운 방법은 양식으로 시작하여 DFM을 작성하는 것입니다. 양식을 보면서 컨텍스트 메뉴에서 텍스트로보기를 선택하면 코드로 복사해야 할 내용을 알 수 있습니다. . 그리고 출판 드 (항상 클래스 정의 내에서 첫 번째 줄과 같은/개인 보호/공공 넣어에서, 또한

+1

이것은 폼에 관한 것이 아니라 TObject에서 파생 된 사용자 정의 클래스에 관한 것입니다. –

+0

@FraktalizeR : 이전에 제공 한 정보를 감안할 때, 임베디드 리소스와 RTTI에 관한 것일 수 있습니다. 최신 업데이트에서만 새로운 확장 RTTI에 대해 언급했습니다. 아직도 : rersources도 클래스 이름을 제공하므로이 정보를 이처럼 무시하는 이유를 이해할 수 없습니다.이것은 실행 파일에 클래스 이름을 포함시키는 방법이라는 것이 맞습니다. –

6

재배치를 제거 어떤 varaiablerefernces을 배치 확실하지 만드는 프로젝트의 조선 민주주의 인민 공화국 파일에 다음을 차지 :

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

Delphi 2010에서 컴파일러 오류가 발생합니다. 어떤 버전을 사용합니까? –

+0

상수는 Windows.pas에 선언되어 있습니다. IMAGE_FILE_RELOCS_STRIPPED = $ 0001; {재배치 정보가 파일에서 제거되었습니다. } 그래서 Windows 단위를 dpr의 uses 절에 추가하거나 직접 선언해야합니다. – Remko

6

... "td 32 디버그 정보"(이전 버전에서) 또는 디버거 정보를 나중에 잊어 버리지 마세요.

관련 문제