2010-01-23 2 views

답변

25

RubyScript2Exe 또는 AllInOneRuby 같은 몇 가지 옵션이있다. 그러나 은 해석 언어가 모호한 경향이 있습니다. 이들은 대개 더 복잡한 메타 프로그래밍 기술을 이해하지 못합니다.

즉 완전히 다른 라이브러리의 bar 메소드에서 foo.send(:bar, ...)과 같은 메소드가 호출되거나, eval("require %w{abc def ghi}")은 3 개의 다른 라이브러리가 필요하다는 것을 반드시 알 수있는 것은 아닙니다. 이것들은 간단한 예제입니다. method_missing과 그 ilk를 믹스에 넣으면 훨씬 복잡한 작업이됩니다.

obfuscator가 이러한 종류의 코드를 발견하면 적절한 지시 사항을 충실하게 컴파일하지만 특정 라이브러리 나 다른 코드도 포함시키는 것을 알지 못할 수 있습니다. 동적으로 include d 또는 require d를 정적으로 링크 된 실행 파일에서 런타임에 사용할 수 없으므로 심각한 문제가 발생할 수 있습니다.

불행히도 많은 보석과 라이브러리는 정교한 메타 프로그래밍 기술을 사용합니다. 난독 화를 사용하여 프로그램에서 동일한 동작을 수행하려고하면 여기에 문제가 발생할 수 있습니다. 더욱더 간접적 인 단계가 있기 때문에 난독 화 된 버전에서 버그가 발생하면 정확히 어떤 일이 발생했는지 또는 어떻게 재현하는지 모를 수 있습니다.

+7

참고 : 이는 RubyScript2Exe 또는 AllInOneRuby의 기능에 대한 설명이 아니며 강력한 반영/내성 기능이있는 언어로 된 obfuscator의 부적절 함에 대한 일반적인 설명입니다. –

3

당신이하려는 일에 따라 루비 (Ruby) 스크립트에서 C 확장을 만들 수있는 보석이 있습니다.이 확장은 루비 앱 내부의 요구 사항으로 사용될 수 있습니다. 그 ruby2cext라고합니다. 그것은 당신의 모든 코드를 C 언어로 난독 화시킬 것이고 당신은 별도의 루비 스크립트로 .so를 요구할 수 있으며 그것은 보통의 루비 스크립트처럼 작동 할 것입니다.

+1

이 프로젝트는 좋아 보인다 ... 버려진 핏빛이다. (편집 : https://github.com/rdp/crystalizer –