2013-01-02 3 views
5

두 난독 관련 문의 :F # MSIL 난독

1) MSIL 대상 양식에서, 소스의 형태로, 또는 가까운 뭔가 F 번호를 다시 분해 할 수있는 도구가 있습니까? 이것은 모호함을 통한 보안 시도가 아니지만 일부 소스 코드를 "도난"으로부터 보호하고자합니다.

2) 나는 약간의 F # 컴파일러 출력을 간략하게 살펴본 결과 일반적으로 C#이 MSIL 중간 표현에 더 가깝기 때문에 C# 컴파일 된 코드를 분해하면 얻을 수있는 것과 비교하여 꽤 횡설수설 한 것처럼 보입니다. C# 컴파일러에서 본 부분적으로 맹 글링 된 코드는 반복자 (아마도 C# 5.0의 async) 일뿐입니다.

지금까지 필자의 생각은 F # 컴파일 된 코드가 합리적으로 "난독 화"되어 있지만 사실입니까? (나는 이것이 다소 주관적인 질문이라는 것을 알고있다.)

+4

적들은 얼마나 좋은가? 유능한 맬웨어 분석가는 코드를 메모리 덤프에서 되돌릴 수 있습니다. IL은 신경 쓰지 마십시오. 누구로부터 당신의 근원을 "보호"하고 있습니까? –

+0

잠재적 인 경쟁자. 미심쩍은 것보다는 안전 할 것 같지만 안전하다고 생각합니다. 코드를 쉽게 올바른 도구로 난독화할 수 없도록하려는 것입니다. 코드를 직접 작성하기가 쉽지 않을 것입니다. 멀웨어 분석가가 목표 범위에 있다고 생각하지 않습니다. F #에 대한 중간 수준의 이해를 가진 사람과 더 비슷합니다. :-) –

+2

나는 그것이 모호하다고 말하지 않을 것이다. 방금 번역되었습니다. F # sugaring은 모두 실행 취소됩니다. 또한 디 컴파일을하면 F #에서 온 것이 분명하고 세미 경험이있는 F #/C# 개인은 디 컴파일 된 버전에서 F #을 다시 합성 할 수 있습니다. 발생하는 패턴이 있으며, 디 컴파일러가 수행하는 작업을 확인하고 상황이 어떻게 처리되는지 확인할 수있는 몇 가지 테스트 시나리오를 작성하면됩니다. – devshorts

답변

8
  1. 나는 이와 같은 것을 들어 보지 못했다. 그러나, 나는 그런 도구가 비교적 가까운 미래에 나타날 가능성이 매우 높다고 생각한다.
  2. F # 컴파일러에서 생성 된 어셈블리 (즉, MSIL 및 관련 메타 데이터)는 어떤 방식 으로든 난독 화되지 않습니다. 그러나 생성되는 코드 중 일부는 C# 또는 VB.NET 컴파일러에서 생성 된 코드와 매우 다르므로 리버스 엔지니어링하기가 쉽지 않습니다 (간단히 사용할 수있는 도구가 없기 때문에). 물론 @Craig Stuntz가 말했듯이, 경험 많은 동기있는 공격자에 대해서는 많은 보호를 제공하지 못합니다.

실제로 편집증 환자라면 컴파일 된 어셈블리에서 난독 화 도구를 사용하여 출하 할 것을 고려할 수 있습니다. 나는 늦은 2010 년부터 F #으로 {SmartAssembly}을 사용 해왔다. 그래서 나는 F #으로 작동한다는 것을 알고있다. 다른 도구를 사용하는 경우, 구입하기 전에 합리적으로 복잡한 F # 어셈블리에 대해 테스트해야합니다. obfuscator를 찾을 당시에는 많은 것이 F # 어셈블리로 올바르게 (또는 전혀) 작동하지 않았습니다. Any experience using .NET obfuscators on F# assemblies?

1

F 번호가 따라서는 디 컴파일 할 수있는 .NET 언어의 일부입니다

난 당신이 자세한 내용을 원하는 경우, F 번호 어셈블리를 난독에 대해 잠시 다시 몇 가지 메모를 썼다. RedGate Reflector에서 돈을 쓰고 싶다면 0xd4d의 dnSpy를 사용하십시오. (예, 잘 알려진 deobfuscator De4Dot와 동일한 개발자). 디 컴파일 된 코드는 실제로 하드 코딩 된 코드에 가깝습니다. 논리는 여전히 동일하므로 소스 코드를 복사/붙여 넣기 할 수 있습니다.

당신은 당신이 난독 사용을 고려할 수있는 F # 응용 프로그램을 보호하려면, & 현재 그들은 거의 모든이, 현명하게 선택하는 .NETGuard 정말 강력하지만, 그것은 F 번호 애플리케이션을 처리 할 수있는 하드 그래서 De4Dot에 의해 처리됩니다, 그것은 생성 할 수 있습니다 기본 출력 &에는 강력한 상수 보호 기능이 있으며 De4Dot에서는이를 처리 할 수 ​​없습니다.