2017-01-25 18 views
0

환경을 기반으로하는 다양한 선처리 조건을 포함하는 Config.h 파일이 있습니다. 이 프로젝트는 2 가지 목표를 가지고 있습니다. 프리 프로세서 인수를 통해 환경이 첫 번째 대상인 경우 BASE_URL = @ "https://firsttarget.com/"일 수 있지만 환경이 두 번째 대상인 경우 BASE_URL = @ "https://secondtarget.com/"일 수 있습니다.전처리 기 내에서 코드가 조건부로 이진을 입력합니까?

누군가 합법적으로 어셈블리를 다시 컴파일하고 문자열 등을 찾아 다니는 경우 두 번째 대상 응용 프로그램에 대한 이진 파일을 찾는 사람은 "https://firsttarget.com/"이라는 문자열을 찾을 수 없습니다.

그럼 내 질문은 ... 관련이없는 경우 보관 중에 선 처리기 조건문 뒤에있는 문자열이 삭제 되었습니까?

답변

1

ifdef 라인에 지정된 기호가 정의되어 있지 않으면 컴파일러에서 #ifdef#endif (또는 #else) 사이의 코드 섹션을 볼 수 없습니다. 그러한 섹션에서 컴파일되지 않는 것을 작성함으로써 쉽게 이것을 보여줄 수 있습니다. 그리고 컴파일러는 그 코드를 보지 못하기 때문에 정의 된 값이 바이너리로 끝날 수있는 방법이 없습니다.

컴파일러가 정확히 작동하는지 확인하려면 Xcode에서 구현 파일을 선택하고 메뉴에서 "제품> 작업 수행> 사전 프로세스"를 선택하십시오. 그러면 컴파일러가 정확히 작동하는지 확인할 수 있습니다. 물론 가져온 모든 시스템 .h 파일의 내용도있을 것이므로 코드가 가장 끝에 있습니다. #define 줄도 제거되므로 실제로 어떤 문자열을 사용할 지 확인하려면 실제로 해당 매크로를 사용하는 파일을 선택해야합니다.

마지막으로 공격자가 수행 할 수있는 것과 동일한 작업을 수행 할 수 있습니다. 컴파일 된 바이너리의 strings 유틸리티를 사용하고 거기에있는 내용을 확인하십시오. Xcode에서 앱을 빌드하고 제품 그룹에서 앱 번들에 대한 'Finder에서 표시'옵션을 선택하십시오. "패키지 내용 표시"를 선택하면 실제 응용 프로그램 번들을 열 수 있습니다. 실제 바이너리는 번들과 같은 이름이지만 파일 확장자는 없습니다. 그런 다음 터미널 창을 열고 "strings"(단어 문자열 뒤에 공백이 있음)을 입력하고이 위에 이진 파일을 끕니다. 그런 다음 반품으로 확인하십시오. 바이너리에서 읽을 수있는 모든 문자열 (모든 선택자 포함)의 긴 목록을 얻을 수 있습니다.

+0

strings 유틸리티를 사용하여 컴파일 된 바이너리 내용을 더 자세히 설명 할 수 있습니까? –