문제

반사를 통해 응용 프로그램의 내부에 대해 많은 것을 알 수 있습니다. .NET BCL (기본 클래스 라이브러리)에 의해 노출되며 .NET 방법에 대해 실제 IL을 검색하는 것이 사소합니다.

리버스 엔지니어링 위키 백과:

리버스 엔지니어링은 구조, 기능 및 작동을 분석하여 장치, 객체 또는 시스템의 기술 원리를 발견하는 과정입니다.

반사는 확실히 구조의 분석으로 만족할 것입니다. 그러나 내성과 실제 역 엔지니어링 사이의 경계를 어디에서 그리는가? 그리고 법적 관점에서, 반사 역 엔지니어인가?

도움이 되었습니까?

해결책

둘 사이의 경계는 흐릿 해 보인다. 윤리적으로 나는 프로그래머의 동기 부여에 선을 그릴 것입니다.

그가 반사를 사용하여 특정 기준을 충족하는 타사 코드와 상호 작용 해야하는 라이브러리, 도구 또는 유사한 소프트웨어를 구축하는 경우 리버스 엔지니어링으로 보지 못할 것입니다.

예를 들어, 최근 LINQ2SQL 데이터 계층에 대한 일반 기본 클래스를 작성하고있었습니다. 기본 클래스는 반사를 사용하여 데이터베이스 레이아웃에 대한 통찰력을 얻고 중첩 비즈니스 엔티티의 업데이트를 올바르게 처리합니다. 다른 사람이 웹 응용 프로그램에 내베이스 클래스를 사용한다면 그의 소스 코드에 대한 지식을 얻지 못할 것입니다. 이 반사의 사용은 확실히 역 엔지니어가 아닙니다.

반면에 프로그래머가 반사를 사용하여 경쟁 업체의 소프트웨어에 의해 내부 작업을 이해하려고한다면, 그는 리버스 엔지니어링을하고 있습니다.

다른 팁

의문의 정의에 의문을 제기해야합니다 역 엔지니어링 언어를 쉽게 소집 할 수있는 능력이 언어 ALA 반사의 일부입니다.

같은 도구로 .NET 리플렉터 나는 라인이 정말로 흐리기 시작하는 것 같은 느낌이 든다!

그들은 그 자체로부터의 예를 사용하여 최근에 소스 코드를 파편화합니다 WMD 편집자를 위해. 나는 이것이 반사보다 리버스 엔지니어링을 더 정의한다고 주장한다.

반사는 단지 어셈블리에서 정보를 읽는 도구 일 뿐이므로 그 자체로 역 엔지니어가 아닙니다.

그런 다음이 정보를 사용하여 어셈블리가 어떻게 생성되었는지 알아냅니다.

나는 반성이 단지 도구 일 뿐이라고 말할 것이다. 반사의 사용이 반드시 역 엔지니어링을 의미하는 것은 아닙니다.

예를 들어, 리버스 엔지니어링을 의미하지 않는 조립품에서 모든 대중과 보호 된 방법의 서명을 발견하기 위해 반사를 사용하는 경우.

법적 관점에서는 리버스 엔지니어링의 정의를 찾기 위해 걱정하는 법을 살펴 봐야합니다.

반사는 코드의 역 엔지니어링을 포함하여 많은 것들에 사용할 수있는 도구입니다. 반사는 다른 많은 목적으로도 사용될 수 있으므로 반사 덕분에 동적 언어를 구현하는 것이 훨씬 쉽습니다.

반사만으로도 역 엔지니어링에 충분하지 않습니다. 그런 식으로 프로그램 구조에 대한 정보를 찾을 수 있지만 여전히 코드를 디 컴파일해야합니다. 반사기와 같은 도구는이 기능을 추가합니다.

실제로, 그것은 역 엔지니어링과 직접적인 반대입니다.

적절하게, "역 엔지니어링"은 프로세스의 결과를보고 뒤로 작업하여 어떻게 도착했는지 결정하는 것입니다. 일반적으로 원래 코드에 대한 지식없이 수행되며 일반적으로 매우 다른 프로세스를 산출합니다.

저작권 보유자의 무서운 위협에도 불구하고 완벽하게 합법적입니다.

"분해"(일명 "반사")는 단지 하드 디스크에 바이트를 읽고 의미를 할당하는 작용 일뿐입니다. 이것이 바로 CPU가 코드를 실행할 때하는 일입니다. 여기서 우리는 단지 인간을 읽을 수있게하고 있습니다. 다시 말하지만, 저작권 보유자의 무서운 위협에도 불구하고 완벽하게 합법적입니다.

저작권 보유자가 자신의 작업에서 이익을 얻지 못하게하는 방식으로 다른 사람의 코드를 판매 (또는 직접 사용) ~이다 불법이지만 우리는 여기서 그것에 대해 이야기하고 있지 않습니다.

나는 당신이 여기서 두 가지 다른 것에 대해 이야기하고 있다고 생각합니다.

  • 반사 리버스 엔지니어링에 사용할 수있는 기술입니다 (무엇보다도).
  • 역 엔지니어링 목표를 달성하기 위해 반사를 사용할 수는 있지만 반드시 반영 할 수있는 행동입니다.

법적 관점에서, 리버스 엔지니어링 목적으로 반사를 사용하는 경우 목표에 따라 다릅니다.

물론 Ianal이지만, 나는 역 엔지니어링이 그 자체로 불법이 아니라고 생각합니다. 불법 활동이 될 수 있습니다 대리로, 즉 저작권을 위반하는 등

아니요. 반사를 통해 일반적으로 방법을 호출하거나 메소드 속성을보고있는 다른 방법에 대해 이야기하고 있습니다.

대조적으로, 나는 리버스 엔지니어링의 제품이 저자의 알고리즘과 아이디어를 이해하기 위해 볼 수있는 소스 코드를 생성 할 것으로 기대합니다. 이것은 일반적으로 그들이 보호하려는 것입니다.

변호사에게 법적 질문을해야합니다. 변호사들은 돈을 청구합니다. 변호사를 고용하지 않으면 변호사에게 물어 보지 않아 고소 당하면 더 많은 돈이들 수 있습니다.

최선의 방법 : 물어볼 필요가 없습니다. Microsoft는 이미 많은 .NET의 소스를 출시했습니다. 보다 http://www.microsoft.com/resources/sharedsource/default.mspx.

그것은 모두 당신이 반성하는 정도에 달려 있습니다. 같은 도구를 사용하는 경우 반사기, 또는 그와 비슷한 것을 코딩하면 실제로 소스 코드에 도달 할 때 리버스 엔지니어링이 될 것입니다.

반사는 Don이 말한대로 메소드를 호출하거나 속성을 보는 데 사용될 수 있지만, 어셈블리의 구조를 분석하고 기본 MSIL 코드를 엿볼 수도 있습니다. 따라서 반사를 한 번 사용하는 것은 결백 할 수 있으며, 하나는 역 엔지니어링입니다.

반사 SUN JVM보다 Microsoft .NET Framework (Sun JVM)가 도입되기 전에 수십 년 전에 사용 된 일반적인 컴퓨터 과학 용어입니다. 아이디어는 ~ 아니다 엔지니어링 애플리케이션을 반전하는 것을 목표로합니다. 특정 상황에서는이 목적으로 사용될 수 있다는 것은 우연한 일입니다. 다른 사람들이 쓴 것처럼, 반사는 "도구"입니다.

.NET 및 Java와 같은 많은 언어로 된 반사는 객체와 자유롭게 상호 작용할 수없는 열악한 구문의 패치입니다.

Smalltak 또는 Self와 같은 실제로 객체 지향 언어에서는 반성이 거의 필요하지 않으며 필요한 경우 지금까지 .NET 및 Java가 제공하는 것보다 더 강력합니다.

그러나, 나는 반사가 역 공학이라고 믿는다.

현재 Drupal (PHP 기반)과 많은 작업을하고 있는데,이 기능은 모듈의 이름을 사전 정의 된 후크 이름에 연결하여 해당 함수가 존재하는지 확인하는 것과 같은 추악한 것들을 사용하므로 나중에 호출 할 수 있습니다 (예 : module_hook_name).

매우 편리하지만 모든 메시지에 응답 할 수있는 추상 클래스를 서브 클래스하여 피할 수있는 실제 OO 언어를 믿습니다.

극단적 인 상황을 제외하고는 프로그래밍 언어의 결함을 볼 수있는 극한 상황을 제외하고 반사를 사용해서는 안됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top