2011-12-13 3 views

답변

3

이름에서 알 수 있듯이 Google Native Client는 기본 코드를 사용합니다. 즉, 데스크톱의 평균 실행 바이너리와 마찬가지로 코드가 컴파일됩니다. 디스 어셈블 할 수 있지만 소스 코드를 복구 할 수는 없습니다.

1

네이티브 클라이언트는 클라이언트에서 네이티브 코드를 실행하고 있음을 의미합니다. 대부분의 경우 클라이언트에서 i386 또는 amd64 기계 언어를 실행하게됩니다. 컴파일 된 언어를 사용하는 경우 사용자는 직접 언어를 복구 할 수 없습니다. 사용자는 코드에 대한 정보를 복구하기 위해 소프트웨어를 해체 할 수 있지만 이 어셈블리 언어 인이 아니면 원본 소스 코드를 복구 할 수 없습니다. 디스 어셈블 된 바이너리에서 소프트웨어를 다시 작성하는 것은 어렵지만 충분한 시간이 주어지면 일반적으로 수행 할 수 있습니다. 그것은 정말로 당신이 코드를 사용하는 사람들에 대해 얼마나 편집증 적인가에 달려 있습니다.

1

정적 분석을 수행 할 수 있도록 신뢰할 수있는 디스 어셈블리를 가능하게하는 Native Client의 구조 요구 사항은 코드 난독 화에 대한 일부 기술을 사용할 수 없게 만들 수 있습니다. 이들은 종종 맬웨어 분석을 어렵게 만들기 위해 맬웨어가 사용하는 것과 동일한 기술입니다. 즉, 서로 다른 오프셋으로 디코딩 된 경우 명령 스트림에 대한 두 가지 유효한 해석이 있어야합니다. 그러나 Native Client는 JIT를 지원하므로 자체 수정 코드의 형식을 허용합니다. Mono는 예를 들어 just-in-time 코드 생성을 사용하며, JIT 화 된 코드가 NaCl 보안 요구 사항을 계속 준수하는 한 동일한 인터페이스를 사용하여 난독 화 코드를 만들 수 있습니다.

JIT 인터페이스를 사용하면 코드가 다른 CPU 아키텍처와 호환되지 않게됩니다.

관련 문제