2013-07-18 5 views
0

내 응용 프로그램 프로젝트의 릴리스 버전을 컴파일합니다. 바이너리 편집기로 보았을 때 컴파일 된 최종 exe는 exe 안에 바이너리 텍스트 데이터로 TPolygon, TRectangle 등과 같이 내 자신이 만든 객체의 모든 클래스 이름을 볼 수 있습니다.컴파일 된 릴리스에서 클래스 문자열 이름 제거 exe

이 정보는 exe에서 제거 할 수 있습니다. dpr에서 사용하는 RTTI 사용을 해제하려고합니다.

{$WEAKLINKRTTI ON} 
{$RTTI EXPLICIT METHODS([]) PROPERTIES([]) FIELDS([])} 

하지만 행운은 아닙니다.

+1

클래스 이름을 삭제하는 대신 exe를 암호화 및/또는 난독 화하는 도구를 사용해 볼 수 있습니다. – RRUZ

+0

@RRUZ, 일부 패커로 난독 화하려고했지만 exe가 실행되고 메모리 스냅 샷을 덤프 한 후에 클래스 이름이 메모리 스트림에 있습니다. –

+1

좋은 해커라면 앱을 해킹 할 수 있습니다. 일부는 숨기 만하면됩니다. 메모리에서 압축을 푼 실행 파일을 검사 할 수 있다면 나머지는 수행 할 수 있습니다. 질문은 다소 변형 된 것처럼 보입니다. –

답변

2

실행 파일에서 클래스 이름을 제거하려는 경우 응용 프로그램이 작동을 멈 춥니 다. 응용 프로그램에 컴파일 된 .dfm 파일에는 클래스 이름이 들어 있습니다. 런타임 스트리밍 프레임 워크는 클래스 레지스트리에서 해당 클래스를 볼 수 있어야하며 이름이 없으면 양식과 속성을 스트리밍 할 수 없습니다.

AlexSC가 지적했듯이 TObject.ClassName을 구현하려면 클래스의 이름이 실행 파일에 있어야합니다.

+0

게다가 이들 문자열은 TObject.ClassName 메서드에 의해 반환됩니다. 따라서 David이 말했듯이 그 이름은 .EXE 파일에서 계속되어야합니다. – AlexSC

+0

@David Heffernan, 예 형식의 시각적 구성 요소는 괜찮습니다. 예를 들어 직렬 응용 프로그램의 유효성을 검사하기 위해 일부 보안 클래스를 사용하고 TSerialCheckSum 개체의 어느 위치에서나 TObject.ClassName을 사용하지 않습니다. 적어도 보안 클래스에서는 클래스 이름을 지우는 것이 가능합니다. –

+8

해당 클래스에 설명이 포함되지 않은 이름을 지정하십시오. –