2011-01-06 5 views
0

최근 코드 난독 화에 대해 알게되었습니다. 그 좋은 일은, 당신은 여유 시간이있을 때,하지만 나는 다른 질문이 있습니다. 왜 그럴까요?다양한 언어의 코드 난독 화 사용

먼저, PHP, 자바 스크립트 등의 해석이 가능한 언어가 있습니다. 거기에 그것은 좋고 더 안전한 것으로 보인다.

두 번째로,이 언어에는 제게 실제 효과가없는 것으로 보이는 언어가 있습니다. 모든 원시 코드는 컴파일 된 언어입니다. C를 예로 들어 보겠습니다. 컴파일되면 모든 변수 이름, 함수 이름, 대부분의 난독 화 기술이 사라집니다. 어떤 사람들이 원시 코드로 만들 수 있다면, 사이클 대신에 재귀와 같은 것들이 될 것이지만, 디스어셈블러가 생성 한 식별자 대신 이름을 분해 한 코드가있을 것입니다. 맞습니까?

그리고 마지막 카테고리는 내가 잘 모르는 언어입니다. 그리고 그것이 내가 묻는 주된 이유입니다. 이 언어는 Java, C# (.NET) 및 WP7에서 사용 된 마지막 Silverlight입니다. WP7 앱에서 코드 난독 화가 해킹을 방지하는 데 도움이된다는 기사를 읽었 기 때문에 묻습니다. 하지만 나는 항상 바이트 코드를 표준 어셈블러 코드와 매우 유사하다고 생각했기 때문에 실제 사전 컴파일 변수 이름, 함수 이름 등에 관한 정보는 다시 찾지 못했습니다. 그래서 진실은 어디에 있습니까?

+4

진실은 당신이 지루해하고 오락 거리가 아니거나 전 세계가 그들의 초강력의 혁신적인 아이디어를 훔치려 고 생각하는 편집증 환자가 아니라면 진실은 당신이 그것을하지 않는다는 것입니다. 그리고 그것이 가져다주는 "보안"은 존재하지 않습니다. "무명을 통한 보안"과 유사한 보안에 대한 잘못된 인식입니다. – delnan

답변

2

원하면 할 수는 있지만 결정된 사람이 그걸보고 겁 먹지는 않을 것으로 예상하십시오. De-obfuscator가 존재하기 때문에 사람들은 (최적화 된 어셈블리를 읽고 원래의 C 코드를 재구성 할 수있는 사람들처럼) 난독 화 코드도 읽을 수 있습니다. 코드 난독 화는 단지 보안에 대한 잘못된 인식을 제공하며 코드를 도용하는 데 심각한 사람을 억제하는 대신 호기심이 많은 사람을 방해 할 수 있습니다. 그것이 당신에게주는 것은 보안에 대한 잘못된 인식이지만 진짜는 아닙니다. Schneier는이 "보안 극장"의 이름을 적절하게지었습니다.

예. 소스에 대한 자세한 정보를 보유한 많은 현대 언어는 기계어 코드로 컴파일 된 언어보다 잘 모호 할 수 있습니다. 후자의 경우 컴파일러가 이미 최적화 작업을 잘 수행하고 있습니다. 하지만 전통적인 어셈블러와 비슷한 바이트 코드 개념은 약간 잘못되었습니다. 특히 .NET 바이트 코드는 원본 소스를 거의 정확하게 재구성 할 수있는 충분한 메타 데이터를 유지합니다 (Reflector 참조). 유지되지 않는 것은 메서드에 대한 지역 변수 및 인수의 이름입니다. 그러나 당신은 여전히 ​​방법과 클래스 명을 필요로하고 유지합니다.

주의해야 할 또 다른 문제점 : 고객에게 난독 처리 된 실행 파일을 제공하고 프로그램이 충돌하는 경우, 난독 화 된 스택 트레이스 대신 실제 스택 트레이스를 가져 오는 방법이 있는지 확인하십시오. "불편을 드러내 기 때문에 내 프로그램이 업무 시간을 죽인 이유에 대한 근본적인 원인을 파악할 수 없습니다."라고 말하면서 다음과 같이 말합니다.

+0

글쎄, 먼저 고마워. 저는 개발자보다 "학생"입니다. 저는 주로 SW보다 HW에 관심이 많습니다. 주로 C 또는 어셈블러에서 고정밀 MCU 타이밍으로 작성합니다. 필자는 바이트 코드 컴파일 된 플랫폼에서이 작업을 수행하는 것이 실제적인 이점이 있음을 대부분 알아야했습니다. 그리고 나는 .net이 거의 원본 소스를 재구성하기 위해 메타 데이터를 저장한다는 사실에 매우 놀랐다. 왜? 나는 항상 사물의 논리적 인 목적을 찾습니다. 어셈블리를 읽는 것이 한 가지이지만 코드 전체를 재구성 할 수 있어야합니다. –

+0

@ B.Gen : 바이트 코드는 실행 된 코드를 향한 첫 단계 일뿐입니다.그 후에도 네이티브 코드를 생성하는 just-in-time 컴파일러가 있습니다. 왜 그렇게 많은 메타 데이터가 유지되는지에 관해서, 나는 정확하게 모른다. 그러나 일부는 다른 .NET 언어와의 상호 운용성을 위해, 일부는 디버깅 지원 (예 : 컴파일러 또는 도구 생성 코드 표시) 등으로 사용될 수 있습니다. 반사경은 LINQ 표현식 트리를 재구성 할 수도 있습니다. 바이트 코드는 정적 메소드 호출과 람다 함수 만이 남아 있습니다. – Joey

0

난독 화는 모바일의 일반적인 기술입니다. 하드웨어 제한이있는 응용 프로그램. 난독 화 된 코드는 식별자가 짧아지고 따라서 바이너리가 작아지는 경향이 있습니다.

+0

잠깐, 와트? 이미 질문에서와 같이, 네이티브 컴파일은 어쨌든 모든 식별자를 제거합니다. 게다가, 질문에 대답하는 것조차 오지 않습니다. – delnan

+0

자바는 모국어가 아닙니다! – Navi